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/doc/Tutorials/PWM_FUNCTIONS_18F4550.pdf 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
>>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
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
>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.
Ok. Hab jetzt noch einiges nachgelesen und habe auch noch was im inet gefunden: http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator denn Quellcode Habe ich großteils verstanden, aber mir ist nicht klar wie genau/ was genau das macht:
1 | PR2 = 0b01111100 ; // PWM-Frequenz einstellen ,berechnung?? |
2 | T2CON = 0b00000101 ; // Was macht das? Warum gibt es kein T1CON? |
3 | CCP1CON = 0b00001100 ; // Habs im Datasheet gefunden mir ist allerdings nicht ganz klar was das ding macht |
4 | 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
so hab jetzt die Lösung:
1 | /** I N C L U D E S **********************************************************/
|
2 | #include <p18cxxx.h> |
3 | #include <pwm.h> |
4 | #include <timers.h> |
5 | #include <delays.h> // für die Warteschleife |
6 | |
7 | |
8 | /** Configuration ********************************************************/
|
9 | #pragma config FOSC = HS //CPU=20 MHz
|
10 | #pragma config PWRT = ON
|
11 | #pragma config BOR = OFF
|
12 | #pragma config WDT = OFF //Watchdog Timer
|
13 | #pragma config LVP = OFF //Low Voltage ICSP
|
14 | |
15 | |
16 | /** D E C L A R A T I O N S **************************************************/
|
17 | #pragma code
|
18 | |
19 | |
20 | void main() |
21 | {
|
22 | |
23 | unsigned char dc ; |
24 | |
25 | TRISC = 0 ; // setzt den P |
26 | PORTC = 0 ; // clear PORT |
27 | /**
|
28 | PWM_Periode = Tocs x 4 x TM2PS x (PR2+1) TOCS...SchwingPERIODE des Quarzes
|
29 | // TM2PS... Vorteiler
|
30 | //PR2 = [ PWM_Periode / (4 x Tocs x TM2PS) ] -1
|
31 | |
32 | //Berechnung PR2 für 20MHz Quartz und PWM 1,5kHz und Teiler 1:16
|
33 | //PR2 = (1 / 5k/(16* 1/ 20E6*4))-1 = 62
|
34 | |
35 | |
36 | |
37 | **/
|
38 | |
39 | PR2 = 62 ; // 62 aus berechnung |
40 | T2CON = 0b00000110 ; /// Vorteiler 1:16 |
41 | CCP1CON = 0b00001100 ; // Schaltet PWM ein bit 3 & 4 |
42 | CCP2CON = 0b00111100 ; // Schaltet PWM ein bit 3 & 4 |
43 | |
44 | while(1==1) //Endlosschleife |
45 | {
|
46 | |
47 | for(dc = 0 ; dc < PR2 ; dc++) |
48 | {
|
49 | CCPR1L = dc ; |
50 | CCPR2L = dc ; |
51 | Delay10KTCYx(10); |
52 | }
|
53 | for(dc = PR2 ; dc > 0 ; dc--) |
54 | {
|
55 | CCPR1L = dc ; |
56 | CCPR2L = dc ; |
57 | Delay10KTCYx(10); |
58 | }
|
59 | }
|
60 | |
61 | }
|
Grüße Lukas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.