OCRnA vom Compiler berechnen lassen.

Gast #2860260
Lesenswert?

Hallo, wie berechne ich den OCRnA wert für einen 16bit Timer?
Ich brauche die Formel wo ich den Wert in Klartext als Zeit angebe.
Für einen 8bit Timer sieht sie so aus:

OCR1A = F_CPU / 1024.0 * 10e-3 - 0.5;        // 10ms interrupt

Funktioniert einwandfrei bei 8bit Timer, doch der 16bit läuft nur halb 
so schnell.

Danke im Voraus für die Hilfe.
Gast #2860386
Lesenswert?

Hi, so sieht die Initialisierung für den Timer aus:

TCCR1A = 1<<WGM11;                                    // Mode 2. CTC
TCCR1B = 1<<CS12 | 1<<CS10;                           // F_CPU / 1024
OCR1A = F_CPU / 1024.0 * 10e-3 - 0.5;                 // 10ms interrupt
TIMSK1 = 1<<OCIE1A;

Ich meine ist alles richtig eingestellt, oder?
#2860419
Lesenswert?

Alex schrieb:
> TCCR1A = 1<<WGM11; // Mode 2. CTC

Das stimmt nicht, das ist Mode 2, beim 16bit-Timer aber Phasenkorrekte 
9bit-PWM. Was du brauchst ist Mode 4, CTC mit TOP in OCR1A Dazu muss nur 
WGM12 gesetzt sein. Dieses Bit ist aber in TCCR1B. Hab jetz auf Verdacht 
im DB des Mega16 geschaut.

mf

PS: Es gibt da noch Mode 12, CTC mit TOP in ICR1. Da kann man dann noch 
beide OCR-Einheiten verwenden, weil OCR1A nicht für TOP gebraucht wird.

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