Forum: Mikrocontroller und Digitale Elektronik AVR - Wie 2x Counter + 1x Timer am besten nutzen


von Timmo H. (masterfx)


Lesenswert?

Ich möchte für mein Auto ein Tacho und einen Drehzahlmesser mit einem
ATMega32 basteln. Ich hatte mir es so vorgestellt, dass ich einen Timer
laufen lasse (den Timer2(8Bit)) der dann z.B. alle 200ms nachguckt
wieviele Impulse die beiden Counter gezählt haben. Das Problem ist
natürlich, dass ich nicht den 16Bit Timer verwenden kann, da ich ja nur
der erste 8Bit und der 16Bit externe Eingänge haben. Das heisst für
mich, dass ich nur maximal ein Intervall von 16,32ms hinbekomme, wenn
ich mich nicht verrechnet habe. In dieser Zeit kann es natürlich auch
sein, dass noch gar nichts gezählt wurde. Denn z.B. bei Standgas (ca.
800 U/min) bekomme ich ja nur alle 75ms einen Impuls (falls es nur
einer pro Umdrehung ist). Entsprechend gleich ist es ja auch bei
geschwindigkeit, sogar noch extremer.
Nun könnte ich natürlich noch per Software durch den Timer immer wieder
eine Variable hochzählen lassen, so dass ich z.B. auf 500ms komme.
Allerdings kann es dann ja auch ungenau werden oder hält sich das
einigermaßen in Grenzen?
Wie würdet ihr das machen?

von peter dannegger (Gast)


Lesenswert?

Du hast 3 Timer, also kannst Du einen für die Meßzeitbasis und für alle
anderen Zeitbedingungen nutzen und die anderen beiden zum Zählen der
beiden Frequenzen.

Man kann mit dem Overflowinterrupt alle Timer beliebig erweitern und
verliert dabei überhaupt nichts an Genauigkeit.

Man muß nur beachten, daß der Überlauf nicht atomar erfolgt, d.h. der
Interrupt wird später ausgeführt.
Bekommt man zeitnahe zum Auslesen des Timers einen Überlauf, kann man
am höchsten Bit des Timerwertes entscheiden, ob der Überlauf noch
mitgezählt werden muß oder nicht.


Peter

von Timmo H. (masterfx)


Lesenswert?

Das ist schon richtig, dass ich 3 Timer habe. Zwei davon will ich als
aber ja als Counter benutzten. Und nur Counter0 und Counter1 haben
externe Anschlüsse. Daher habe ich für die Zeitbasis keinen 16Bit Timer
sondern nur 8Bit. Damit kann ich aber mit einem Vorteiler von 1024 nur
einen 64us Interrupt realisieren. Lasse ich den 8Bit Zähler damit
inkrementieren bekomme ich alle 16,32ms einen Overflow. Was meinst du
jetzt mit deinem höchsten Bit?

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.