Hallo, ich habe an dem Input capture Pin von 16 Bit Timer 1 einen Hall Sensor. Damit will ich eine Drehzahl erfassen. Der Timer läuft ständig in 16Mhz/64 also mit 250.000 KHz. Wie und was kann man genau mit dem Capture Pin anstellen? So weit ich weiß, einen Interrupt bei steigender oder fallender Flanke. Und es wird bei jedem Capture der Timerwert in das Capture Register kopiert. Irgendwie stehe ich aber wie vor einer Mauer. Muß ich nun den Timerwert bei einem Capture minus dem voherigen Capture Wert mehmen, um zu wissen, wie lange die Zeit einer Umdrehung war, oder zähle ich bei jedem Capture Interrupt einen Zähler hoch, das eine gewisse Zeit lang, und errechne daraus meine Drehzahl? Danke für euere Hilfe.... Gruß Toby
In der ISR für Input Capture liest Du einfach den Input Capture aus und setzt den TCNT1 auf 0 zurück. Wenn Du willst, kannst Du für 2, 4 oder sogar 10 Umdrehungen noch einen Zähler einbauen und die einzelnen Werte aus dem Input Capture Register auf eine 24 oder 32 Bit-Variable aufaddieren um genauer zu messen. Mit den ausgelesenen Werten wandelst Du dann die Zeit in Drehzahl mit 250000 * 60 / Zeit oder einfach 15000000 / Zeit Bei mehreren, aufaddierten, Messungen hintereinander, z. B. 4, dann einfach 250000 * 240 / Zeit oder 60000000 /Zeit Ob nun steigende oder fallende Flanke ist wurscht. MfG Andi
Moin... Nööööööööö... - Mag zwar gehen, bringt aber langfristig nix. Timer nicht zurücksetzen, das kostet unnötig Ressourcen. http://www.mikrocontroller.net/forum/read-1-241435.html#241577 Lieber Differenz zum vorhergehenden "Schnappschuss" bilden, dann kann man parallel dazu auch noch die Compare-Match-Interrupts verwenden und mit externen Interrupts weitere Input-Capture-Events in Software erfassen. Einzige Bedingung: Niemand (außer dem Prozessortakt über Vorteiler) vergreift sich am Stand des Timers. Schönen Herbstsonntag noch... ...HanneS...
OK, bei einer "Mehrfachnutzung" des Timer1 dann lieber nicht den TCNT1 zurücksetzen. Nur ist die Nutzung eines Compare Match dann auch nicht so einfach wobei es wohl einfach nur eine 16 Bit-Addition sein mag für den nächsten Compare Match. MfG Andi
Hallo, ich zähle nun einfach in jeder Input Capture ISR einen Impulszähler hoch. Den Capture Wert beachte ich garnicht. In der Overflow Routine, nach 250 ms also, errechne ich aus der Menge der Pulse die Drehzahl. Also, brauche ich den Capture Wert eigentlich nicht, sondern nur den Capture Interrupt, da der Hall sensor nunmal darauf liegt, und nicht auf einem Ext.Int. Desweiteren läuft der Timer non stop, da ich aus 4x250ms Überläufen eine Sekunde bilde. Daher kann ich ihn nicht zurück setzen. Zudem errechne ich aus dem Zählerstand noch eine PPM Pulslänge von einem RC-Signal, wobei allerdings ein zurücksetzen besser wäre, da ich ja hierbei Überläufe habe. Danke für Euere Hilfe. Gruß Toby
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.