ATmega8 CLK/timer1 an OC1B

Gast #743497
Lesenswert?

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
#743628
Lesenswert?

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.
Gast #743755
Lesenswert?

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

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