Forum: Mikrocontroller und Digitale Elektronik Atmega32 Timer 1


von Joe S. (bubblejoe)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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
Noch kein Account? Hier anmelden.