Wie hast du den WatchDog eingebaut? Beim 644 musste ich am Anfang des Programmes innerhalb 4 Taktzyklen den Watchdog deaktiveren, sonst hat er gleich wieder angeschlagen.
So fängt mein Programm an:
Code:
$asm
Wdt_off:
; Turn off global interrupt
cli
; Reset Watchdog Timer
wdr
; Clear WDRF in MCUSR
in r16, MCUSR
andi r16, wdrf;(0xff & (WDRF))
Out Mcusr , R16
; Write logical one to WDCE and WDE
; Keep old prescaler setting to prevent unintentional time-out
in r16, WDTCSR
ori r16,wdce; (1<<WDCE) | (1<<WDE)
Out Wdtcsr , R16
; Turn off WDT
ldi r16,wde; (0<<WDE)
Out Wdtcsr , R16
$end Asm
$regfile = "m644def.dat"
$crystal = 16000000
$loadersize = 2048
Stop Watchdog
Config Watchdog = 2048
wobei das letzte Stop Watchdog noch ein Überbleibsel aus ersten Versuchen ist. Kurz vor der Hauptschleife starte ich den Watchdog wieder und in der Hauptschleife wird er regelmäßig zurückgesetzt.
Den Code habe ich aus dem Datenblatt des m644.
Lesezeichen