-
PWM mit PIC18F4550
Hallo zusammen!
Ich habe folgendes Problem mit einem PIC18F4550:
Ich nutze den PWM- Ausgang, also den Timer3 und möchte eine PWM-
Frequenz von 20kHz erzeugen. OSzillator ist ein 20MHz- Quarz. Es ist
kein Vorteiler eingestellt, sodass bei der Einstellung des Registers PR2
= 255 eigentlich die Frequenz von 20kHz erreicht werden sollte (20MHz/4
= 5MHz; 5MHz/(255+1) = 19,53kHz) aber das gemessene PWM- Signal besitzt
eine Frequenz, die nur ein viertel dessen beträgt, also 4,88kHz. Woran
kann das liegen?
-
Hi
PICs sind so konstruiert, dass der Interne Arbeitstakt, als auch der Takt mit dem der Timer aufgefüllt wird, ein Viertel vom externen Takt beträt.
Mehr dazu sollte im Datenblatt stehen.
greez
-
Das ist klar. Wie du in der Berechnung sehen kannst ist der Oszilator- Takt durch vier geteilt, was dann den Arbeitstakt des PIC darstellt. Diese 5MHz geteilt durch den Wert, der im PR2- Register des Timers steht sollte die Frequenz der PWM ergeben... ist es aber nicht. Wo könnte der Fehler liegen?
-
Es gibt noch einen Post-Scaler. Zumindest beim 18F452. Vielleicht ist der bei dir gesetzt?
-
Nein. Dieser wird außerdem nicht für die PWM benutzt.
-
Du schriebst:
Ich nutze den PWM- Ausgang, also den Timer3 ...
PWM benutzt aber Timer 2. Liegt es daran?
-
ja natürlich... ich benutze den Timer2, habe mich nur vertippt
-
OK.
Kannst du mal den Code (oder den entsprechenden Ausschnitt) posten.
Mir fällt keine einfache Lösung mehr ein.
-
Hier der Code um die nötigen Register zu setzen:
CCP2CON = 0b00001100;
T2CON = 0b00000100;
TRISD = 0b11111110;
TRISC = 0b11111101;
PR2 = 0b11111111;
-
Wie setzt du das CCPR2L Register ?