www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Watchdog benutzen


Autor: Bob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: dotstyler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Olaf_K (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: SuperUser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Anton Wert (antonwert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und noch ein Fehler:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@SuperUser

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

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

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.