Ich hatte bei meinem m644 ähnliche Probs bis ich darauf gekommen war, dass man den Watchdog als erstes deaktivieren sollte. Jedoch hat man dafür nur 4 Takte Zeit, sodass ich das gleich am Anfang des Programmes machen musste, seitdem läuft es super.
Mein Programm fängt also so an:
Die Assembler Routine habe ich direkt aus dem Datenblatt des Atmegas übernommen.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 Config Graphlcd = 240 * 64 , Dataport = Porta , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Mode = 6 ...






Zitieren
Lesezeichen