PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frequenz messen



mariosey
26.02.2010, 12:27
Hallo, also ich hab bisher nur kleinere Aufgaben mit den AVR's gelöst und stehe jetzt vor dem Problem wie ich mit einem Timer (ist denke ich die beste lösung) eine Drehzahl von einem Radsensor erfassen kann.

Es ist ein aktiver sensor, sprich das Signal ist schon ein sauberes Rechtecksignal, maximalfrequenz sind nur 2000Hz, also nicht viel.

Es geht um eine Drehzahlabhängige Schaltaufgabe, dafür muss mir der Timer eben am besten über die Laufzeit zwischen 2 Nulldurchgängen die frequenz berechnen, mehr nicht.
Das Ergebnis wird dann einfach über eine IF frequenz über 1700Hz AND PORTC.1 = 1 weiterverarbeitet.

Hab bisher nix mit Timern zutun gehabt, und werd auch irgendwie nicht schlau aus den Codeschnipseln hier im Forum, vllt kann mir da mal einer schnell weiterhelfen, am liebsten so, das ich hinterher auch verstehe wie der Timer genau funktioniert (also was die befehle bewirken), damit ich das später auch selbst anwenden kann bei anderen Aufgaben.

mfg
Mario

oberallgeier
26.02.2010, 13:20
... werd ... nicht schlau aus den Codeschnipseln hier ... schnell weiterhelfen ... so, das ich hinterher auch verstehe wie der Timer genau funktioniert (also was die befehle bewirken ...Da wird wohl keiner ein weiteres, persönliches Tutorial schreiben. Das steht in jeder Dokumentation zum Controller. Da es nicht auf die Schnelle geht, brauchen die dort so 30 Seiten oder mehr. Pro Timer.

Du nutzt auch (leider) nicht die Suchfunktion - ein Timer-Tutorial gibts nämlich z.B. hier (kllick drauf) (http://www.rn-wissen.de/index.php/Timer/Counter_%28Avr%29) und ein weiteres auch hier. (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR)

... vllt kann mir da mal einer schnell weiterhelfen ...Hier gibt es (m)eine Lösung mit Codebeispiel (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=437897&sid=0521deb02f3dd847fddd17d4b45da7da#437897)wie ein Interrupt zur Drehzahlmessung initialisiert wird und wie die zugehörige ISR aussieht. Grundlage ist eine Programmierung des extINT, der - in diesem Falle - durch die steigende Flanke getriggert wird und so die am Pin anliegenden Impulse erkennt. Diese ISR liest die aktuelle Boardzeit aus und errechnet/merkt sich die Zeit vom letzten bis zum aktuellen Interrupt. Ein getrennt laufender Timerinterrupt liefert die Zeitbasis - bei mir sind das 50 µs-Scheibchen.

Viel Erfolg (die Lösung hatte bei mir schon etliche Zeit gebraucht - aber ich bin auch kein Profi darin).

mariosey
26.02.2010, 13:23
Danke, werde mich mal durcharbeiten.

suche benutzt hatte ich schon, aber ich hab direkt nach Frequenzmessung und drehzahl messen gesucht, nicht einfach nur nach timer.

Besserwessi
26.02.2010, 15:35
Eine Anleitung zum timer gibts z.B. hier :
http://www.rn-wissen.de/index.php/Timer/Counter_(Avr)

Da ist sogar ein beispiel zur Frequenz/Perioden messung dabei. Allerdings in C , und nicht in Basic.

Wenn man keine sehr hohe Auflösung braucht, gehr es auch ohne die ICP funktion: einfach einen Timer durchlaufen lassen, und beim Erkennen einer Flanke die Zeit Auslesen. Einen extra Timerinterrupt um noch weniger Auflösung zu bekommen muß man sich nicht antun. Da reicht es den Vorteiler passend einzustellen.