Zitat Zitat von avr_racer Beitrag anzeigen
Neustart2:
ldi rmp,1<<TSM ; Prescaler Sync Mode
out GTCCR,rmp

Prescaler SYNC Mode ist FALSCH!! Es ist einer TIMER/COUNTER Synchronisationsmode sprich deine Timer 0 1 und 2 werden synchronisiert aber da der Tiny 13 nur Timer 0 hat....
jetzt wird das TSM erstmal gesetzt UND PSR10 wird automatisch erstmal gelöscht!!!!! Auch wenn du beide Bits gleichzeitig setzt. Harwdare hat immer Vorrang vor Software
Hallo avr-racer,
wenn TSM nicht gesetzt war, war auch PSR10 nicht gesetzt, da das sofort nach Setzen rückgesetzt wird wenn TSM nicht gesetzt ist. Wird also nur PSR10 gesetzt, wird der Prescaler zurückgesetzt und PSR10 von der Hardware gleich wieder gelöscht - der Prescaler läuft und versorgt die Timer mit Takt.

Wenn man TSM und PSR10 gleichzeitig setzt wie zB mit
ldi rmp,(1<<TSM)|(1<<PSR10)
out GTCCR,rmp
bleiben beide Bits gesetzt, der Prescaler zurückgesetzt und gstoppt. Die/der Timer steht und kann nicht loslaufen. Hab ich ausprobiert und kann man auch leicht durch Ausgabe auf Display oder über Serielle von GTCCR vor und nach Setzten überprüfen.

clr rmp
out GTCCR,rmp

Dieser Schritt ist unnötig, ausser es ist gewollt das die Timer wieder nicht synchron laufen solle.
Da der Prescaler mit Setzen von TSM und PSR10 auch gestoppt wurde, muß er wieder freigegeben werden. Das geschieht hier mit Wert 0 ins GTCCR zu schreiben.



Ich versuch mal zu beschreiben, wie ich die Taktversorgung des/der Timer sehe:
http://ww1.microchip.com/downloads/e...oc/doc8126.pdf
Seite 78 oben
Figure 12-2. Prescaler for Timer/Counter0

Es gibt einen Prescaler im AVR, der mehrere Taktausgänge hat. Die Ausgänge sind Takt/1, Takt/8, Takt/64, usw vermutlich nach AVR Typ variabel. An den Ausgängen liegt der entsprechende Takt und führen zu den Timern. Die Timer werden also mehreren Leitungen mit den verschieden Takten versorgt. Welchen Takt sie nutzen wird mit den CS Bits für jeden Timer individuell ausgewählt.

Wird für einen Timer der Takt/8 ausgewählt, findet der erste Timerschritt beim 8. Systemtakt nach Strom einschalten bzw nach Reset des Prescalers statt weil die Takt/8 Leitung dann einen Impuls bekommt. Wenn man die CS Bits für den Timer zB beim 5. Systemtakt setzt, dauert es statt 8 Systemtakten nur 3 Systemtakte bis der erste Timerschritt stattfindet, weil der Prescaler ja schon läuft und die Takt/8 stur alle 8 Takte einen Impuls liefert. Unabhängig vom Setzen der CS Bits.

Mit den TSM und PSR10 Bits hat man die Möglichkeit, den/die Timer wirklich alle gemeinsam/definiert loslaufen zu lassen. Mit TSM und PSR stoppt man den Prescaler und bringt die Zählkette dort auf Anfang (RESET). Dann kann man alle Timerkonfigurationen vornehmen und die Timer mit Löschen des TSMs definiert loslaufen lassen. Und zwar so, das nicht schon mit der Takt/8 Leitung beim 5. Systemtakt ein Timerschritt stattfindet sondern wirklich erst beim acten.

Ich hoffe ich lieg da jetzt nicht ganz falsch und habe mich verständlich ausgedrückt

Gruß
Searcher

PS Synchronisation von externem Takt über T0 ist noch was anderes.