ATMega8 Watchdog Timer in C

OP #5154694
Lesenswert?
• ▲
▼
Hi Leute

Ich habe ein Problem mit dem ATmega8 (Modell nicht verhandelbar) und der 
Verwendung des Watchdog-Timers zum Stromsparen unter Atmel Studio C.
Der Prozessor wird also, nach dem er losgelaufen ist und kleine Dinge 
getan hat, am Ende von main mit


  WDTCR = (1<<WDE)|5; // watchdog reset every 0.5 sec
  power_all_disable();
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_mode();

in die Ruhezustand geschickt um nach Ablauf der Watchdog-Zeit (von ca. 
0.5 Sekunden) erneut aufzuwachen.
So wie ich die Beschreibung lese, kann der Watchdog bei ATmega8 nur 
einen RESET auslösen.

So wie ich das Programm ausprobiert habe, wird dann main erneut 
aufgerufen und es sind wieder alle globalen nicht-initialisierten 
Variablen auf 0 gesetzt, da der C-Startup-Code das BSS Segment wohl 
löscht, inklusive des WDE Bit im WDTCR Register.

Ausser über das EEPROM gibt es scheinbar keine Möglichkeit, Werte von 
einem sleep zum nächstn sleep rüberzuretten (und das EEPROM sollte man 
nun nicht so oft umprogrammieren).

Oder kennt jemand einen Weg, den ich übersehen habe ?

Ich habe jetzt nicht vor, auf Assembler umzusteigen, aber vielleicht 
gibt es ja startuop-Code Optionen.
Lesenswert?
• ▲
▼
Michael B. schrieb:
> So wie ich die Beschreibung lese, kann der Watchdog bei ATmega8 nur
> einen RESET auslösen.

Richtig gelesen, erst der ATmega88 kann auch einen Interrupt auslösen.

Man kann aber Variablen, die bei einem Watchdogreset nicht initialisiert 
werden sollen, in die .noinit Section legen.
Dann nach dem Reset das WDRF-Bit prüfen und sie händisch initialisieren, 
wenn nicht gesetzt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 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.