Assembler Atmega 644P Watchdog

outfinder

Neues Mitglied
21. Okt. 2011
3
0
1
Sprachen
Hallo,

ich möchte gerne mit dem Watchdog einen Programmablauf überwachen

und einen Reset auslösen wenn eine bestimmte Zeit (0,5 sek.) überschritten wird.


;----------------------------------- Auschnitt der Startroutine --------------------------------
Reset:

..........................
..........................
..........................
..........................





call reciver_0_on ;in outputs.asm
call reciver_1_on ;in outputs.as
call all_out_off
call setup_timer_0
call setup_twi
call setup_rs_232 ;beide schnittstellen
call setup_watchdog
call set_start_default
sei
jmp workloop


;-----------------------------------
setup_watchdog:
ldi temp, (1<< WDP0)| (1<< WDP2) | (1<< WDE)| (1<< WDCE)
sts WDTCSR, temp
ret
;-----------------------------------
workloop: ; Endlosschleife

call executer_0
call executer_1
call teste_eingaenge ;in inputs.asm

wdr
rjmp workloop

;-----------------------------------

Kann mir hier jemand weiterhelfen, das Datenblatt hilft nicht wirklich, da die englisch Kenntnisse fehlen.


Danke für jede Antwort
 
Hallo,

dein Beispielcode erscheint mir soweit in Ordnung.

Du solltest aber die Initialsierung des Watchdog möglichst am Codeanfang erledigen und auch dort möglichst gleich einen wdr ausführen.

Im Moment ist es so, dass die Routinen am Anfang eventuell zu viel Zeit benötigen und es dadurch erneut zu einem Watchdog-Reset kommt, falls der mal ausgelöst wird. Der Watchdog bleibt auch bei einem Watchdog-Reset aktiviert!


Vielleicht hilft dir das weiter.

Grüße,
Dirk
 
Hallo Dirk,

Danke für die schnelle Antwort,

werde es Morgen gleich Testen und das Ergebnis mitteilen.

Gruß
Werner
 
Hallo Dirk,

das Problem war daß ich das WDTCSR mit meinem Code nicht richtig beschreiben konnte,
das WDE Bit konnte verändert werden nicht jedoch die Vorteiler Register WDP0....WDP3.

Das Beispiel im Datenblatt hat mir schließlich weitergeholfen, nachfolgend die geänderte
SetupRoutine.
;-------------------------------------------
setup_watchdog:

lds temp, WDTCSR
ori temp, (1<<WDCE) | (1<<WDE)
sts WDTCSR, temp
ldi temp, (1<<WDE) | (1<<WDP0) | (1<<WDP1) | (1<<WDP2);Vorteiler auf 2.0 sekunden
sts WDTCSR, temp
ret
;-------------------------------------------


Gruß Werner
 
Hallo Werner,

schön dass es nun funktioniert. Ja, man muss das Bit WatchdogChangeEnable WDCE setzen und erst danach innerhalb der nächten 4 Maschinenzyklen die Prescalerbits setzen, erst dann werden die Prescalerbits übernommen. Das hatte ich irgendwie verdrängt :rolleyes:

Noch ein schönes Wochenende,
Dirk
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)