Forum: Mikrocontroller und Digitale Elektronik Watchdog resettet zu früh


von matthias (Gast)


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

von Sven (Gast)


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

von Stefan W. (wswbln)


Lesenswert?

...steht nicht im Datenblatt??

Also in dem auf meinem Rechner steht's ab Seite 41...

von Sven (Gast)


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

von matthias (Gast)


Lesenswert?

Das mit dem Ändern der Zeit gilt nur, wenn dieses Watchdog Fuse Bit 
programmiert ist, müsste so auf Seite 43 stehen.

von Sven (Gast)


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

von matthias (Gast)


Lesenswert?

Hm, ok, das wars. Danke für den Tipp, hab den Satz wohl überlesen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.