Aufwecken nach Sleep (AVR ATmega48)

OP #2710624
Guten Tag :)

(Neuling-Alert)

Ich möchte, dass mein ATmega48 in den power-down geht wenn ein Button an 
PD2 gedrückt wird und dass er auch vom selben Button (Int0) wieder 
aufgeweckt wird.

Die Idee ist nun, bei allgemein disableten Interrupts PD2 zu erkennen 
und dort folgendes zu tun:
- (Bits fürs enablen von Int0 setzen)
- sei
- (Bits für Power-Down setzen)
- sleep

Beim erneuten Drücken des Tasters wird der Interrupt dann ja den 
Controller aufwecken, richtig? Was passiert jetzt aber als nächstes? Ich 
möchte ja nicht wirklich etwas sinnvolles machen ausser das 
Hauptprogramm neu zu starten, also kann ich doch einfach in den 
Interrupt-Vektor ein
- reti
reinschreiben, ja?

Was macht der Mega aber dann als nächstes, wird er "von selber" wieder 
in den Reset-Vektor reingehen? Muss ich da dann ausser einem frühen
- cli
noch was anderes beachten?

Ich möchte es nicht unbedingt riskieren, den Mega nicht mehr aufwecken 
zu können, deshalb ganz grundsätzlich die Frage: Funktioniert das 
überhaupt oder gibt es da einen sinnvolleren Ansatz?

Besten Dank im voraus für Kommentare und Hinweise.

Donar
Hast du dir denn die Artikel zum Sleep Mode durchgelesen? Da du von 
"reti" sprichst, nehme ich mal implizit an, dass du in Assembler 
programmierst. Demnach wäre dieser Artikel 
(https://www.mikrocontroller.net/articles/AVR-Tutorial:_Power_Management) 
sicherlich interessant für dich. Ganz allgemein zum Sleep Mode gibt es 
folgendes (https://www.mikrocontroller.net/articles/Sleep_Mode).

Kurz zusammengefasst: Der Controller macht nachdem er wieder aufgewacht 
ist genau da weiter, wo er aufgehört hat. Je nachdem wodurch der 
Controller aufgeweckt wird, wird i.d.R. noch eine ISR ausgeführt.

Übrigens ist es je nachdem was dein Controller noch so tut nicht 
unbedingt vorteilhaft Interrupts global zu (de-)aktivieren. Im 
Normalfall wird man bloß den entsprechenden Interrupt (de-)aktivieren. 
Typischerweise deaktiviert man z.B. in der "Aufweck"-ISR nur den 
Interrupt, um ihn dann kurz vor dem Schlafen gehen wieder zu aktivieren.
Gast
Anlaufstelle nummer eins ist das Datenblatt vom Hersteller, nicht von 
einem Trittbrettfahrer. Dort ist dem Sleep ein ganzes Kapitel gewidmet. 
Was ist daran unklar?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.