mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik power down mode


Autor: Wolfgang Gigerl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo
wenn ich den ATmega8 von der ISR des output compare interrupt1A in den
Power down modus schalte, funktioniert das reaktivieren des controllers
nicht!!
kann mir jemand erklären warum das so ist?

SIGNAL(SIG_OUTPUT_COMPARE1A)
{

   sleep_mode();

}

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durch welches Signal willst Du wieder aufwecken?

Ich tippe mal, dass Dein Problem damit zu tun hat, dass Du im IR den
Sleep-Befehl gibst.

Stefan

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut Datenblatt hast du nicht mehr viel mit dem du ihn aufwecken kannst.
Entweder durch Level 0 auf INT0 oder durch Timer 2 wenn er durch
einen externen Quarz getaktet ist. ASSR muss auch gesetzt sein.

Also, Datenblatt genau lesen!

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht ganz: INT0 und auch INT1.
Und alle Arten von Reset.
Letzteres kann dann interessant sein, wenn der Watchdog-Timer zum
zyklischen Aufwachen benutzt werden soll.

Stefan

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm, aber der Sleep Mode wurde INNERHALB einer ISR aufgerufen, und die
Interrupts sind doch da gesperrt. Eigentlich dürfte der AVR niemals
mehr aufwachen, auch nicht durch INT0/INT1 ??

Das sollte man mal testen, es sei denn ich liege absolut falsch und
jemand kann das Gegenteil bestätigen.

Der ASR-Timer2 kann nicht den Power Down verlassen, dazu darf der AVR
nur den Power Save Mode nutzen.

Gruß Hagen

Autor: Wolfgang Gigerl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt genau, der AVR wacht nie mehr auf, aber warum genau?
Ist es unmöglich, den AVR über eine ISR in den Sleep Modus zu setzen?

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal: über welches Signal willst Du aufwecken?

Stefan

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist doch erstmal egal.

Der AVR befindet sich in einer Interrupt Service Routine und diese
setzt den AVR in den Sleep Mode -> Power Down, OHNE vorher die IRQ's
zu enablen.

Kann dann der AVR über einen externen Interrupt wie INT0 aus dem Power
Down Mode aufgeweckt werden ??

Gruß Hagen

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unter Power-Management and sleep-modes steht:

"if an enabled IR occurs while the mcu is in a sleep mode, the mcu
wakes up."

Das interpretiere ich so, dass
1. die Interrupt-Logik zum Aufwecken benutzt wird
2. die IR global freigegeben sein müssen (SEI),
3. der zum Aufwecken benutzte IR freigegeben sein muss.

Wenn man sleep im IR ausführen will, müssen also mindestens die IRs
wieder enabled werden. Allerdings würde ich sleep im IR vermeiden, weil
ich mir vorstellen kann, dass es dabei noch andere unangenehme
Überraschungen geben kann. Beispiel: das Hauptprogramm schreibt gerade
was ins EEPROM, der AD-Wandler wird ausgelesen, etc.

Stefan

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht nur das, in der ISR werden ja auch der Stack, einige Register und
Flags benutzt und gepusht. Da man im allgemeinen die Interrupt Logik
beim AVR nur 1 Level tief benutzt, könnte es nun zu Problemen kommen.
Man müsste dann nämlich ein Multi-Level IRQ System aufbauen, d.h.
Interrupts innerhalb Interrupt-Routinen müssten möglich sein.
Nach obigem Code würde also der Sleep bei einem Wakeup mit der ISR
fortfahren, nachdem die INT0/INT1 ISR ausgeführt wurde.

Ich würde den Sleep Mode nur innerhalb der Main-Loop setzen, abhängig
vom globalen Status des Systemes. Es gibt bei dieser Logik im gesammten
Program nur eine einzigste Stelle in der Mainloop in der SLEEP
aufgerufen wird. Vor dieser Stelle wird der entsprechende Sleep Mode
ausgewählt.

Gruß Hagen

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.