Behandeln von Timeroverflow

Gast #6372028
Lesenswert?
• ▲
▼
Hi, bevor direkt Kritik im Bezug zu "Benutz die SuFu" kommt:
Das habe ich. Auf den ersten drei Seiten mit u.a. den Suchbegriffen 
"Timer overflow behandeln" kam nichts passendes.

Zu meinem eigentlichen Problem:
Ich möchte durch Input Capture die Zeit zwischen zwei Signalen ermitteln 
und verwende dafür logischerweise einen Timer. Bisher mache ich das so:

Zeit = alter Timerwert - neuer Timerwert. Soweit klappt das auch, 
allerdings nur, so lange dieser nicht überläuft. Darum meine Frage:
Wie behandle ich in diesem Fall einen Timerüberlauf? Ich vermute es gibt 
da einen bereits etablierten "Königsweg"? Kann ich bei meinem Ansatz 
bleiben oder passt das dann garnicht mehr?

MfG

Dr.Med.Den.Rasen :)
Gast #6372048
Lesenswert?
• ▲
▼
Dr.Med.Den.Rasen schrieb:
> Zeit = alter Timerwert - neuer Timerwert. Soweit klappt das auch,
> allerdings nur, so lange dieser nicht überläuft.

Ich korrigiere mal, du meintest sicher: Zeit = neuer Timerwert - alter 
Timerwert

Das funktioniert auch nach einem Überlauf. Nur nicht nach zweien. Du 
musst nur darauf achten, dass deine Variablen unsigned integer sind, und 
genau so viele Bits haben, wie der Timer.
Gast #6372184
Lesenswert?
• ▲
▼
Dr.Med.Den.Rasen schrieb:
> Ich vermute es gibt
> da einen bereits etablierten "Königsweg"?

Den gibt es. Du mußt in der Capture-ISR beachten, ob gerade ein Überlauf 
stattgefunden hat und diesen berücksichtigen. Man erkennt dies am 
Timerwert und am OVF-flag.
Sehr wichtig dabei ist, daß Capture-ISR und OVF-ISR die gleiche 
Priorität haben und sich nicht gegenseitig unterbrechen können.
Welchen µC verwendest Du?
Gast #6372548
Lesenswert?
• ▲
▼
Dr.Med.Den.Rasen schrieb:

> Zeit = alter Timerwert - neuer Timerwert
> Soweit klappt das auch

Das würde mich doch sehr wundern, denn das ist schonmal grundfalsch. 
Muss natürlich heissen:

Zeit = neuer Timerwert - alter Timerwert

> allerdings nur, so lange dieser nicht überläuft.

Wenn du es richtig machst, brauchst du dich für den Überlauf überhaupt 
nicht zu interessieren, jedenfalls solange sichergestellt ist, dass 
zwischen zwei Captures immer weniger Zeit vergeht, als der vollständige 
Durchlauf des Timerzählers dauert.

Nur, wenn das nicht sichergestellt werden kann, dann muss man sich auch 
um den Overflow kümmern.

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.