Timer und dessen interrupts ein- und ausschalten

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Timer und dessen interrupts ein- und ausschalten

      Hallo, ich hab' mal eine Frage und noch paar mehr:
      Nach config timerx=timer kann ich den timer mit start und stop an den Takt 'hinschalten', timer zählt, und 'wegschalten', timer bleibt stehen. Das ist mir klar.
      Nach on ovfx Timerx_isr kann ich mit enable ovfx den interrupt zulassen, mit disable ovfx den interrupt unterbinden, auch klar.
      Ich kann doch auch 2 interrupt-Möglichkeiten für einen timer einrichten und dann mit enable/disable mir das passende wählen, also

      BASCOM-Quellcode

      1. Config Timer1 = Timer , Prescale = 1024 , Clear_timer = 1
      2. On ovf1 Timer1_isr
      3. On Compare1a compare1_isr
      4. Enable ovf1
      5. disable Compare1a
      wobei, wenn in der timer1_isr nur die Überläufe vom timer1 gezählt werden, den interrupt nicht abschalten müsste, wenn durch den compare1_isr der timer1 immer zurückgesetzt wird, weil ja Clear_timer=1 vorgegeben wurde und so der timer1 nicht mehr überlaufen kann.
      Wie verhält sich das aber, wenn ich disable compare1a schreibe, mit dem timer-Überlauf? Wird nur der compare1_isr nicht ausgeführt, aber der timer1 weiterhin bei Erreichen des compare-Wertes auf 0 gesetzt, wegen Clear_timer=1, oder läuft der timer ungebremst durch?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich hab' halt wieder mal komische Effekte bei meinem konkreten Beispiel, dem Schwenktexter.
      Mein Gedanke: Am rechten Umkehrpunkt der Schwenkbewegung (auf die Leds gesehen) soll der timer mit 0 gestartet werden. Dabei sollen Überläufe mitgezählt werden. Am linken Umkehrpunkt wird der timer gestoppt, die gezählten Überläufe dem Timerwert zuaddiert. Das bildet jetzt die Laufzeit für einen Schwenk und in dieser Zeit sollen die vorgesehenen Anzahlen von Spalten des 'Bildspeichers' auf die Leds ausgegeben werden. Also wird die Laufzeit durch die Anzahl der Spalten geteilt und als compare-Wert vorgegeben. Die compare1a_isr enabled und so wird beim Zurückschwenk nach rechts durch die isr eine Spalte nach der anderen an die Leds ausgegeben. Die tatsächliche Anzahl ist allerdings geringer als die Zahl, die für die Ermittlung des compare-Wertes verwendet wird. Daher wird am Ende der ausgegebenen Spalten der isr mit disable compare1a_isr abgeschaltet, bevor der Umkehrpunkt erreicht wird. Dann fängt das Spielchen wieder an.
      In Wirklichkeit werden bei mir nur in jedem 2. Fall die Leds angesteuert, was ich gar nicht verstehe (jetzt mal davon abgesehen, dass ich den genauen Umkehrpunkt noch immer nicht genau erwische)
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Neue Forschungen haben ergeben: wenn ich zum Messen der Schwenkzeit einen anderen Timer verwende als zur Ansteuerung der Ledausgabe, dann funktioniert es.
      Am rechten Umkehrpunkt wird timer0 gestartet, timer0-Überläufe mitgezählt. Am linken Umkehrpunkt des Schwenks wird timer0 gestoppt, mit den Überläufen addiert, ergibt Schwenkzeit. Diese Zeit durch Anzahl der Spalten dividiert ergibt den compare-Wert für timer1, der jetzt gestartet wird und nach der letzten ausgegebenen Spalte wieder gestoppt wird (vor dem Erreichen des rechten Umkehrpunktes). Dort beginnt dann wieder die Schwenkzeitmessung mit timer0.

      Mal ein Probefilmchen

      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------