Hallo zusammen, ich versuche mich grade ein wenig mit dem ATTiny13 ...
Ausstattung ist das STK500 und AVR Studio 4
Ziel meines ersten Versuchsprogrammes : Nachbildung der Schaltzustände
eines PC Netzteils...
Schalter(Pb1) kurz drücken = Gerät ein (PB0=1)
Schalter länger als 5 sekunden gehalten = Auschaltflag (PB2=1)
Schalter länger Als 10 Sekunden gehalten = Gerät aus (PB0=0)
klingt trivial - ist es leider net ...
hier mal mein Code in der Version null hatte ich es mit Gotos gelöst
hier Versuch 2 mit while Schleifen ...
1 | #define PB0 0 //output
|
2 | #define PB1 1 //input
|
3 | #define PB2 2
|
4 | uint16_t t;
|
5 | uint16_t i;
|
6 |
|
7 | int main (void){
|
8 |
|
9 |
|
10 | // set PB.0 as output pin
|
11 |
|
12 | DDRB = 0b0000001;
|
13 |
|
14 | // set PB.0 to output low
|
15 |
|
16 | PORTB &= ~(1 << PB0);
|
17 |
|
18 | while(1){
|
19 |
|
20 | // Schleife solange Taster 0 ist
|
21 | start:
|
22 | i = PINB;
|
23 | if ( i & 0x02 ) goto start;
|
24 |
|
25 | // Taster betätigt Gerät schaltet ein
|
26 | i = PINB;
|
27 | if (!( i & 0x02 )){
|
28 | t=1;
|
29 | PORTB |= (1 << PB0);
|
30 | i = PINB;
|
31 | while((!( i & 0x02 ))+(t<6000)){ //Taster betätigt und Zeit kleiner 10 sekunden
|
32 | i = PINB;
|
33 | while((!( i & 0x02 ))+(t<3000)){ // Taster betätigt und Zeit kleiner 5 sekunden
|
34 | t=t+1;
|
35 | _delay_ms(1000);
|
36 | }
|
37 | // 5 sekunden Vorüber
|
38 | PORTB |= (1 << PB2);
|
39 | t=t+1;
|
40 | _delay_ms(1000);
|
41 | }
|
42 | // 10 sekunden vorrüber
|
43 | i = PINB;
|
44 | if (!( i & 0x02 )) PORTB &= ~(1 << PB0);//Gerät hart auschalten
|
45 | }
|
46 |
|
47 | }
|
48 | }
|
es scheint als ob t nicht initialisiert wird ... aber warum ?
jemand eine idee ?