//arlotto 2006 : Démonstration d'utilisation //de la pwm par le module CCP1 (sortie sur RC2) // S3 produit un signal 4Khz 50% sur RC2 (pwm1) // S2 produit un signal 4Khz 25% sur RC2 (pwm1) // on peut l'entendre sur la carte picdem+ // en plaçant le cavalier J9 // Calcul de la période : PWMPeriod = (N+1).4.Tosc.Ktrm2 // Ktrm2 = rapport de division du timer 2 // avec Ktmr2=1 et Fosc = 4 Mhz on a : // Pour 4kHz PWMPeriod = 0.25ms = (N+1).4.0.25us // d'où N = 249 // Rapport cyclique : Pour 50% => Temps à l'état haut = 0.125ms // d'où 0.125ms = = R . Tosc = R . 0.25us => 500 // Pour 25% => R = 250 // En fait 100% correspond à 4.(N+1) => // R = (pourcentage entre 0 et 100) . 4(N+1)/100 // On passe N à la fonction OpenPWM1() // On passe Ktmr2 à la fonction OpenTimer2() // Ensuite on peut changer le rapport cyclique en passant // R à la fonction SetDCPWM1() #include #include // pour fonctions pwm #include // pour fonction timer2 // configuration PICDEM2+ quartz #pragma config OSC = HS #pragma config WDT = OFF #pragma config LVP = OFF #pragma config PBADEN = OFF #define BtnS3 PORTBbits.RB0 #define BtnS2 PORTAbits.RA4 #define R50 500 // 50% #define R25 250 // 25% #define R0 0 // 0% #define N 249 // 4Khz à Fosc =4Mhz void main(void){ OpenPWM1(N); OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 ); for( ;; ) { if(BtnS3 == 0 ) { SetDCPWM1(R50); } else { if(BtnS2 == 0 ) { SetDCPWM1(R25); } else { SetDCPWM1(R0); } } } }