Um meine noch sehr dürftigen Kenntnisse in µCs und deren Programmierung
zu erweitern, übe ich gerade an einem Langzeit-Monoflop (man könnte auch
Treppenlichtautomat sagen). Der Übungskandidat ist ein ATTiny85.
An PB0 ist ein Taster nach GND angeschlossen, PB2 bedient eine LED.
Drücken der Taste schaltet die LED an, nach Ablauf des Timers wird sie
wieder ausgeschaltet. Soweit, so gut.
In dem Zusammenhang wollte ich dann den Tiny85 auch in den Powerdown
Mode schicken. Das tut er zwar, aber ich bekomme ihn anschließend nicht
wieder wach - bzw. nur mit Reset.
Laut Datenblatt ist der PB0 auch der PCINT0 und als Levelinterrupt
nutzbar. Nach erneutem Bedienen der Taste an PB0 soll ein LOW-Pegel an
PB0 über den externen Interrupt INT0 den Tiny wieder aufwecken und das
Monoflop neu starten.
Was habe ich da noch nicht beachtet oder falsch verstanden?
Eigentlich hätte ich erwartet, dass die Befehle
1 | set_sleep_mode(SLEEP_MODE_PWR_DOWN); //
|
2 | sleep_mode(); // wacht nicht mehr auf :-(
|
und die Installation der ISR (INT0_vect) ausreichen müssten.
Auch die Bedienung von MCUCR und GIMSK brachte keine Änderung.
Im Anhang das komplette Progrämmchen.