Gast
#50898
Hallo, Ich bin Neuling in der Programmierung von AVR's und habe mir hier schon diverse Threads zum Thema Timer durchgelesen aber auf meine unten stehenden Fragen noch keine Antworten gefunden. Ich habe folgende Situation. AVR Mega8 mit 16MHz getaktet. Ich möchte einen Takt von 1/1000sec erreichen. Das habe ich mit einem Vorteiler von 64 und Startwert für Timer0 = 6 (256-250) auch erreicht (PINB.0 getoggelt = 500Hz). Am Anfang der Timer-Overflow-Interrupt Routine rette ich erst das SREG und setzen den Startwert für Timer0 wieder auf 6. ldi r0, SREG out TCNC0, Startwert . . . out SREG, r0 Nun meine Fragen: 1. Läuft der Prescaler unabhängig weiter? 2. Gibt es eine Verzögerung des Timers durch das Neusetzen des Startwertes (Jitter)? 3. In der Interrupt Routine möchte ich noch Berechnungen machen und 4-Bytes über RS232 ausgeben. Was passiert, wenn die Berechnungen und/oder die Übertragung der Bytes länger dauert als 1/1000sec (nächster Interrupt schon wieder da)? 4. Welche Art einen Zählimpuls zu erzeugen ist besser Timer-Overflow oder Timer-Compare-Match? 5. Die Genauigkeit des Zählers hängt vom verwendeten Quarz ab. Welchen Art von Takterzeugung sollte man verwenden und was versteht man unter der Angabe +/- 30ppm bei einem 16MHz Quarz? Danke im voraus. Gruß Jörg