- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 13

Thema: Watchdog Interrupt?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.242
    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.

  2. #2
    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 13:39 Uhr)

Berechtigungen

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

Labornetzteil AliExpress