www.mikrocontroller.net

Forum: Compiler & IDEs Watchdog dauer Reset


Autor: Marcel (Gast)
Datum:

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

Autor: Michael (Gast)
Datum:

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

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah ok Danke. Dann war das ein Verständnisproblem von mir.

Also sollte ich bei einem Software startup den Wado aktivieren und in
einem Timerinterrupt deaktivieren und wieder aktivieren ?

Autor: Michael (Gast)
Datum:

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

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
besten Dank. Funktioniert prima.

Autor: Fritz Ganter (fritzg)
Datum:

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

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.