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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren