Hallo, ich möchte gerne per Timer mit Prescaler 64 aus dem 8MHz Takt eines ATmega8 ein 125khz Takt an einen Pin herausführen. Ich dachte immer es sei möglich passend zum Timer OC1B "mitschwingen" zu lassen, kann es aber jetzt beim besten willen nciht mehr hinbekommen... Geht das so garnicht, bzw. muss ich manuell per Interrupt-Handler einen Pin auf Low/High schalten? Danke, Julian
Das was Du vorhast, geht zwar im Prinzip (also was das hardwaremäßige Umschalten eines Portpins durch die Compare-Einheit angeht), aber nicht mit den von Dir genannten Einstellungen. Die Compare-Einheit kann im CTC-Modus (den sollte man für sowas verwenden, wenn das Signal nicht pulsbreitenmoduliert werden soll) den Pin nur toggeln (also umschalten). Pro Periode des Ausgangssignals sind aber zwei Umschaltungen nötig. 8 MHz / 64 sind aber schon 125 kHz, was bedeutet, dass mit der Prescaler-Einstellung die maximal mögliche Frequenz am Output-Compare-Pin 125 kHz / 2, also 62,5 kHz beträgt. Abgesehen davon muss der betreffende Pin selbstverständlich als Ausgang konfiguriert sein. Wenn das der Fall ist, sollte das eigentlich funktionieren (z.B. ohne Prescaler und 31 im Compare-Register). EDIT: Hatte überlesen, dass Du es an OC1B machen willst. Das geht nicht so einfach, weil CTC nur mit OC1A geht. Wenn das Signal unbedingt an OC1B ausgegeben werden muss, dann musste wohl oder übel ne PWM nehmen. Und noch was: Beim nächsten Mal schickste bitte deinen bisherigen Code mit, damit man sieht, was Du da überhaupt machst.
Hallo Johannes, danke für die Tipps, ich habe das gerade mal probiert. Port OC1A ist auch ok... Habe dazu folgenden Code benutzt:
1 | DDRB = (1<<DDB1); |
2 | OCR1A = 31; |
3 | TCCR1A = (1<<COM1A0); |
4 | TCCR1B = (1 << CS10); |
5 | TIMSK |= (1<<TOIE1); // enable timer |
Damit bekomme ich allerdings genau 60Hz statt 125kHz am OC1A Ausgang. Mache ich noch etwas falsch? Danke, julian
Habe das Problem schon gefunden, hatte den CTC-Modus vergessen, muss natürlich heißen: TCCR1B = (1 << CS10) | (1 << WGM12);
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.