Datum:
Hallo, ich hätte eine Frage: Wie mach ich in MPLab und Microchip C18 einen Port zu einem PWM-Ausgang. Es gibt ja eine Include Datei namens pwm.h. Leider weis ich nicht wie ich den Port "übergebe". Steh voll auf dme Schlauch, und Ja ich habe Google und die Forum-Suchfunktion benutzt bin aber leider nicht fündig geworden. Hab mir dieses File angesehen: http://w3.id.tue.nl/fileadmin/id/objects/E-Atelier... leider finde ich keine Lösung für mein Problem. Ich möchte Am Port B 0 eine PWM mit 1kHz und einem (vorerst) fixem Duty von 50% ausgeben. ICh verwende einen PIC 18F4550 und einen 20MHz Quartz. Grüße Lukas
Datum:
>Ich möchte Am Port B 0 eine PWM
PortB0 ist kein PWM Ausgang.
Datum:
>>Ich möchte Am Port B 0 eine PWM > > PortB0 ist kein PWM Ausgang. Ja stimmt hab mich im Datasheet nicht genau gelesen, aber der Port RB3 müsste PWM-Fähig sein oder? Datenblatt Seite 16
Datum:
pS: Hab noch nie etwas mit PWM gemacht, ich meine mit dem PIC, also bitte nicht übel nehmen wenn ich es net gleich schnall. Grüße Lukas
Datum:
>Ja stimmt hab mich im Datasheet nicht genau gelesen, aber der Port RB3 >müsste PWM-Fähig sein oder? Ist er. Aber siehe auch das hier: assignment for CCP2 when CCP2MX Configuration bit is cleared.
Datum:
Ok. Hab jetzt noch einiges nachgelesen und habe auch noch was im inet gefunden: http://www.micro-examples.com/public/microex-navig... denn Quellcode Habe ich großteils verstanden, aber mir ist nicht klar wie genau/ was genau das macht:
PR2 = 0b01111100 ; // PWM-Frequenz einstellen ,berechnung??
T2CON = 0b00000101 ; // Was macht das? Warum gibt es kein T1CON?
CCP1CON = 0b00001100 ; // Habs im Datasheet gefunden mir ist allerdings nicht ganz klar was das ding macht
CCP2CON = 0b00111100 ; // Habs im Datasheet gefunden mir ist allerdings nicht ganz klar was das ding macht, Die LEDs die Ich angeschlossen habe leuchten nicht in "Phase", warum auch immer...
|
Vielleicht kann mir jemand helfen und mir die Fragen beantworten. Grüße Lukas
Datum:
so hab jetzt die Lösung:
/** I N C L U D E S **********************************************************/ #include <p18cxxx.h> #include <pwm.h> #include <timers.h> #include <delays.h> // für die Warteschleife /** Configuration ********************************************************/ #pragma config FOSC = HS //CPU=20 MHz #pragma config PWRT = ON #pragma config BOR = OFF #pragma config WDT = OFF //Watchdog Timer #pragma config LVP = OFF //Low Voltage ICSP /** D E C L A R A T I O N S **************************************************/ #pragma code void main() { unsigned char dc ; TRISC = 0 ; // setzt den P PORTC = 0 ; // clear PORT /** PWM_Periode = Tocs x 4 x TM2PS x (PR2+1) TOCS...SchwingPERIODE des Quarzes // TM2PS... Vorteiler //PR2 = [ PWM_Periode / (4 x Tocs x TM2PS) ] -1 //Berechnung PR2 für 20MHz Quartz und PWM 1,5kHz und Teiler 1:16 //PR2 = (1 / 5k/(16* 1/ 20E6*4))-1 = 62 **/ PR2 = 62 ; // 62 aus berechnung T2CON = 0b00000110 ; /// Vorteiler 1:16 CCP1CON = 0b00001100 ; // Schaltet PWM ein bit 3 & 4 CCP2CON = 0b00111100 ; // Schaltet PWM ein bit 3 & 4 while(1==1) //Endlosschleife { for(dc = 0 ; dc < PR2 ; dc++) { CCPR1L = dc ; CCPR2L = dc ; Delay10KTCYx(10); } for(dc = PR2 ; dc > 0 ; dc--) { CCPR1L = dc ; CCPR2L = dc ; Delay10KTCYx(10); } } } |
Grüße Lukas