Heyho, ich möchte mit meinem Atmega32 eine einstellbare Frequenz im Hz Bereich (ca. 1 - 20 Hz) erzeugen. Dafür benötige ich den Timer 1 (16bit). Diese Frequenz will ich dann auch noch messen, dafür gibt es ja den Input Capture. Nun ist meine Frage, ob das gleichzeitg funktioniert, weil ich glaube, dass sich die beiden Funktionen normalerweise in die Quere kommen müssten (weil sie nicht ganz die selben Startpunkte zum Loslaufen des Timers haben). Falls das nicht gleichzeitig nutzbar ist, müsste ich dann eines der beiden (Frequenz messen oder Frequenz erzeugen) softwaremäßig machen. Was wäre da besser? Grüße Joe
Hi >Diese Frequenz will ich dann auch noch messen, dafür gibt es ja den >Input Capture. Meinst du, dass wird genauer als ausrechnen? MfG Spess
Joe B. schrieb: > Heyho, > > ich möchte mit meinem Atmega32 eine einstellbare Frequenz im Hz Bereich > (ca. 1 - 20 Hz) erzeugen. Dafür benötige ich den Timer 1 (16bit). > Diese Frequenz will ich dann auch noch messen, dafür gibt es ja den > Input Capture. Nööö, Input-Capture ist ein stinknormaler externer Interrupt, der als Zugabe den aktuellen Zählerstand des Timer1 im dafür vorgesehenen (Doppel-)Register speichert. > Nun ist meine Frage, ob das gleichzeitg funktioniert, weil ich glaube, > dass sich die beiden Funktionen normalerweise in die Quere kommen > müssten (weil sie nicht ganz die selben Startpunkte zum Loslaufen des > Timers haben). AVR-Timer müssen micht "loslaufen" und "gestoppt werden". Timer lässt man frei durchlaufen. Wenn man nur eine Funktion (regelmäßigen Takt) braucht, nutzt man den CTC-Mode, der setzt den Timer bei Erreichen des Compare-Wertes automatisch auf 0 zurück. Wenn man mehrere Funktionen des Timers braucht, dann lässt man ihn frei durchlaufen. Jeder Compare-Interrupt kann in der ISR das Compare-Register auslesen, das Intervall draufaddieren und den dadurch entstandenen "neuen Termin" in das Compare-Register zurückschreiben. Der ICP-Interrupt liest das Capture-Register aus und subtrahiert davon den gemerkten Wert des Capture-Registers beim letzten Interrupt und erhält somit das Intervall. Geht natürlich nur bei guter Vorbereitung, also wenn die zu messende Periodendauer ins Timer-Raster passt. > > Falls das nicht gleichzeitig nutzbar ist, müsste ich dann eines der > beiden (Frequenz messen oder Frequenz erzeugen) softwaremäßig machen. > Was wäre da besser? Das kommt auf den Einzelfall an. Den kenne ich nicht, Deiner Fragestellung fehlt die nötige Präzision. Meist braucht ein Programm nicht nur einen Sekundentakt, sondern auch einen Takt im Bereich 30...1000 Hz (Tastenentprellung, Drehgeberauswertung, kleine Verzögerungen, usw). Da bietet es sich an, diese mit einem Timer zu generieren und daraus per Software die langsamen Frequenzen abzuleiten. > > Grüße Joe ...
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.