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.
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.
Ist das denn bei 5000Hz noch schnell genug? Der dritte Timer ist wohl der Watchdog Timer, oder? Gruß Falk S.
Vielleicht hilft dir ja die Beschreibung der Timer im Datenblatt weiter. ...
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.
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.
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
@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...
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.
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?
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. ...
>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.
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. ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.