Forum: Mikrocontroller und Digitale Elektronik Watchdog Problem


von Michael (Gast)


Lesenswert?

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 ?

von Henning (Gast)


Lesenswert?

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...

von Michael (Gast)


Lesenswert?

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

von OliverK (Gast)


Lesenswert?

Versuch mal

watchdog_on:
    wdr
    ldi mpr, 0b00001111; watchdog einschalten
    out WDTCR, mpr
    ret

von Wolfgang (Gast)


Lesenswert?

Hi Michael

Ich Programmiere den ATmega128 und bei diesem muss das WDTCR zweimal
innerhalb von 4 Taktzyklen gesetzt werden, damit der Wert übernommen
wird.

von Wolfgang (Gast)


Lesenswert?

Beispiel:
  WDTCR |= 0x1F;
  WDTCR |= 0x0F;  //scale Faktor => 2s Tabelle siehe Seite 54

von Joerg Wunsch (Gast)


Lesenswert?

Ach was...  Das mußt Du nur tun, wenn Du den Watchdog abschalten
willst.  Einschalten darf man ihn immer, auch beim ATmega128.

von Michael (Gast)


Lesenswert?

@ OliverK : klappt leider nicht

@ Wolfgang : Vielen Dank, so gehts, weiss der Teufel warum

Gruß Michael

von Bernhard (Gast)


Lesenswert?

habe gerade das gleiche Problem mit dem ATmeg8

von AxelR. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.