Watchdog resettet zu früh

Gast #457453
Lesenswert?
• ▲
▼
Hallo zusammen,
in meinem ATmega8-Controller möchte ich einen Watchdog einsetzen, der 
nach ein paar Sekunden Sleep den AVR aufweckt und resettet. Mein Problem 
ist, dass er das zwar tut, aber zu früh und ungeachtet der eingestellten 
Zeit. Ich habe dazu schon einen früheren Thread hier im Forum gefunden, 
der das Problem aber nicht löst.
Hier mal mein Code:

------- am Anfang -----

ldi temp, 0b00011111
out WDTCR, temp

ldi temp, 0b00010111
out WDTCR, temp

------- am Ende -------

ldi temp, 0b10100000
out MCUCR, temp

wdr

ldi temp, 0b00001111
out WDTCR, temp

sleep

-----------------------

Weiß einer Rat? Danke!

Matthias
Gast #457643
Lesenswert?
• ▲
▼
Beim ATmega8 musst Du vor dem Ändern der WD-Zeit das Ändern enablen, so 
wie vor dem Ausschalten des WD, also vorher WDCE und WDE auf 1 setzen.

; reset WDT
WDR
; Write logical one to WDCE and WDE
in r16, WDTCR
ori r16, (1<<WDCE)|(1<<WDE)
out WDTCR, r16
; Turn off WDT => stattdessen hier Zeit ändern
ldi r16, (0<<WDE)
out WDTCR, r16

Steht nicht im Datenblatt und ist auch bei anderen AVRs nicht nötig. Ich 
hab da auch schon mal dran rumgesucht...

Sven
Gast #457651
Lesenswert?
• ▲
▼
Jo, stimmt, bei mir auf Seite 43.

>> WDCE - This bit must be set when the WDE bit is written to logic zero. 
Otherwise, the Watchdog will not be disabled. Once written to one, hardware will 
clear this bit after four clock cycles. Refer to the description of the WDE bit 
for a Watchdog disable procedure. *** In Safety Level 1 and 2, this bit must also 
be set when changing the prescaler bits. ***

War damals ein älteres Datenblatt...

Sven
Gast #457773
Lesenswert?
• ▲
▼
Nein, denn:

>> In Safety Level 1 and 2, this bit must also be set when changing the prescaler 
bits.

Und Safety Level 1 ist der ganz normale, wenn das Fuse Bit nicht 
programmiert ist. Keine Ahnung warum, aber es gibt keinen Unterschied.

Warum probierst Du's nicht einfach aus?

Sven

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.