Forum: Mikrocontroller und Digitale Elektronik Mega128 Input Capture


von TobyTetzi (Gast)


Lesenswert?

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

von Andi K. (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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...

von Andi K. (Gast)


Lesenswert?

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

von TobyTetzi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.