Watchdog dauer Reset

Gast #284996
Lesenswert?

Nachdem ich nun meine Anwendung auf dem AVR fertig entwickelt habe und
alles prima läuft, wollte ich zusätzlich aus Sichertsgründen den
Watchdog aktivieren, aber sieh da wenn er aktiv ist macht er alle 2
Sekunden ein Reset. Was ist da los ? Oder hab ich den falsch
initialisiert? Ist der Watchdog nicht aktiv gibts auch keinen Reset und
die Software läuft aber trotzdem.

Hier mal ein Code Schnipsel:

// Set Wadog prescaler to 2.2sec.
WDTCR |= (1<<WDP2) | (1<<WDP1) | (1<<WDP0);

// Enable Wadog
WDTCR |= (1<<WDE) | (1<<WDTOE);
Gast #284997
Lesenswert?

Hi,

du musst den Watchdog spätestens alle 2,2sec resetieren.
Das ist der Sinn und zweck vom Watchdog. Wird dieser nämlich nicht
resetiert, ist das ein Zeichen für den AVR dass das Programm irgendwo
hängen geblieben ist, und es wird der AVR in den sicheren
Anfangszustand (nach Reset) gebracht

lg,

Michael
Gast #284999
Lesenswert?

Hi,

jein.

In Assembler gibts den Befehl WDR, welcher dir den WD resettiert.

Du musst schauen, dass in deinem Programmablauf der WD sicher vor
Ablauf von den 2,2 sec resettiert wird. Wennst du einen Timer sowieso
im Programm verwendest, kannst du hier den WDR-Befehl sinnvollerweise
einfügen.

Lg,

Michael
#285001
Lesenswert?

Watchdog reset sollte in die Hauptschleife, nicht in einen Interrupt.
Wenn die Hauptschleife hängt, wird der Interrupt trotzdem ausgeführt
und der Watchdog springt nicht an.

Du brauchst den Watchdog nicht selbst bitweise setzen, dazu gibt es:

wdt_enable() und wdt_reset(), siehe avr-libc Doku.

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