Ok, was macht:
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Es werden in folgenden drei Registern Bits gesetzt:
- DDRB: &B00000110
- TCCR1A: &B11110001
- TCCR1B: &B00000011
Also:
- B1 und B2 werden Ausgänge (11)
- Waveform Generation Mode für Timer 1 wird WGM=&B0001
- Compare Output Mode für beide Kanäle: COM1A[1..0]=&B11, COM1B[1..0]=&B11
- Clock Select CS=&B011, das entspricht Prescaler=64
Also B1 und B2 sind Ausgänge, WGM=1 entspricht dem phasenkorrektem 8-Bit-PWM (der Timer läuft zwischen 0 und 255 hin und her).
Bei jedem Timer-Schritt wird der eigentliche Zähler mit den beiden Output Compare-Registern verglichen - bei einem Match wird das entsprechende Output-Bein manipuliert: beim Raufzählen wird das Bein gesetzt, beim runterzählen wird es gelöscht.
Der Timer läuft mit Prescaler=64, also 125kHz Schrittfrequenz los.
Dein Controller läuft mit den 8MHz des internen Oszillators.
Der Timer ist mit einem Vorteiler von 64 an den Systemtakt gekoppelt.
Die Schrittfrequenz des Timers liegt also bei 8000000Hz/64=125000Hz.
Der Timer läuft im Phasenkorrekten 8-Bit-PWM. Das PWM ignorieren wir erstmal, bleibt Phasenkorrekt und 8 Bit.
Der Timer zählt also immer zwischen 0 und 255 (=8Bit) hin und her (=phasenkorrekt):
0→1→2→3→4→5→6→...→253→254→255→254→253→252→...→6→5→4→3→2→1→0→1→2→3→...→253→254→255→254→253→252→...
klar?
Das TOV-Flag wird jedesmal automatisch gesetzt, wenn der Timer 0 erreicht. Das ist also alle 510 Schritte der Fall (255 rauf plus 255 runter). Folglich wird das TOV gesetzt mit einer Frequenz von 125000Hz/510=245,1Hz.
Das TOV soll jetzt in der Hauptschleife in Software ausgewertet werden, die neue LED jedesmal getoggelt werden. Eine volle An-Aus-Periode benötigt zweimal tolggeln, folglich würde die LED mit einer Frequenz von 245,1Hz/2=122,55Hz blinken.
Entweder Du hast deutlich flinkere Augen als ich, oder wir müssen was ändern. Am einfachsten wäre es, den Vorteiler (Prescaler) zu ändern.
Timer1 bietet folgende diskrete Vorteiler an:
- 0 Timer steht (klar, ist kein echter Teiler)
- 1
- 8
- 64
- 256
- 1024
Bei Vorteiler 256 hätten wir logischerweise ein viertel der etwa 120Hz, also immerhin noch 30Hz...
Vorteiler 1024 liefert 8000000Hz/1024/510/2=7,6Hz - das sollte als flimmern wahrnehmbar sein
Wir verwenden also Vorteiler 1024 statt 64:
Config Timer1 = Pwm , Prescale = 1024 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Du müßtest also diese Zeile im Initialisierungsbereich (also vor der Schleife) einfügen.
Außerdem sollte dort auch C3 für die LED initialisiert werden (wie bei der LED an D7), die LED an C3 sollte initial bereits vor dem Schleifeneintritt leuchten.
Außerdem sollte wie gesagt der gesamte bisherige Code in der Schleife erstmal auskommentiert werden (also funktionstechnisch 'ne leere do..loop.
Wenn Du das Programm soweit erfolgreich compiliert hast testen und hier posten.
Beim Test müßten also beide LEDs dauerleuchten, es sollten keine UART-Ausgaben erfolgen und keine Reaktionen auf UART-Eingaben.
Ausführung...
P.S.: Achtung! Das Timer-Config macht die beiden OC-Beine zu Ausgängen und läßt die zappeln. Stelle als sicher, daß an den beiden Beinen (B1 und B2) nichts weiter angeschlossen ist/berührt wird.