Hallo! Ich stehe gerade vor einem kleinen Problem und komme nicht weiter- irgendwo muss ein Denkfehler sein... Ich möchte mit einem 16-Bit-Timer ein PWM-Signal erzeugen. Da mein Controller mit 16 Mhz läuft sollte der Zähler alle 4,1ms überlaufen (65.536/16.000.000). Jetzt sehe ich aber am Oszilloskop, dass die PWM-Periode 8,2ms beträgt, also genau das Doppelte. Wo liegt der Fehler?
1 | void pwm_init() |
2 | {
|
3 | // Timer4 PWM
|
4 | //Ausgangsports setzen
|
5 | DDRE |= (1<<PE4)|(1<<PE5); |
6 | //Fast PWM, Modus 14, Prescaler 1, Kanal B und C
|
7 | TCCR3A = (1<<COM3B1)|(1<<COM3C1)|(1<<WGM32)|(1<<WGM31); |
8 | TCCR3B = (1<<CS30)|(1<<WGM33); |
9 | |
10 | //Obergrenze des Zählers festlegen
|
11 | ICR3=0xFFFF; |
12 | |
13 | //PWM-Werte
|
14 | OCR3B = 16000; |
15 | OCR3C = 32000; |
16 | }
|