www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nicht genug Timer im AVR!


Autor: Falk S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
folgendes Problem:

möchte mit einem ATmega16 zwei Frequenzen (5-5000Hz) gleichzeitig
zählen. Dafür brächte ich eigentlich 3 Timer, einen für das Zeitfenster
(Timer)und zwei zum zählen (Counter). Gibt es da einen Trick wie man mit
den Resourcen im ATmega auskommt? Problem ist auch das ich in der Zeit,
wo die Timer zählen gerne was anderes machen möchte...Hatte mal
überlegt die Entladekurve eines Kondensators als Zeitfenster zu
nehmen...

Gibts da was elegantes?

Gruß
Falk S.

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es wenn du jeden Frequenzeingang auf jeweils einen externen
Interrupt Eingang legst. In jeder Interupt Routine zählst du dann
manuell eine 16Bit Variable hoch. Dann bräuchtest du nur einen Timer
der in regelmäßigen Abständen beide Variablen entsprechend weiter
verarbeitet.
Ansonsten hat der ATMEGA16 eigentlich doch drei Timer.

Autor: Falk S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das denn bei 5000Hz noch schnell genug?
Der dritte Timer ist wohl der Watchdog Timer, oder?

Gruß
Falk S.

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hilft dir ja die Beschreibung der Timer im Datenblatt
weiter.

...

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsch, RTFM. Der Atmega hat zwei 8 Bit und einen 16 Bit Timer. 5kHz zu
zählen dürfte nicht das Problem darstellen, solange du die ISR klein
hältst, was man soundso immer machen sollte.

Autor: Falk S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt wohl tatsächlich 3 timer...

Ich blätter gerade mal im Datenblatt...ich finde es etwa verwirrend,
das der 8bit Timer und der 16bit timer beide timer1 heißen...dachte
daher man könnte sie nur alternativ benutzen. Zumindest benutzen beide
alternativ den externen Pin T1, oder?

Gruß
Falk S.

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fuer dein vorhaben reicht 1 timer (16 bit)
dann kannst du alle X Sekunden den Timerwert auslesen, resetten und
ausrechnen, was fuer eine Frequenz du am eingang hast

alternativ gibt es aber auch frequenz spannungswandler nur das waere
nciht gerade so genau aber warscheinlich viel einfacher

Gruss Jens

Autor: Falk S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jens123:

Wie stelle ich denn fest, das x Sekunden rum sind, wenn nicht mit einem
weiteren Timer?
Außerdem brauche ich das Signal so alle 100ms...

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich denke mal er meint, daß du einen timer nimmst
sagen wir mal den 16bit

den stellt du z.B. auf 1sek ein
deine beiden signalquellen hängst du an die externen ints und wenn der
int ausgelöst wird schiebst du den timerwert in ein register und somit
hast du die frequenz da du ja weiß wiel lang eine "timer-einheit"
ist.

Autor: Falk S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Inzwischen sehe ich sogar die chance 4 signale gleichzeitig zu messen
(was mein Ziel ist). Es gibt 3 externe IR. Gibt es noch eine weitere
Möglichkeit über einen der Pins einen IR zu erzeugen?

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, gibt es...
Analog-Comparator, Timer-Input-Capture...

Übrigens gibt es nur einen Timer1, der hat 16 Bit Breite
Timer0 und Timer2 sind 8 Bit breit.

...

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Außerdem brauche ich das Signal so alle 100ms...
Wenn du 10mal pro Sekunde die Frequenz misst dürfte es schwierig werden
wenn du am Eingang nur 5Hz hast.

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sei denn, man "zählt" nicht die Frequenz, sondern "misst" die
Zeitdauer der Periode (Timer1-Input-Capture und die 3 externen INTs)
und rechnet in Frequenz um.

...

Autor: Falk S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs jetzt mit 4 externen Interrupts (IR0, IR1, IR2,
Timer-Input-Capture) realisiert. Klappt prima!

Vielen Dank für Eure Hilfe!

Gruß
Falk S.

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.