Also das geht alles viel einfacher:
Der AVR unterstütz zwei unterschiedliche Sleep Modi. Anbei ein kurzer
Auszug aus dem Atmel Datasheet (verfügbar auf der Atmel homepage
www.atmel.com).
im Power Down Modus braucht der AVR den geringsten Strom. Reagier aber
nicht nur auf externen Interrupt sondern auch auf den Watchdog timer.
Der lässt sich laut Datasheet in Stufen bis zu mehreren Sekunden
einstellen. Ich gehe davon aus, dass nicht genau die 950ms eingehalten
werden müssen, also bietet sich der Wert 1,5 Sec laut Datasheet an. Der
Wert lässt sich nicht durch eine andere Quarzwahl verändern, da hier ein
interner Oszillator zur Taktgewinnung verwendet wird. Sollten doch die
950ms nötig sein, dann hilft noch der Idle Mode, in dem der Timer
weiterläuft, aber eben ein bischen mehr Strom verbraten wird. Das ist
unterm Strich aber auch vom Stromverbrauch sicherlich noch günstiger,
wie ein externer Oszillator, vom Aufwand ganz zu schweigen.
Im Datasheet gibt es ein Kapitel Watchdog, der die Programmierung des
Watchdogs erklärt. Also viel Spass und ran an die SW Lösung.
Hier noch der Auszug, aus dem Datasheet:
ciao Remo
----------------
Idle Mode
When the SM bit is cleared (zero), the SLEEP instruction forces the MCU
into the Idle Mode stopping the CPU but allowing
Timer/Counters, Watchdog and the interrupt system to continue operating.
This enables the MCU to wake up from external
triggered interrupts as well as internal ones like Timer Overflow
interrupt and watchdog reset. If wake-up from the Analog
Comparator interrupt is not required, the analog comparator can be
powered down by setting the ACD-bit in the Analog
Comparator Control and Status register - ACSR. This will reduce power
consumption in Idle Mode.
Power Down Mode
When the SM bit is set (one), the SLEEP instruction forces the MCU into
the Power Down Mode. In this mode, the external
oscillator is stopped, while the external interrupts and the Watchdog
(if enabled) continue operating. Only an external reset,
a watchdog reset (if enabled), an external level interrupt, or a pin
change interrupt can wake up the MCU.
------------------