Timer im AVR - Wie ist das mit dem Starten/Stoppen?

OP #2766685
Lesenswert?
• ▲
▼
Hallo,

die Frage stellt sich mir, weil ich gerade an einem eher 
"zeitkritischen" Projekt arbeite.
Wenn ich den Timer im AVR initialisiere, dann geh ich meist wie folgt 
vor:

Ich stelle den Timer Modus ein, z.B. CTC und setze das Zählregister 
(z.B. TCNT0) auf 0. Interrupts werden eingeschaltet und mit dem 
Einstellen des Prescalers wird der Timer ja gestartet. Angenommen ich 
habe einen Prescaler von 8 eingestellt. Dann wird das Zählregister mit 
jedem 8. Taktzyklus (Takt des µControllers) um eins erhöht. Ich habe 
keine Ahnung wie die Taktteilung intern genau funktioniert, aber so 
etwas erreicht man ja beispielsweise mit FlipFlops.

Wenn ich den Prescaler dann auf 0 setze (den Timer also stoppe), könnte 
es ja sein, dass noch 3 Taktzyklen (Takt des µControllers) nötig sind, 
um das Zählregister zu inkrementieren. Wie verhält sich der Controller, 
wenn ich irgendwann später im Programm den Timer wieder aktiviere? Wird 
das Zählregister nach 3 Taktzyklen um eins inkrementiert oder beginnt 
der Taktteiler intern wieder bei 0?

Ich hoffe ich konnte die Frage klar genug stellen. Vielleicht kennt 
einer die Antwort.

Vielen Dank im voraus
Gast #2766713
Lesenswert?
• ▲
▼
>Wenn ich den Prescaler dann auf 0 setze (den Timer also stoppe)

Damit stoppst du den Timer nicht. Du müsstest den Timer Clock
abschalten. Also keinen Prescaler mehr.

>, könnte
>es ja sein, dass noch 3 Taktzyklen (Takt des µControllers) nötig sind,
>um das Zählregister zu inkrementieren. Wie verhält sich der Controller,
>wenn ich irgendwann später im Programm den Timer wieder aktiviere? Wird
>das Zählregister nach 3 Taktzyklen um eins inkrementiert oder beginnt
>der Taktteiler intern wieder bei 0?

Dafür gibt es den Prescaler Reset bei z.B. ATMega.
OP #2766781
Lesenswert?
• ▲
▼
Thomas Eckmann schrieb:
> Man kann ihn man aber im GTCCR-Register zurück setzen.
>
> mfg.

Sauber, vielen Dank, das Register ist mir noch nie aufgefallen. Und 
natürlich lese ich erst jetzt etwas davon im Datenblatt...

holger schrieb
>>Wenn ich den Prescaler dann auf 0 setze (den Timer also stoppe)
>
>Damit stoppst du den Timer nicht. Du müsstest den Timer Clock
>abschalten. Also keinen Prescaler mehr.

Nichts anderes habe ich damit gemeint. Der Wert, den Du für die Bits 
CS0:2 ins Kontrollregister schreibst, ist 0.

Vielen Dank, Thema hat sich erledigt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren