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
Tarek T. schrieb: > Ich hoffe ich konnte die Frage klar genug stellen. Vielleicht kennt > einer die Antwort. Der Prescalercounter ist ein Zähler, wie jeder andere auch. Wenn der Timer angehalten wird, steht er auf irgendeinem Wert und zählt beim nächsten Einschalten dort weiter. Man kann ihn man aber im GTCCR-Register zurück setzen. mfg.
>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.
Dem ganzen Spiel kann man genau auf die Finger gucken, wenn man den Simulator in AVR Studio bemüht und sich im Einzelschritt und mit Breakpoints durch das Programm hangelt.
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.
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.