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 (-;
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
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.
@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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.