mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik WDTON und SleepMode - beißt sich das?


Autor: M.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe an meinem ATmega88 den Hardware Watchdog eingeschaltet (Fuse 
WDTON)
Im Programm habe ich die Zeit auf 500ms gestellt und resette den 
Watchdog regelmäßig - alles kein Problem.

Irgendwann schicke ich meinen µC in Schlafmodus:
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    wdt_reset();
    sleep_mode();
Jedoch scheint mein Prozessor vom Watchdog wieder aufzuwachen. Ist das 
möglich?
Wenn ja, das soll nicht so sein! Er soll aufwachen wann ich das will und 
zwar nach dem Einschaltvorgang.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
M.B. wrote:

> Wenn ja, das soll nicht so sein! Er soll aufwachen wann ich das will und
> zwar nach dem Einschaltvorgang.

Dann musst du vor dem ,,Gute Nacht!''-Sagen noch den Wachhund
einschläfern.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, der Watchdog hat die hoehere Prioritaet, es koennte ja sein, dass du 
vor dem sleepmode die Interrupts nicht richtig gesetzt hast, und dein uC 
dann im sleep gefangen waere.

Du musst also vor dem sleep den watchdog ausschalten.

Autor: M.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, den Watchdog ausschalten.
Aber geht das überhaupt?

In einem anderen Thread wurde mir gesagt:
>
>Fuse WDTON gesetzt --> Watchdog von Anbeginn des Programms
>eingeschaltet;
>                       nicht per Software abschaltbar ("fail safe mode")
>
>Fuse WDTON nicht gesetzt --> Watchdog per Software ein- und ausschaltbar
>                             (einschalten einfach, ausschalten nur mit
>                             spezieller Befehlssequenz)
>
>Siehe Datenblatt.

Noch mal für mich:
Wenn der Watchdog an ist (nicht abgeschaltet) und der Prozessor dann in 
Power Down geht (Resets kommen ja dann nicht mehr), wacht der Prozessor 
durch den Watchdog wieder auf?

Jan M. wrote:
>Ja, der Watchdog hat die hoehere Prioritaet, es koennte ja sein, dass du
>vor dem sleepmode die Interrupts nicht richtig gesetzt hast, und dein uC
>dann im sleep gefangen waere.
>
>Du musst also vor dem sleep den watchdog ausschalten.

Mein Prozessor soll im Sleep gefangen bleiben!
Erst nach anlegen der Versorgungsspannung soll er wieder "rennen"

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt in dem Fall die WDTON-Fuse deaktivieren, sonst bleibt der 
Watchdog an und läßt sich zur Laufzeit nicht deaktivieren.

Autor: M.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super - Programm rennt!

Das wars, danke euch allen.
Man, ist der Watchdog kompliziert - zumindest komplizierter als ich 
dachte.

Ich fasse noch mal zusammen (bitte verbessert mich wenn etwas nicht 
stimmt)

* Es gibt einen HW und SW - Watchdog
- HW - die Fuse
- SW - wdt_enable(X)
* Den HW Watchdog kann man nicht deaktivieren außer über die Fuse
* Den SW Watchdog kann man ein- und ausschalten
* Wenn der Prozessor im Sleep-Modus ist überwacht ein eingeschalteter 
Watchdog weiter - und wenn kein Reset kommt, wacht der µC wieder aus dem 
Schlafmodus auf, wenn der Timer abgelaufen ist!
(Heißt: Man kann den Watchdog "missbrauchen", um den Schlafmodus zu 
beenden)
* Wenn man den Sleep-Modus haben möchte, und die Aufweckfunktion durch 
andere Bedingungen erfüllt werden soll (Taster über Interrupt) muss man 
den Watchdog vorher ausschalten.

Ist das korrekt?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
M.B. wrote:

> * Es gibt einen HW und SW - Watchdog
> - HW - die Fuse
> - SW - wdt_enable(X)

Nein, es gibt nur einen Watchdog, aber zwei Möglichkeiten, ihn zu
aktivieren.  Davon kann man eine der beiden (Aktivierung via Fuse)
nicht per Software ausschalten.  Das hat reine security-Aspekte:
es gibt selbst nichtmal mehr die minimale theoretische Chance,
dass eine ,,wild gewordene'' Software ,,aus Versehen'' den Watchdog
abklemmen kann, wenn er per Fuse aktiviert worden ist (da die
Software nicht in der Lage ist, die Fuse umzuprogrammieren).

> (Heißt: Man kann den Watchdog "missbrauchen", um den Schlafmodus zu
> beenden)

Ja, und das ist bei einigen kleinen AVRs die einzige Möglichkeit, aus
einem Tiefschlaf doch hin und wieder geweckt zu werden ohne äußeren
Interrupt (weil sie keinen separaten 32-kHz-Oszillator haben und damit
keinen powersave-Schlaf kennen).

Autor: M.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Information.

Ich hoffe, dass ich für die Zukunft die Watchdog-Funktion korrekt 
verstanden habe. Ich denke ja - aber wir werden sehen.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denk noch an den Standardfehler: nach einem Watchdog-Reset kann
man den Watchdog nur wieder abschalten, wenn man auch das WDRF-Bit
(das den durch den Watchdog eingeleiteten Reset anzeigt) zuvor
löscht.  Standardmäßig akkumulieren all die *RF-Bits im entsprechenden
Register, d. h. sie würden erst bei einem power cycle sonst wieder
zurück gesetzt.

Die Doku zu <avr/wdt.h> enthält Beispielcode, wie man damit umgehen
kann.

Autor: M.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schön für diesen Zusatzhinweis!

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.