Forum: Mikrocontroller und Digitale Elektronik AVR Aufwachen vom Sleep


von Max W. (wauschi)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

um Strom zu sparen möchte ich den AVR über 32kHz betreiben und den 
Power-Down-Mode verwenden.

Ich habe einen 32kHz Quarz angeschlossen und den Timer2 entsprechend 
konfiguriert. Jede Sekunde wird ein Interrupt ausgelöst, super. In 
diesem ISR möcht ich dann in den Sleep gehen. Wenn ich Sleep ausführe 
wacht er nie wieder auf. Wie kann ich dem Controller sagen, dass er 
durch den Overflow-ISR vom Timer2 wieder aufwachen soll?

DANKE

von Falk (Gast)


Lesenswert?

@Max Wau

>um Strom zu sparen möchte ich den AVR über 32kHz betreiben und den
>Power-Down-Mode verwenden.

32 kHz ist gut, Power-Down ist schlecht. Denn dann ist wirklich ALLES 
deaktiviert, incl. dem Oszillator.
Du musst den Idle-Mode verwenden, dan laufen der Oszillator und die 
Timer.

>Ich habe einen 32kHz Quarz angeschlossen und den Timer2 entsprechend
>konfiguriert. Jede Sekunde wird ein Interrupt ausgelöst, super. In
>diesem ISR möcht ich dann in den Sleep gehen.

Nöö, du solltest in der Hauptschleife in den Sleep gehen (Idle Mode). 
Wenn dann der Timer klingelt, wird der Interupt ausgeführt, der setzt 
dann ein Flag für die Hauptschleife,. welche dann entsprechende Aktionen 
ausführt und sich dann wieder schlafen legt.

MfG
Falk

von Hannes L. (hannes)


Lesenswert?

Oder Du betreibst den AVR mit dem internen RC-Oszillator und schickst 
ihn in der Mainloop in den Power-Down-Sleep (Controllertakt und Timer 
aus). Timer2 klappert aber mit seinem Uhrenquarz weiter und weckt den 
AVR aus dem Tiefschlaf. Nun kann der AVR (mit internem RC-Oszillator) 
seine Arbeit tun, bis alle Jobs abgearbeitet sind und fällt dann wieder 
in den Tiefschlaf, aus dem er von Timer2 geweckt wird.

...

von Frank (Gast)


Lesenswert?

Ich dachte immer nur ein Level_Interrupt kann den Controller aus dem 
Power-Down holen?

von Falk (Gast)


Lesenswert?

RTFM, funktioniert immer wieder.

Power-down

Mode When the SM2..0 bits are written to 010, the SLEEP instruction 
makes the MCU enter Power-down mode. In this mode, the External 
Oscillator is stopped, while the External interrupts, the Two-wire 
Serial Interface address watch, and the Watchdog continue operating (if 
enabled). Only an External Reset, a Watchdog Reset, a Brown-out Reset, a 
Two-wire Serial Interface address match interrupt, an External level 
interrupt on INT0 or INT1, or an External interrupt on INT2 can wake up 
the MCU. This sleep mode basically halts all generated clocks, allowing 
operation of asynchronous modules only.

Power-save

Mode When the SM2..0 bits are written to 011, the SLEEP nstruction makes 
the MCU enter Power-save mode. This mode is identical to Power-down, 
with one exception: If Timer/Counter2 is clocked asynchronously, i.e., 
the AS2 bit in ASSR is set, Timer/Counter2 will run during sleep. The 
device can wake up from either Timer Overflow or Output Compare event 
from Timer/Counter2 if the corresponding Timer/Counter2 interrupt enable 
bits are set in TIMSK, and the Global Interrupt Enable bit in SREG is 
set.

MFG
Falk

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Frank wrote:
> Ich dachte immer nur ein Level_Interrupt kann den Controller aus dem
> Power-Down holen?

Das trifft aber nicht für alle AVRs zu.
Beim Mega8 z.B. kann das auch Timer2 im Asyncron-Modus mit Uhrenquarz 
(siehe Anhang).

Da der Fragesteller seinen AVR-Typ nicht genannt hat (oder ich es 
überlesen habe), kann ich nicht sagen, ob das in seinem Fall geht. Da 
muss dann schon das betreffende Datenblatt befragt werden.

...

von senex24 (Gast)


Lesenswert?

SLEEP in der ISR? Merkwürdig. Braucht man vorher ein SEI (was sonst der 
RETI erledigt), und den Stackpointer muss man auch von Hand 
zurücksetzen.

von Max W. (wauschi)


Angehängte Dateien:

Lesenswert?

Danke für die super Tips!

Natürlich möchte ich ergänzen, dass ich mit dem ATmega8 arbeite und 
Hannes brachte mir den richtigen Hinweis, DANKE.

Die entgültige Version (im Anhang) arbeitet im Power-Save (danke Falk) 
mit 8MHz internen CLK und im Sleep mit 32kHz extern.
Die Daten (AS5030 ist ein Winkelsensor) werden einmal in der Sekunde mit 
8MHz gelesen.

DANKE an alle!

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
Noch kein Account? Hier anmelden.