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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.