mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Aufwachen vom Sleep


Autor: Max Wau (wauschi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Frank (Gast)
Datum:

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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

...

Autor: senex24 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Max Wau (wauschi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.