mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Watchdog - WDP wird nicht gesetzt


Autor: Rainer B. (guitero)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

habe heute probiert den Wachhund zum Laufen zu bewegen.
Folgendes habe ich bei der Initialisierung:

ldi  temp, (1<<WDCE) | (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0)
out  WDTCR, temp


Debugge ich mit dem JTAG werden die WDP Bits jedoch nicht gesetzt.
Im "echten" Programm ist es auch so dass der Watchdog scheinbar sehr 
schnell abläuft, sodass andauernd ein Reset ausgeführt wird. Zum Testen 
leuchtet beim Reset bei mir eine LED auf, die nach 600ms per Timer 
abgeschaltet wird. Das funktioniert soweit auch. Aktiviere ich den 
Watchdog leuchtet die LED aber immer, zumindest fürs Auge! Da ich den 
Watchdog auf Teiler 2058 gestellt habe müsste er aber erst nach ca. 2s 
abgelaufen sein.
Also steht der Watchdog wahrscheinlich auf Teiler16 = 15ms.
Kennt jemand dieses Problem oder hat einen Tipp wie ich an das Problem 
rangehen kann.
Hier ist der vollständige Code:
Bei Initialisierung soll LED aufleuchten und durch Ablauf des Timers 
nach 0,6s erlischen. Dann soll nach 2s der Watchdog den reset auslösen. 
Programm ist nur als Test des WDR gedacht:
init:  //-->STACK
    ldi     temp, LOW(RAMEND)
    out     SPL, temp
    ldi     temp, HIGH(RAMEND)
    out     SPH, temp
    
    ldi    temp, 0x00
    sts    TCNT1H, temp
    ldi    temp, 0x00
    sts    TCNT1L, temp

   ;Berechnung-->7,37Mhz/65536/64 = 1,757 --> ca. 0,6s
    ldi     temp, (0 << CS12 ) | (1 << CS11 ) | (1 << CS10 ) 
    sts     TCCR1B, temp
 
    ldi     temp, 1 << TOIE1
    sts     TIMSK, temp    

  ldi  temp, (1<<WDCE) | (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0)
  out    WDTCR, temp
                
  clr    temp
  clr    flag
  clr    data
  clr    counter
  clr    flag0
    
  ldi    temp, 0xFF
  out    PORTE, temp
  out    DDRE, temp

  sei  

loop:
    

  rjmp   loop

timer1:


  ldi    temp, 0x00
  out    PORTE, temp
  out    DDRE, temp

  ldi    temp, ( 0 << CS12 ) | (0 << CS10 ) | (0 << CS10 ) 
  out    TCCR1B, temp

  ldi    temp, 0x00
  out    TCNT1H, temp
  out    TCNT1L, temp
    
  reti



Viele Grüße,

guitero

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da Du den AVR-Typ nicht nennst, kann man nur raten:  Üblicherweise 
kannst Du den Watchdog nicht einfach in einem Befehl verändern, sondern 
musst eine Sequenz einhalten, z.B. WDCE und WDE setzen und danach 
innerhalb von vier Zyklen den gewünschten Wert schreiben.

Näheres verrät Dir das freundliche Datenblatt.

Autor: Rainer B. (guitero)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

> Da Du den AVR-Typ nicht nennst, kann man nur raten:

Sorry, es handelt sich um einen AtMEga162.

>sts    TCNT1L, temp

Hier sollte der Befehl "out" sein, habe beim reinkopieren Mist gebaut.

>Üblicherweise
>kannst Du den Watchdog nicht einfach in einem Befehl verändern, sondern
>musst eine Sequenz einhalten, z.B. WDCE und WDE setzen und danach
>innerhalb von vier Zyklen den gewünschten Wert schreiben.

Das war der Fehler. Vielen, vielen Dank!

Gruß,

guitero

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.