Hallo, ich versuche den Watchdog bei einem Mega8 zu nutzen. Eigentlich sollte der Reset erst nach ca. 2s kommen. Er kommt aber bereits nach ca. 0.2s Hier mal mein Code zum Start des Watchdog: watchdog_on: ldi mpr, 0b00001111; watchdog einschalten out WDTCR, mpr wdr ret Mir fällt dazu nichts mehr ein. Whats wrong ?
das ganze soll ja mit der betriebsspannung veränderlich sein... da schonmal gesucht? kann man bei den Megas den internen oscilator nich auch justieren? vieleicht die richting...
Hab ich auch schon dran gedacht. Die Spannung stimmt. Ich benutze den internen RC osci. Der läuft recht exakt auf 1 MHz. Laut der Datenblätter hat der Watchdog aber einen eigenen Timer. Wie ich den kalibrieren kann, hab ich bisher leider nicht herausfinden können. Trotzdem vielen Dank
Versuch mal watchdog_on: wdr ldi mpr, 0b00001111; watchdog einschalten out WDTCR, mpr ret
Hi Michael Ich Programmiere den ATmega128 und bei diesem muss das WDTCR zweimal innerhalb von 4 Taktzyklen gesetzt werden, damit der Wert übernommen wird.
Beispiel: WDTCR |= 0x1F; WDTCR |= 0x0F; //scale Faktor => 2s Tabelle siehe Seite 54
Ach was... Das mußt Du nur tun, wenn Du den Watchdog abschalten willst. Einschalten darf man ihn immer, auch beim ATmega128.
@ OliverK : klappt leider nicht @ Wolfgang : Vielen Dank, so gehts, weiss der Teufel warum Gruß Michael
Problemlösung fürn Mega8: (mal ausnahmsweise reinkopiert und nicht als anhang) 'FASTAVR $Device= mega8 ' used device $Stack = 32 ' stack depth $Clock = 3.6864 ' adjust for used crystal $WatchDog=2048 Start WatchDog Do ' place your code in next line Loop Ende BASIC-CODE *************** ++++++++ ASM-FILE-AUSGABE (reinkopiert) ++++++++ ;FastAVR Basic Compiler, ver.4.0.1, by MicroDesign ;Created 21:29:44, 20-02-2005 ; .include "E:\FASTAVR_4\inc\m8def.inc" ; .DSEG .CSEG .ORG 0 _Reset: ldi yl,Low(RAMEND) out SPL,yl ldi yh,high(RAMEND) out SPL+1,yh sbiw yl,32 ldi zl,0x1f out WDTCR,zl ldi zl,0x17 out WDTCR,zl ;****** USERS BASIC CODE ********************** ;-Line--0009----Start WatchDog-- in zl,WDTCR sbr zl,0x18 out WDTCR,zl ;-Line--0010----Do ' place your code in next line-- L0000: ;-Line--0012----Loop-- rjmp L0000 L0001: ;****** End OF USER BASIC CODE **************** ;System Global Variables: 0 bytes ;User Global Variables: 0 bytes Hiermit geht's jedenfalls, vielleicht kann man den ASM-Teil "klauen".. AxelR.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.