mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ICP überlauf?


Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.