ATmega168 hängt sich nach Watchdog Reset auf

#1782723
Lesenswert?

Hallo !

Habe folgendes Problem: Der Microcontroller soll einen Watchdogreset 
auslösen, sobald Port C Pin 6 auf low liegt. Das klappt soweit auch, 
doch leider nur das eine mal. Nach dem Reset kommt es mir vor, als ob 
der uC irgendwie im Wald steht. An Pin 1 von Port B erkenne ich, ob der 
Reset stattgefunden hat oder nicht. Alles variablen, die ich benutze 
werden initialisiert. Fuses habe ich angehängt.
Habe leider keine Idee mehr, jemand von euch ?
Achso: Springen zu Adresse 0x0000 klappt ebenso wenig und führt auch zum 
Absturz!

Funktionen:

void initWatchdog()
  {
    cli();
    wdt_reset();
    WDTCSR |= (1<<WDCE) | (1<<WDE);
    WDTCSR  = (1<<WDE) | (1<<WDP1);
    sei();
  }

void disableWatchdog()
  {
  cli();
  wdt_reset();
  MCUSR &= ~(1<<WDRF);
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  WDTCSR = 0x00;
  }
------------------------------------------------------------------------ 
---
Endlosschleife:

...
disableWatchdog();
sbi(PORTB, 1);
while(1)
{
if(bit_is_clear(PINC, 6) !=0)
  {
    cbi(PORTB, 1);
    initWatchdog();
    while(bit_is_clear(PINC, 6) !=0)
       {
       wdt_reset();
       }
    while(1);
  }
}
Angehängte Dateien:
Gast #1783530
Lesenswert?

Ok...werde ich morgen mal nachschauen, kann ich mir aber kaum 
vorstellen, da ich ihn ja als allererstes im Programm deaktiviere. Aber 
ein Ansatzpunkt ist es natürlich. Es würde allerdings nicht erklären, 
warum Sprung zu 0x0000 auch nicht funktioniert !

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