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


von Falk S. (Gast)


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.

von Malte (Gast)


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.

von Falk S. (Gast)


Lesenswert?

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

Gruß
Falk S.

von ...HanneS... (Gast)


Lesenswert?

Vielleicht hilft dir ja die Beschreibung der Timer im Datenblatt
weiter.

...

von Mike (Gast)


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.

von Falk S. (Gast)


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.

von Jens123 (Gast)


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

von Falk S. (Gast)


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...

von Sebastian (Gast)


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.

von Falk S. (Gast)


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?

von ...HanneS... (Gast)


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.

...

von Malte (Gast)


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.

von ...HanneS... (Gast)


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.

...

von Falk S. (Gast)


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.

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.