-
-
Erfahrener Benutzer
Robotik Einstein
Ich denk mal, Du hast ein grundsätzliches Problem im Verstehen der Interrupts.
Ein Interrupt ist ein Programmteil, der Durch ein Hardware- ( manchmal auch Software- ) Ereignis ausgelöst wird.
Der gerade laufende Programmabschnitt wird verlassen und die zu dem Interrupt gehörige Interruptroutine aufgerufen.
Das verlassene Programm kriegt von dieser Aktion üblicherweise nichts mit!
Ich würde dein Problem wie folgt angehen.
1. Ein Timer wird auf externe Taktquelle umgeschaltet und der Overflowe Interrupt dieses Timers aktiviert.
In diesem Overflow Interrupt wird dann eine Hilfsvariable hochgezählt, damit man auch über den Zählerstand des verwendeten Timers hinauszählen kann.
2. Ein weiterer Timer wird so eingestellt, das alle 500ms ein Interrupt ausgelöst wird.
Das geht am schönsten mit dem Comparematch Interupt und einem Timer der im CTC Modus läuft.
Tritt dann dieser Interrupt nun auf wird der Zählerstand des "Zähler" Timers und der Hilfsvariable Ausgelesen und miteinander verrechnet.
Die Werte werden dann in einer beliebigen Variable gespeichert und ein Flag ( Bit Variable ) als Marker füe die Hauptroutine gesetzt.
Nun wird noch der TCNTx der Zähl Timers und die dazugehörige Hilfsvariable auf 0 gesetzt.
3. In der Hauptschleife wird das Bit Flag abgefragt und wenn es auf 1 steht der Zählerstand aus der Hilfsvariable abgeholt.
Das Bit Flag wird wieder auf 0 gesetzt, damit dieser Programmteil nur bei neuen Werten wieder durchgeführt wird. Voila - Fertig!
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen