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  | }
 |