Watchdog mißbrauchen

Gast #497814
Lesenswert?

Einen schönen guten Morgen!

ich programmiere mit ATmega16, ich will den Watchdog nicht für Reset 
verwenden, sondern als ganz normalen Timeout mißbrauchen. Kann man die 
Funktion von "Reset" diabeln und dafür z.B. eine Funktion aufrufen 
lassen, wenn der Watchdog losgeht?

aus der wdt.h hier die ASM Funktion von dem _wdt_write(timeout)
(= wdt_enable(timeout) )


#define _wdt_write(value)   \
    _asm__ __volatile_ (  \
        "in _tmp_reg_,__SREG__" "\n\t"    \
        "cli" "\n\t"    \
        "wdr" "\n\t"    \
        "out %0,%1" "\n\t"  \
        "out _SREG_,__tmp_reg__" "\n\t"   \
        "out %0,%2" \
        : /* no outputs */  \
        : "I" (_SFR_IO_ADDR(_WD_CONTROL_REG)), \
        "r" (_BV(_WD_CHANGE_BIT) | _BV(WDE)),   \
        "r" ((uint8_t) ((value & 0x08 ? _WD_PS3_MASK : 0x00) | \
            _BV(WDE) | (value & 0x07)) ) \
        : "r0"  \
    )


Ich kenne mich mit ASM nicht gut aus, es müsste ja ein Befehl ähnlich 
"JMP 0" oder so kommen, kann man den nicht durch was anderes ersetzen?
Oder ist die Reset - Funktion per Hardware festgelegt?
Gast #497828
Lesenswert?

Das hat damit überhaupt nix zu tun. Der Reset nach einem 
Watchdog-Timeout ist eine Hardware-Angelegenheit. Da hat man als 
Programmierer keine Eingriffsmöglichkeit. Die Funktion oben konfiguriert 
lediglich den WDT.
#497847
Lesenswert?

Bei neueren AVRs kann man auch einen Watchdoginterrupt aufsetzen und den 
Watchdog so konfigurieren, daß beim ersten Timeout der Interrupt 
ausgeführt wird und erst beim nächsten Timeout der harte Reset.


Allerdings hat doch der Mega16 schon haufenweise Timer (T0, T1, T2), da 
muß man doch überhaupt nicht den Watchdog mißbrauchen.


Peter
Gast #497849
Lesenswert?

>Bei Atmel kenne ich mich da nicht aus, beim PIC gehts.

Geht auch beim AVR (Atmel stellt auch noch andere Controller her...).
Der Watchdog sollte aber eher nur im Notfall für sowas benutzt werden 
(Ich schliesse mich da mal wieder Peter an).
Gast #498619
Lesenswert?

Wenne ich den Timer2 nehm (Timer0 und Timer1 sind belegt) kann ich max 
mit Vorteiler 1024 und 16Mhz CPU Takt ein Timerüberlauf nach 16ms 
produzieren, das ist viel zu wenig, ich brauche was im Bereich von ~sec.

Für den Watchdog eine ISR? Wußte nicht dass der eine hat...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren