Atmega8 Watchdog disable

#1381168
Lesenswert?

Habe schon gesucht, aber nichts gefunden..

Kann mir jmd kurz schreiben, wie ich beim Atmega8 mit internem Oszi die 
Fuses setzen muss und welche C Macros den Watchdog deaktivieren?

WDTCR = 0x1F;
WDTCR = 0x07;
und
wdt_disable();
gehen nicht.

Fuses:
hfuse: 0xD9
lfuse: 0x24

Danke schonmal!
Gast #1381181
Lesenswert?

Florian Sc schrieb:
> Habe schon gesucht, aber nichts gefunden..

Quatsch mit Soße... Liest Du kein Datenblatt?

> Kann mir jmd kurz schreiben, wie ich beim Atmega8 mit internem Oszi die
> Fuses setzen muss und welche C Macros den Watchdog deaktivieren?

Warum deaktivieren? Hast du den Watchdog denn vorher in Deinem Programm 
aktiviert?

Wie kommst du zu der Erkenntnis, dass der Watchdog läuft? Regelmäßiger 
Neustart des Programms? Dies könnte auch durch einen auftretenden 
Interrupt ausgelöst werden, für den Du keinen Interrupthandler 
geschrieben hast.
Gast #1381208
Lesenswert?

retreti schrieb:
> atmega8 hat afaik keinen watchdog interrupt.

Den hat KEIN AVR. Der Watchdog, sofern er denn überhaupt einmal 
gestartet wurde, löst im Falle des nicht rechtzeitigen Zurücksetzens 
einen Reset aus.

> der watchdog wird immer aufgerufen egal ob mit oder ohne cli und sei

Der Watchdog wird nicht aufgerufen. Er wird gestartet, gestoppt oder 
zurückgesetzt. Dass das Ganze dann unabhängig von cli und sei läuft 
stimmt allerdings.
Gast #1381249
Lesenswert?

Wie dem auch sei. cli() hat in keinster Weise Einfluss auf einen 
laufenden Watchdog. Und selbst wenn es etwas mit dem Watchdog zu tun 
hätte, müsste Deine LED trotzdem blinken (wenn auch anders), da der 
Watchdog den Controller regelmäßig neu starten würde.

Bin kurz davor, mein STK500 rauszukramen und den Schlonz durch nen Mega8 
zu drücken....
Gast #1381264
Lesenswert?

1
void delay_ms(unsigned int ms)
2
 /* delay for a minimum of <ms> */
3
 /* with a 1Mhz clock, the resolution is 1 ms */
4
 {
5
     unsigned int i=0;
6
     unsigned int  j,ii;
7
     int k;
8
        for ( i=0;i<300;i++)
9
        {
10
                for(j=0;j < ms;j++)
11
                {
12
                  k = -j;
13
                  cli(); // muss rein, sonst geht es nicht
14
                }
15
        }
16
 }

Ohne dein "cli();) wird die Warteschleife komplett wegoptimiert. Woher 
hast du dieses merkwürdige Gebilde?
#1381354
Lesenswert?

Magnus Müller schrieb:
> retreti schrieb:
> atmega8 hat afaik keinen watchdog interrupt.
Richtig.

> Den hat KEIN AVR. Der Watchdog, sofern er denn überhaupt einmal
> gestartet wurde, löst im Falle des nicht rechtzeitigen Zurücksetzens
> einen Reset aus.
Da muß ich Dich enttäuschen, das ist falsch. Die neueren Avr's , wei 
z.B. Atmega88 oder 644 gehen erst in den WDT-Interrupt, sofern sei() 
gesetzt (äußerst schön um erst ein paar Sachen zu sichern) und gehen 
dann erst in den Reset.


>@ Florian Sc:
>Hat noch jemand anders ne Idee? Macht auf jeden Fall nen Unterschied mit
>oder ohne cli();
Naja ich vermute auch mal das die schleife wegoptimiert wird, da ja in 
ihr nix passiert, wenn cli() fehlt. Schon mal ohne Optimierung 
compiliert ? Dann optimiert der compiler auch nix raus.Zeig doch mal 
deine .LSS Datei. Da kann man im Assembler Code genau sehen ob die 
Schleife fehlt oder nit!

Besser benutze einfach util\delay.h, da kannste nix falsch machen. Oder 
noch besser Timer.


Gruß

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