Das hier
1 | TCCR1A |= (1<<WGM11) | (1<<COM1B1) | (1<<COM1A1); // PWM, fast mode, 16 bit, non-inverting
|
2 | TCCR1B |= (1<<CS11) | (1<<CS10) | (1<<WGM12) | (1<<WGM13); // Prescaler 64
|
3 | ICR1 |= 0xFFFF;
|
ist übrigens keine so gute Idee. Du willst hier sicherlich nicht, dass
dir eventuelle 'alte' Bits in den Registern stehen bleiben, sondern du
willst hier ganz sicher, dass insbesondere die TCCR Register genau die
Bits, und nur die Bits, gesetzt hat, die du angegeben hast. Dann mach
da auch eine Zuweisung, damit sich da auf keinen Fall irgendwelche
"Altlasten" durchmogeln.
1 | TCCR1A = (1<<WGM11) | (1<<COM1B1) | (1<<COM1A1); // PWM, fast mode, 16 bit, non-inverting
|
2 | TCCR1B = (1<<CS11) | (1<<CS10) | (1<<WGM12) | (1<<WGM13); // Prescaler 64
|
3 | ICR1 = 0xFFFF;
|
Die Bits an sich sind korrekt. WGM11, WGM12 und WGM13 sind der "Fast PWM
Mode mit dem Top Wert aus ICR1". Und du setzt sie auch im korrekten
Register. Ergo muss das Problem in dem Codeteil liegen, den du nicht
zeigst, sofern wir davon ausgehen können (und nach einem Reset können
wir das), das die TCCR Register alle urspünglich den Wert 0 enthielten.