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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren