- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: Watchdog Interrupt?

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Anzeige

    E-Bike
    Zitat Zitat von lendl Beitrag anzeigen
    Code:
    Config Watchdog = 8000                                      'Watchdog auf Resetmodus mit 8sek Zeit einstellen
    Wdtcsr.wdie = 1                                             'WDIE Bit auf 1 setzen, damit beim WDT-Timeout ein Interrupt ausgeführt
    Fehler: ...
    Was mache ich denn da falsch?
    Der Watchdog im XMEGA wird anders als im ATmega48 konfiguriert. Ein Watchdog-Interrupt kann dort nicht aktiviert werden.

    Deine Compiler Fehler kommen daher, daß die entsprechenden Register und Bitnamen im XMEGA nicht existieren.

    Auf der Microchip Seite gibt es die Application Note AN2654 zum XMEGA Watchdog.

    https://www.microchip.com//wwwAppNot...pnote=en591662

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Ich würde eine Zeitmessung eigentlich immer über einen Timer(Interrupt) machen.
    Der Watchdog wäre für mich immer nur eine Notbremse, falls sich das Prog irgendwo aufhängt ( Stack Overflow, Warten auf ein Ereignis ).

    Die Timer der AVR sind äusserst flexibel.
    Wenn der Prescaler für die Anwendung passt kann so ein Timer auch durchaus bis zu 3 Aufgaben auf einmal bewältigen ( Zeit messen ( Input Capture ), PWM generieren, Timer Interrupts generieren ).

    Zudem kann man einen Timer mit relativ hoher Taktfrequenz laufen lassen und im Overflow Interrupt Variablen runterzählen lassen ( frisst zwar viel Rechenzeit geht aber ).
    Somit sind dann auch Messungen für unterschiedliche Zeitintervalle möglich.

  3. #13
    Als sehr einfach zu realisierende "Pi-mal-Daumen"-Zeitbasis, an die keine hohe Präzisionsforderung gestellt wird,
    ist der WD-Timer sehr gut geeignet. Die anderen Timer bleiben dann anderweitig nutzbar.

    Für die Attinys u.A. geht das auch ganz simpel:

    Config watchdog = 8000 'nach meiner Erfahrung läuft der wd-Timer damit schon los, auch ohne "start"-Befehl
    Set Wdtcr.wdie 'wd in Interrupt-Modus versetzen, statt reset-Modus


    If Wdtcr.wdif = 1 Then 'zeitintervall abgelaufen
    set Wdtcr.wdif ' das wdif-flag sofort wieder löschen, indem man es setzt
    Incr wd_tick
    end if


    Damit wird die Zählvariable "wd_tick" jedesmal wenn das wdif-flag gesetzt wird incrementiert,
    und das wdif_flag bis nach Ablauf des nächsten Zeit-Intervalls zurückgesetzt,
    ohne dass man eine WD-Interruptroutine aufrufen bzw. ausführen muss. (= Polling)

    Zu beachten ist, dass das vom Timer gesetzte wdif-flag dadurch gelöscht wird, dass man es setzt(!),
    also mit einer 1 beschreibt, obwohl es schon gesetzt ist.

    Man braucht hierbei auch keine 4-Takte-Sequenz einhalten, wie oft irrtümlich geschrieben wird.

    Dieses einfache Polling des Interrupt-Flags geht auch bei anderen Timern oder anderen Interruptquellen, wenn man die zeitraubenden Pushs und Pops der Interruptroutinen vermeiden will.
    Geändert von stemmy (20.02.2022 um 14:39 Uhr)

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen