PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Drehzahlerfassung



michi73
22.06.2005, 15:54
Habe ein Programm geschrieben das die Impulse pro Sekunde zählt. Leider reicht mir die Sekündliche Messung nicht mehr aus. Jetzt möchte ich über einen Timer die Impulslänge messen um mehrere Messungen in der Sekunde durchführen zu können. Ich hatte da folgende Idee:
Ich wollte bei einer negativen Flanke einen Timer Starten und bei der nächsten Flanke den Timer wieder stoppen und dann den Timerwert auslesen. Theoretisch alles klar aber leider weiss ich nicht wie!
Vieleicht hat da einer ein kurzes Beispielprogramm für den Atmega8.

=P~
Dank für alle Beiträge schon im voraus
Michael

harryup
26.06.2005, 09:36
hi,
prinzipiell könntest du das so machen:
1. neg. flanke löst interrupt aus.
2. timer auslesen und mit variable (wert aus vorhergehender messung) vergleichen
3. variable mit neuem wert beschreiben
4. die differenz aus neuem wert zu gespeichertem wert ist die zeit, die zwischen 2 neg. flanken vergeht
5. zeit in freq umrechnen - fertig
grüssens, harry

rapo
26.06.2005, 15:39
Hi,
timer1 bietet eine capture funktion, die einen interr. auslöst. ist sozusagen wie eine stopuhr.
timer1 läuft frei und wenn, bei steigender oder fallender flanke, je nach dem, wie du programmiert hast ein int. ausgelöst wird sichert der avr den timer-zählerstand im capture-register, das dann ausglesen werden kann...
je nach taktfrequenz und vorteilung zählt der timer schneller oder langsamer seine 16bit hoch, so erhöht er sich: ein beispiel jede mSec. um 10. d.h. wenn ein int. erfolgt und das cature-register den wert 300 enthält, sind 30mSec. vergangen...
umrechnen musst das noch selber, wieviele impulse du pro umdrehung hast...

grüße ralf

bertl100
26.06.2005, 17:30
Such mal nach dem Befehl "PULSEIN"
Damit kannst per neg. oder pos. Flanke die Pulsweite messen.
Ist sicher einfacher als mit Timer.

MFG

Vader