ATMega8 Watchdog Timer in C

#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.
#5154708
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.
#5154779
Lesenswert?

Michael B. schrieb:
> da der C-Startup-Code das BSS Segment wohl
> löscht, inklusive des WDE Bit im WDTCR Register.

Den C-Startup Code kann man ändern, wenn man etwas AVR Assembler 
schreiben kann. So könnte man bestimmte Bereiche nicht initalisieren.

Allerdings könnten tiefe Stromsparmodi dem RAM die Stromversorgung 
komplett klauen -> Handbuch lesen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren