Hallo, ich hab ein Problem beim Sleep_Mode beim Atmega88. So wie ich ihn im Moment programmiert habe, funktioniert er zwar einwandfrei, jedoch nicht wie gewünscht. Zur Zeit geht der Controller direkt nach dem Einschalten in den Sleep-Mode. Durch einen Low_Level Interrupt wird er daraus wieder aufgeweckt. Das Ein- und Ausschalten funktioniert über einen externen Taster also ohne Probleme. Nun möchte ich den Controller aber erst Schalfen schicken, wenn der Taster ca. 5 Sekunden lang gedrückt wurde. Jedoch weiß ich nicht so richtig, wie ich das anstellen soll. Kann mir da jemand nen guten Tip geben? Hier mal die Routine zum Sleep_Mode... int main(void) { start: init_avr(); init_varis(); sleep_mode_init(); _SEI; set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_mode(); //in sleepmodus gehen while(!(PIND & (1 << PIND3))) { ; } Port_Init(); wakeup = 0; while(1) { if((!(PIND & (1 << PIND3))) && wakeup == 0) { while(!(PIND & (1 << PIND3))) { ; } wakeup = 1; goto start; } }
Naja, ich gebe zu, mich jetzt nicht intensiv mit deinem Code auseinadnergesetzt zu haben. Aber "ca. 5 Sekunden" schreit für mich nach einem Timer. Der wird periodisch alle x Millisekunden aufgerufen und schaut nach, ob Taster gedrückt ist. Wenn das n mal nacheinander der Fall war, gibts grünes Licht für pennen oder aufwachen. Nebenbei hast du auch eine Tastenentprellung für kleinen Geld dabei. Ich hab mir mal was halbwegs generisches für den Timer gebastelt, da kann man callback Funktionen einhängen und wieder austragen, die ISR ruft die dann nach einer gewissen Periode auf. Hier mal die ISR, sollte als Anregung reichen. Rest gerne auf Verlangen. ISR(TIMER1_COMPA_vect) { uint8_t i; ticks++; for(i=0;i<MAX_CALLBACKS;i++) { if( callback[i].timer_cb!=NULL && (callback[i].last+callback[i].period==ticks) ) { callback[i].last=ticks; callback[i].timer_cb(); } } }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.