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.
Alex schrieb: > doch der 16bit läuft nur halb so schnell. Bei Phasenrichtiger PWM ist das z.B. so. Der zählt in einem Zyklus eben hoch und wieder runter. Du betreibst den aber im CTC-Modus? Stimmt auch der Vorteiler?
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?
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.
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.