I have been trying to create a PWM in CCS using PIC16F648A, natry ako mag simulate sa proteus pero wala lumalabas sa RB3.INTRC ang gamit ko, may nakapagtry na ba gumawa ng PWM using the builtin hardware ng PIC.Thanks.
glen, nahirapan din akong gawin yan sa CCS C. di ko nga nagawa talga... ilang beses na namin yan kinulit ni Rafft. di talga...I ended up using HitechC. para lang mapagana ang PWM ng PIC16F628A.Subukan ko kayan register to register ang usapan... heheh
#include <16F648A.h>#FUSES NOWDT,INTRC_IO,NOPUT,NOPROTECT,NOBROWNOUT,MCLR,NOLVP,NOCPD #BYTE CCP1CON=0x17#BYTE T2CON=0x12#BYTE PR2=0x92#BYTE CCPR1L=0x15#bit OSCF=0x8E.3#bit TRISB3=0x86.3#bit CCP1X=CCP1CON.5#bit CCP1Y=CCP1CON.4 #bit CCP1M3=CCP1CON.3#bit CCP1M2=CCP1CON.2#bit CCP1M1=CCP1CON.1#bit CCP1M0=CCP1CON.0#bit TOUTPS3=T2CON.6#bit TOUTPS2=T2CON.5 #bit TOUTPS1=T2CON.4 #bit TOUTPS0=T2CON.3 #bit TMR2ON=T2CON.2 #bit T2CKPS1=T2CON.1 #bit T2CKPS0=T2CON.0void main(){ OSCF = 1; //4MHZ internal oscillator CCP1M3 = 1; CCP1M2 = 1; //CCP PWM mode T2CKPS1 = 0; T2CKPS0 = 1; //prescale 1:4 //given: 5Khz PWM //PWM period = [PR2 + 1]*4*Tosc*TMR2prescale //1/5k = (PR2+1)*4*(1/4M)*4 //PR2 + 1 = 4000000/(5000*4*4) //PR2 = 49 PR2 = 49; //duty cycle = 50%; PR2 *2 = 98 = 0b1100010 CCPR1L = 0b00011000; CCP1X = 1; CCP1Y = 0; TRISB3 = 0; //RB3 as output TMR2ON = 1; //timer2 ON while(TRUE);}
void main(){ setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_16,124,1); setup_ccp1(CCP_PWM); set_pwm1_duty(512); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); // TODO: USER CODE!! while(1);}
#include <16F877.h> #fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP #use delay(clock = 4000000) main() { output_low(PIN_C1); // Set CCP2 output low output_low(PIN_C2); // Set CCP1 output low setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM setup_ccp2(CCP_PWM); // Configure CCP2 as a PWM setup_timer_2(T2_DIV_BY_16, 124, 1); // 500 Hz set_pwm1_duty(31); // 25% duty cycle on pin C2 set_pwm2_duty(62); // 50% duty cycle on pin C1 while(1); // Prevent PIC from going to sleep (Important !) }
#include <16F648A.h>#FUSES NOWDT,INTRC_IO,NOPUT,NOPROTECT,NOBROWNOUT,MCLR,NOLVP,NOCPD void main(){ setup_oscillator(OSC_4MHZ); setup_timer_2(T2_DIV_BY_4,249,1); set_pwm1_duty(512); setup_ccp1(CCP_PWM); set_timer2(0); //add this after setting everything for PWM. //this is PR2 while(TRUE);}