How to write a C Program PWM Library in C Programming Language ?
/* * PWM library * */ #include "pwm.h" void initPWM(uint16_t freq, uint8_t dutyCyle, uint8_t pin) { T2CON = (1<<TMR2_PS2); //PR2 = 1/(CPUCLK/freq * 16) - 1; PR2 = 249; dutyCyle *= (PR2 / 100); switch(pin) { case 1: OC1R = dutyCyle; OC1RS = dutyCyle; OC1CONSET = (1<<OC_ON) | (1<<OC_OCM1) | (1<<OC_OCM2); TRISDCLR = (1<<OC1); break; case 2: OC2R = dutyCyle; OC2RS = dutyCyle; OC1CONSET = (1<<OC_ON) | (1<<OC_OCM1) | (1<<OC_OCM2); TRISDCLR = (1<<OC2); break; case 3: OC3R = dutyCyle; OC3RS = dutyCyle; OC3CONSET = (1<<OC_ON) | (1<<OC_OCM1) | (1<<OC_OCM2); TRISDCLR = (1<<OC3); break; case 4: OC4R = dutyCyle; OC4RS = dutyCyle; OC4CONSET = (1<<OC_ON) | (1<<OC_OCM1) | (1<<OC_OCM2); TRISDCLR = (1<<OC4); break; case 5: OC5R = dutyCyle; OC5RS = dutyCyle; OC5CONSET = (1<<OC_ON) | (1<<OC_OCM1) | (1<<OC_OCM2); TRISDCLR = (1<<OC5); break; } T2CONSET = (1<<TMR2_ON); } void pwmWrite(uint8_t dutyCyle, uint8_t pin) { if(dutyCyle > 100) return; dutyCyle *= (PR2 / 100); switch(pin) { case 1: OC1R = dutyCyle; OC1RS = dutyCyle; break; case 2: OC2R = dutyCyle; OC2RS = dutyCyle; break; case 3: OC3R = dutyCyle; OC3RS = dutyCyle; break; case 4: OC4R = dutyCyle; OC4RS = dutyCyle; break; case 5: OC5R = dutyCyle; OC5RS = dutyCyle; break; } } void pwmWriteC1(uint8_t dutyCyle) { if(dutyCyle > 100) return; dutyCyle *= (PR2 / 100); OC1R = dutyCyle; OC1RS = dutyCyle; } void pwmWriteC2(uint8_t dutyCyle) { if(dutyCyle > 100) return; dutyCyle *= (PR2 / 100); OC2R = dutyCyle; OC2RS = dutyCyle; } void pwmWriteC3(uint8_t dutyCyle) { if(dutyCyle > 100) return; dutyCyle *= (PR2 / 100); OC3R = dutyCyle; OC3RS = dutyCyle; } void pwmWriteC4(uint8_t dutyCyle) { if(dutyCyle > 100) return; dutyCyle *= (PR2 / 100); OC4R = dutyCyle; OC4RS = dutyCyle; } void pwmWriteC5(uint8_t dutyCyle) { if(dutyCyle > 100) return; dutyCyle *= (PR2 / 100); OC5R = dutyCyle; OC5RS = dutyCyle; }
Learn More :
Library