Forum: Mikrocontroller und Digitale Elektronik Watchdog programmieren


von Ingo L. (grobian)


Lesenswert?

Wie gehe ich richtig mit dem Watchdog im MEGA32 um ?

Ich muss die Headerdatei wdt.h (#include <avr/wdt.h>) in das Programm 
einbinden.
Mit wdt_enable (wert 0-7) stelle ich die Time Out bis zum Reset ein.
Die Funktion wdt_reset() kommt regelmäßig im Programm vor und erzeugt 
einen Watchdog-Reset vor Ablauf der Time Out Zeit (bei mir jetzt bei 
eine Abfrage von Portzuständen).

Was ist aber nachdem der WD einen Reset ausgelöst hat. Soweit ich 
gelesen habe werden die Prescaler Bits mit dem Reset gelöscht d.h. ich 
muss sie mit wdt_enable (wert 0-7) neu setzten. Passiert das denn 
ohnehin nicht nach dem Reset weil ja die Funk aufgerufen wird?
Bleibt der WD auch nach dem Flashen weiter aktiv, wenn ja wie kann ich 
ihn wieder deaktivieren. Gibt es da irgendwelche Fuses ?

von Klaus W. (mfgkw)


Lesenswert?

Ingo Laabs schrieb:
> Mit wdt_enable (wert 0-7) stelle ich die Time Out bis zum Reset ein.
> Die Funktion wdt_reset() kommt regelmäßig im Programm vor und erzeugt
> einen Watchdog-Reset vor Ablauf der Time Out Zeit (bei mir jetzt bei
> eine Abfrage von Portzuständen).
>
> Was ist aber nachdem der WD einen Reset ausgelöst hat. Soweit ich
> gelesen habe werden die Prescaler Bits mit dem Reset gelöscht...

Nach dem Reset kommst du doch wieder von oben in dein main() und machst 
erneut die Initialisierung, oder nicht?

von Ingo L. (grobian)


Lesenswert?

ja klar, mit wdt_enable (wert 0-7)zu Beginn der Main

von Klaus W. (mfgkw)


Lesenswert?

Ingo Laabs schrieb:
> Bleibt der WD auch nach dem Flashen weiter aktiv, wenn ja wie kann ich
> ihn wieder deaktivieren. Gibt es da irgendwelche Fuses ?

Lt. http://www.mikrocontroller.net/articles/AVR-Tutorial:_Watchdog 
bleibt er aktiv.
Daraus:
1
Der WDT läßt sich auch softwaremäßig durch Setzen des WDE-Bits im WDTCR Register aktivieren.
2
3
WDT_on:
4
 
5
  in Temp1, WDTCR      ; Write logical one to WDE
6
  ori Temp1, (1<<WDE)
7
  out WDTCR, Temp1
8
  ret
9
10
Dieses hat den Vorteil, dass man den WDT auch softwaremäßig wieder deaktivieren kann.
11
12
Ein Deaktivieren des WDTs ist nicht möglich, wenn die WDTON - Fuse gesetzt ist!

In C gibt es ein wdt_disable() dafür; siehe 
http://www.nongnu.org/avr-libc/user-manual/group__avr__watchdog.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.