Forum: Mikrocontroller und Digitale Elektronik AVR Attiny13 Watchdog resettet nicht


von Julius (Gast)


Lesenswert?

Hallo,

ich bin neu hier und bitte um eure Hilfe.
Mein Programm soll den PinB4 überwachen und gegebenfalls portb3 high 
setzen. Dieser soll dann durch einen Timer eine Weile gehalten werden. 
Das funktioniert auch ganz gut.
Sicherheitshalber wollte ich einen Watchdog mit im Programm haben. Da 
der Kontroller die ganze Zeit am Netz bleiben soll und ich nicht will 
das er sich irgendwann aufhängt.
Ich denke ich habe den Watchdog korrekt gestartet. Und ich bin mir auch 
ziemlich sicher das er einfach nicht resttet wird. Dadurch wird dann 
irgendwann der Attiny13 resettet, obwohl das Programm noch im vollem 
gange war.
Kann mir jemand meinen Fehler zeigen?
Ich benutze übrigens das AVR Studio 4.18.700 und den Atmel AVR ISP MKII

Hier der Quellcode:

  .include "tn13def.inc"

  .def  A  =r16
  .def  B  =r17

  rjmp Anfang

    .org 0x0003  ;Timer0 Overflow landet hier und
    rjmp TIM0_OVF  ;verweist auf TIM0_OVF Routine

Anfang:
    sbi    portb,4  ;schaltet PullUp für sensor eingang ein Port B4
    sbi    ddrb,3  ;Datenrichtungsbit PB3, Ausgang Pumpen Mosfet
    cbi    portb,3
    cli    ;Watchdog aktivieren (max. Zeit)
        ldi   r18,0b00011000  ; 1.mal
        out   wdtcr,r18
        ldi   r18,0b00101001  ; 2.mal
        out   wdtcr,r18
    sei
    WDR    ;Watchdog reset

Schleife:
    WDR
    sbis  pinb,4
    rjmp  Pumpe_an
    rjmp   Schleife


Pumpe_an:
    WDR
    cli
    sbi    portb,3  ;schaltet PB3 ein
    ldi    A,5  ;Start mit Vorteiler / 1024
    out    TCCR0B,A
    ldi    A,2
    out    TIMSK0,A;Timer Interrupt freigeben
    ldi    B,250  ;definiert Nachlaufzeit der Pumpe
    sei      ;Globaler Interrupt freigeben
    rjmp  Schleife

TIM0_OVF:        ;Timer Interrupt
    WDR
    dec   B
    cpi  B,0
    breq   Pumpe_aus
    reti


Pumpe_aus:
    WDR
    cbi    portb,3  ;schaltet PB3 aus
    ldi    A,0  ;schaltet Timer aus
    out    TCCR0B,A
    reti

von Oliver J. (skriptkiddy)


Lesenswert?

Da du den AVRISP MKII benutzt, nehme ich an, dass du das nicht via dW 
festgestellt hast. Ergo hat su sicher einen Simulator angeworfen und das 
hättest du erwähnen sollen. Aber sei es drum.

Der AVRSimulator scheint den WD nicht richtig zu simulieren (sollte 
eigentlich), aber der AVRSimulator2 vermag das zu erledigen.

Gruß
Skriptkiddy

von Julius (Gast)


Lesenswert?

Hallo,

und danke für die Antwort!
Stimmt ich habe es im Studio4 AVRSimulator geprüft und dabei 
festgestellt das es der Watchdogreset ist der mich aus dem Programm 
wirft. Allerdings bin ich erst darauf aufmerksam geworden nachdem der 
Attiny auch nicht machte was er sollte. Ort scheint es also auch nicht 
zu funktionieren.

Ich entnehme deiner ANtwort das am Quellcode an sich nichts einzuwenden 
ist, stimmt das?
Da es ja baer trotzdem nicht funktioniert gibt es noch ideen was ich 
probieren könnte?

Grüße
Julius

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.