www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik Microchip C18 PWM (PIC18F4550)


Autor: Lukas B. (lukas-1992) Benutzerseite
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
Autor: holger (Gast)
Datum:

>Ich möchte Am Port B 0 eine PWM

PortB0 ist kein PWM Ausgang.
Autor: Lukas B. (lukas-1992) Benutzerseite
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
Autor: Lukas B. (lukas-1992) Benutzerseite
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
Autor: holger (Gast)
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.
Autor: Lukas B. (lukas-1992) Benutzerseite
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
Autor: Lukas B. (lukas-1992) Benutzerseite
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net