/*
* 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;
}