mikrocontroller.net

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


Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.