Atmega8 Watchdog disable

OP #1381168
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
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
atmega8 hat afaik keinen watchdog interrupt.

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

ich denke du hast deinen stack nicht/fehlerhaft initialisiert. sind alle 
interruptvektoren richtig drin?
Gast
Florian Sc schrieb:
> Ich muss in die Programmschleife cli(); einfügen, sonst läuft es nicht -

Häää? Wie bitte?

Lass mal die Hose runter und poste deinen Code als Anhang...

> daher denke ich der Watchdog ist es..

Guuuute Kombinationsgabe....   ;)
Gast
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
Dein Programm wackelt, wenn überhaupt, nur zwei mal an dem Portpin und 
verharrt dann in einer Endlosschleife.

Wo meintest Du, müsstest Du ein cli() einfügen, dass die Klospülung 
funktioniert?
Gast
Ui... allen Ernstes übersehen. Doch schon so spät?

Trotzdem werde ich das Gefühl nicht los, dass Dein Problemcode auf 
deinem Rechner ein wenig umfangreicher ist.
Gast
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
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?
Gast
Ich schließe mich mal dem Herrn Müller an.
Ohne das cli ist die Schleife wirklich sinnlos und wird mit 99,9%iger 
Sicherheit wegoptimiert. Und wozu bitte ist das k darin gut?
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.