Forum: Mikrocontroller und Digitale Elektronik Watchdog benutzen


von Bob (Gast)


Lesenswert?

Hallo Leute,
ich benutze in meiner Anwendung einen ATMega8515 und programmiere mit
CodeVision. Nun will ich mich mit dem Watchdog (erstmals) beschäftigen
bzw. diesen in meine Zielapplikation einbinden. Hierzu habe ich noch
eine grundsätzliche Frage.
Im Datenblatt habe ich nachgelesen wie man ihn aktiviert und
deaktiviert.
Nun steht auf Seite 49:
"If the reset period expires without another
Watchdog Reset, the ATmega8515 resets and executes from the Reset
Vector."
Und auf der nächsten Seite ist auch eine Abbildung mit einem Pfeil
"Watchdog reset"
Meine Frage ist nun wie ich den WD beutze? Muss ich ein (Zähl)Register
zurücksetzen, so dass der WD keinen Reset auslöst oder muss ich den WD
jedes mal deaktivieren und danach wieder aktivieren, so dass er von
vorne anfängt zu rennen.
Die zwei Indizien von Seite 49 und 50 (s.o.) lassen mich auf ersteres
schließen, jedoch finde ich kein Zählregister für den WD.
Oder ich liege mit meinen Vermutungen total daneben.
Gruß Bob

von dotstyler (Gast)


Lesenswert?

Mahlzeit Bob,
Ich vermute mal, dass der Main Takt oder auch Interner Oszillator über
einen Prescaler(Vorteiler) zum Watchdog zugeführt wird.
Über den WDTCR- Register lässt sich die Zeit einstellen.
Hab mal mit Bit 3(Seite 49)den Watchdog aktiviert. Der µController
wurde immer wieder Resetet. Ich schätz mal dass man den Watchdog vom
Programm aus in bestimmten Zeitabständen zurücksetzen muss, sonst denkt
er(Watchdog) Herrchen AVR sei eingeschlafen und zieht an der Leine.
Jedoch würde ich mich freuen, dass uns jemand Aufklärt der in diesen
Bereich Ahnung hat.

von Olaf_K (Gast)


Lesenswert?

Der Watchdog muß innerhalb der Time-Out-Zeit zurückgesetzt werden, in
ASM macht das einfach die WDR-Anweisung (WatchDogReset).

Dieses WDR bzw. deren C-Entsprechung fügt man z.B. in einer Timer-ISR
ein oder irgendwo dort, wo der Prozessor normalerweise immer
vorbeikommen sollte, z.B. in der Main-Loop.
Also wenn man z.B. einen 10ms-Timer-IRQ für Tastaturpolling o.ä. nutzt,
dann fügt man ein WDR dort ein sucht man sich eine
Watchdog-Timeout-Zeit, die deutlich größer als 10ms ist, und wenn
dieser IRQ ausbleiben sollte, z.B. weil der Prozessor abgestürzt ist,
dann wird automatisch der Watchdog-Reset ausgelöst, und das Programm
beginnt von vorn.

Nach dem Reset kann man übrigens die Reset-Ursache in einem
Statusregister (beim Mega8 heißt es MCUCSR) anhand von Flags ablesen
und bei Bedarf im Programm unterschiedlich darauf reagieren, z.B. mit
einer Fehlermeldung. Beim Mega8 gibt es Flags für: Power-On, Brown-Out,
External Reset, Watchdog Reset.

Bei manchen AVRs (z.B. tiny2313) kann man den Watchdog-Timer auch im
Interrupt-Modus betreiben, d.h. ein Overflow löst dann keinen Reset
aus, sondern springt einen eigenen Int-Vektor an, wie bei einem
normalen Timer-Overflow.

MfG Olaf

von SuperUser (Gast)


Lesenswert?

und da ist er wieder - der typische Watchdog-Fehler

->Dieses WDR bzw. deren C-Entsprechung fügt man z.B. in einer Timer-ISR
ein ...

Natürlich ist es sehr bequem einen Timer zu benutzen, allerdings wird
dadurch der Watchdog wertlos. Denn der Timer läuft auch noch, wenn sich
ein ander Thread des Systems lange aufgehängt hat und dadurch das System
steht.

-> Der Watchdog-Reset gehört in die idle task, d.h. wird zurückgesetzt,
wenn das System (kurzzeitig) frei ist. Wichtig ist, dass die Watchdog
Reset Zeit länger ist als die längste 100% Aktivität im System. Das
passiert aber nur in Ausnahmefällen, erst dann muss man tricksen...

von Anton W. (antonwert)


Lesenswert?

Und noch ein Fehler:

Der Watchdog hat seinen eigenen RC Oszillator, und wird nicht vom
Systemtakt erzeugt!

von Peter (Gast)


Lesenswert?

@SuperUser

->Das passiert aber nur in Ausnahmefällen, erst dann muss man
tricksen...

Dann erzähl mal wie das tricksen aussieht ;-)

von Sven (Gast)


Lesenswert?

Dann mußt Du eben zusätzliche WDR einbauen. Also zum Beispiel:

1. Ein zyklisches WDR in der MainLoop.
2. Wird eine zeitaufwändige Aktivität ausgelöst, zum Beispiel Auslesen
eine Messwertspeichers über RS232 in einem Durchgang, dann würde der
Watchdog das Auslesen irgendwann unterbrechen. Also kommt in die
Ausleseschleife auch ein WDR, um zu sagen "Ich bin noch da, nur gerade
anderweitig beschäftigt."

Sven

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.