Microchip C18 PWM (PIC18F4550)

Persönliche Seite #1322378
Lesenswert?

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
Persönliche Seite #1322605
Lesenswert?

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
Persönliche Seite #1322915
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren