Timer auf Overflow prüfen

Gast #177339
Servus,
mein Problem in aller Kürze:
Ich möchte eine Frequenz mit der Capture-Unit des Timer 1 meines Mega32
messen. Das funktioniert auch, wenn ich in dem mich interessierenden
Frequenzbereich bin, aber ich muß nun noch prüfen, ob ich nicht eine
Periodendauer unterhalb meines Frequenzbereiches messe. Das bedeutet,
dass mein Timer zwischen Start und Capture Ereignis überläuft. Wie kann
ich einfach prüfen, ob vor dem Captrue eine Überlauf stattgefunden hat?
Hab versucht, das TOV1 Bit im TIFR Register auszuwerten und hab auch
den Overflow Interrupt ausprobiert und mir den Überlauf in einer
Variablen vermerkt, aber das funktioniert irgendwie nicht.
In vereinfachter weise stell ich mir das so vor:
Wenn TOV1 = 1, dann Frequenz auserhalb Messbereich
sonst Periodendauer gleich Zählerstand
Where is the problem??? Ich beginne ernsthaft an meinen Fähigkeiten zu
zweifeln (-;
#177340
Ganz einfach.

Du liest nach dem Capture das TOV1-Bit, ist es gesetzt, so gab es einen
Überlauf. Alternativ kannst Du auch im Überlaufinterupt eine Variable
setzen, daß ein Überlauf stattgefunden hat.

Nun kann es aber sein, daß der Überlauf kurz nach dem Capturen
stattgefunden hat.
Auch kein Problem, teste einfach noch das höchstwertigste Bit des
Capture-Wertes. Ist der Capturewert FFFF oder so ähnlich, dann war der
Überlauf erst danach und das höchstwertigstige Bit ist gesetz.

Ist der Capturewert 0000 oder so ähnlich, dann war der Überlauf davor
und das höchstwertigste Bit ist 0. Dann entweder sagen "zu lang" oder
einfach 65536 addieren.


Peter
Gast #177341
Wenn Du unsigned 16 bits als Variablen hast, ist das Addieren von
65536 natürlich das Addieren einer 0 und damit überflüssig.  Einen
einzelnen Überlauf kann man damit einfach und simpel ignorieren.
Allerdings muß man sich sicher sein, daß man nicht mehr als einen
Überlauf hatte.
#177342
@Jörg,

ich setze natürlich voraus, daß man zur Berechnung von Zahlen >65535
auf  24 oder 32Bit erweitern muß.
Sonst macht ja das Mitzählen der Überläufe keine Sinn.

Mein Frequenzzähler in Assembler erweitert sogar bis auf 56 Bit, damit
die Berechnung im gesamten Meßbereich ohne Überlauf möglich ist.


Peter
Gast #177343
Mein Problem war ja das Feststellen, ob ich im, oder außerhalb meines
Messbereiches bin. Mich interessiert die genaue Frequenz eh nur im
Messbereich, da reicht mir die Information, ob ich noch unterhalb der
kleinstmöglichen Frequenz liege, also ob der Zähler übergelaufen ist
oder nicht, wie oft ist mir egal. Aber mein Problem stammt
wahrscheinlich aus einer ganz anderen Ecke. Das Prüfen des Überlaufs
funktioniert, zumindest mit einem Testaufbau. Wenn ich das ganze dann
an mein eigentliches Testobjekt anschließe messe ich wahrscheinlich
Stötimpulse mit, die aber nicht mal auf dem Oszi sichtbar sind. Bin
noch auf der Suche nach den Quellen und werd wohl mein Referenzsignal
noch tiefpassfiltern müssen. Ich werd als erstes mal die
"Rauchunterdrückung" im AVR aktivieren bevor ich wieder zum Lötkolben
greife, leider haben sowas aber nicht viele MCs...

have a nice and sunny sunday

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.