Mega128 Input Capture

Gast #232532
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
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
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...
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
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.