Forum: Mikrocontroller und Digitale Elektronik ICP überlauf?


von Karl (Gast)


Lesenswert?

hallo Leute,

ich wollte mal fragen, wie man die überläufe beim freuqnezmessen mittels 
ICP handelt. Wenn der Timer fortlaufend ist und bei einer steigenden 
oder fallenden Flanke den CounterRegister abspeichere, passiert es ja 
irgendwann, dass der Timer überläuft. Wenn ich nun den n´ten Timerstand 
vom n-1´ten subtrahiere, laufe ich gefahr, dass ich den überlauf 
berücksichtigen muss. Wie macht man sowas?

Danke und Gruß
Karl

von Gast (Gast)


Lesenswert?

Wenn der Zähler nur einmal überläuft, gibts überhaupt kein Prob. Kann 
mehr als ein Überlauf zwischen zwei aufeinanderfolgenden Messungen 
stattfinden, stockt man ihn softwaremäßig auf, indem man im 
Timer-Overflow-Interrupt die Überläufe über irgendwelche Register zählt 
(8 oder 16 oder... Bit breit). Das ist ja der tiefere Sinn hinter dem 
Timer-Overflow-Interrupt.

von Tim (Gast)


Lesenswert?

In dem du dafür den Overflow Interrupt verwendest.
Bei jedem Overflow zählt du eine Variable hoch und addierst das
entsprechend beim ICP Interrupt zu deiner Differenz.

Aber aufpassen: Der ICP Interrupt hat ein höhere Priorität als
der der Overflow. Es kann also sein das zuerst der ICP und dann
der Overflow Interrupt bearbeitet wird, obwohl die andersherum
ausgelöst wurden....
Im ICP Interrupt also immer prüfen ob ein Overflow ansteht und
ob er VOR dem ICP ausgelöst wurde (Zählerstand niedrig) oder DANACH 
(Zählerstand hoch).
Im ersten Fall den Overflow Interrupt löschen und zählen,
im 2. Fall ignorieren.

von Stefan E. (sternst)


Lesenswert?

Karl schrieb:

> Wenn ich nun den n´ten Timerstand
> vom n-1´ten subtrahiere, laufe ich gefahr, dass ich den überlauf
> berücksichtigen muss.

Nein, musst du nicht, wenn es nur ein Überlauf ist, und die Variablen, 
in denen du die Timerstände speicherst, geeignet definiert sind 
(uint16_t). Dann nämlich wird der Überlauf bei der Subtraktion 
automatisch berücksichtigt.

Beispiel:
100 (neu) - 65530 (alt) = 106
bei unsigned 16 Bit

von Peter D. (peda)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.