Hallo, ich wollte mal fragen, wie ihr mit Timer0 und 16mhz quarz eine abtastrate von 10ms erzeugen würdet. Ich habe mir überlegt, dass man bei einem prescaler von 256 ca. 245,1/s einen Timer überlauf hat.... Irgendwie kommen aber immer krumme Zahlen raus. Was verwendet ihr um möglichst genau 10ms zu kommen?
(Klingt nach AVR) Du kannst ihn im CTC-Modus betreiben und OCR0 auf 250 setzen, dann hast du 250 Hz als Frequenz für den TIMER0_COMPARE_vect. Davon zählst du 25 Stück in der ISR ab, bevor du das Event auswertest.
Jörg Wunsch wrote: > (Klingt nach AVR) Denke ich auch. > Du kannst ihn im CTC-Modus betreiben und OCR0 auf 250 setzen, Naja, genaugenommen auf 249...
Hallo Oliver, mit Prescale 64 und Timernachladung TCNT0 0x06 erhältst du genau 1 ms. Du must ja nicht von 0 bis 255(256) zählen! Gruß Hans
Alles klar, danke! Sag mal hast du das so "im kopf" gemacht oder nutzt du für soetwas ein programm?
Hallo Oliver, das war noch Kopfarbeit! 1 ms=1000 us wären 16000 Taktzyklen 16000 geht nicht also 16 in den Vorteiler bleibt 1000 1000 geht nicht also 4 in den Vorteiler bleibt 250 Test 250 geht in ein Byte 4*16=64 ist als Vorteiler im Datenblatt. also Prescale 64 und nachladen 256-250=6 gruß Hans
Oliver D. wrote: > Ja, es geht um einen Mega8. > CTC gibts aber doch nicht für Timer 0, oder? Beim ATmega8 noch nicht. Bei allen neueren AVRs schon. Kannst ihn ja ggf. durch einen ATmega88 ersetzen. Das mit dem Nachladen in der ISR hat immer den Nachteil von Jitter, je nachdem, wie hoch die restliche Interruptbelastung noch ist.
>Das mit dem Nachladen in der ISR hat immer den Nachteil von Jitter, >je nachdem, wie hoch die restliche Interruptbelastung noch ist. Oder, ob im Programm mit Interruptsperren gearbeitet wird!
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.