Nun ich denke das Rofo88 meint einen T Eingang zu benutzen.Mit Counter-Eingang meinst Du doch für jede Flanke eine Variable um eins hochzuzählen.
Dann kann cih ja beim Überlauf eines Timers (z.B. nach 100ms) den Zählstand auswerten und mit ner Formel die Umdrehunszahl berechnen.
Der ist eigentlich dafür gedacht um die Timer mit externen Takten zu versorgen. Allerdings könntest Du diesen Eingang in deiner Applikation auch als Taktzähler missbrauchen.
Ein zweiter Timer gibt dann die Torzeit vor und liest den Zähler aus um ihn anschließend wieder auf 0 zu setzen. Das verbraucht sehr wenig Rechenzeit, da fast die komplette Drehzahlerfassung mit Hardware realisiert ist.
Mit einer Torzeit von 100ms und Impulszählung würde ich den Drehzahlmesser nicht realisieren. Da bekommst Du eine Auflösung von 600U/min was gerade bei niedrigen Drehzahlen mehr als dürftig ist.
Bei niedrigen Drehzahlen ist meiner Meinung nach die Impulsdauermethode die beste Variante. Das bedeutet ein Timer läuft frei mit dem heruntergeteilten Quarztakt und wird bei jeder Umdrehung (= Impuls vom Geber) ausgelesen. Die Der Zählerstand dieses Zählers ist das Maß für die Drehzahl. Den Zählerstand durch eine Formel gejagt und man kriegt die Drehzahl raus. Dadurch bekommt man gerade bei niedrigen Drehzahlen eine sehr gute Auflösung. Je höher allerdings die Drehzahl wird umso höher wird der Fehler und umso größer ist die Prozessorbelastung.
Mit einem 16MHz getakteten ATMEGA8 sollten aber Drehzahlen bis 30.000 U/min mit einem maximalen Fehler von 60 U/min bei dieser Methode kein Problem sein. Schau mal im Datenblatt unter ICP nach. Dieser Eingang würde sich vorzüglich dafür eignen.
Noch eine kleine Krux bei dieser Variante ist, das die letzte gemessene Drehzahl bei Stillstand des Motors "stehen" bleibt. Aber das kann man ja durch ein Timeout detektieren und die Drehzahl dann auf 0 setzten.
Ich bastel schon ein wenig länger an Modellbau Drehzahlmessern rum und hab deshalb schon so einiges ausprobiert.
In meiner letzten Drehzahlmesser Variante benutze ich beide Methoden zur Drehzahlerfassung und schalte ab einer bestimmten Drehzahl zwischen den beiden Methoden um. Allerdings nehm ich dabei eine Torzeit von 1 sek, was für dich dann wohl zu langsam ist - Auch deshalb würd ich die Impulsdauermethode vorziehen, da dabei bei jeder Umdrehung ein neues Ergebnis zustande kommt.
Für die Ansteuerung deines Displays würd ich mir eine Look Up Table machen in der dann je nach anzuzeigender Zahl die entsprechenden Segmente aktiviert werden.
Die Umschaltung zwischen den einzelnen Stellen des Displays würd ich in einem Timer Overflow Interrupt ansiedeln.
Dein Hauptprogramm berechnet dabei dann die einzelnen Digits und speichert Sie in einer Tabelle ab. Der Timer Interrupt gibt dann einfach eine Stelle nach der anderen aus.
Ein wirklich kleines Problemchen dürfte noch das Unterdrücken der führenden Nullen sein, aber auch das ist mit ein klein wenig Hirnschmalz sicher ein lösbares Problem.
Evtl. würd ich mir noch einen Speicher für die maximal vorgekommene Drehzahl in den Drehzalmesser mit einbauen. Du willst ja schließlich wissen, wann es deinen Motor zerlegt hat
Na, dann kann ich Dir wohl nur noch viel Glück und Spaß bei der Realisierung deines Projektes wünschen.
Lesezeichen