Primero, PR2 es un registro de 8bits, así que puede tomar valores entre 0 y 255.
\mathrm{PeriodoPWM}=\frac {1}{\mathrm{FrecuenciaPWM}}
\mathrm{PeriodoPWM}=\frac {1}{2000}=500us
Ahora, despejando de :
\mathrm{PeriodoPWM}=\left(\mathrm{PR2} + 1 \right)\cdot 4\cdot\mathrm{Tosc}\cdot\mathrm{TMR2 Preescaler}
sabiendo que:
Tosc=50ns=1/20MHz, y como PR2 tiene que estar entre 0 y 255, Preescaler debe ser 1:16, entonces:
\mathrm{PR2}=\left(\frac{\mathrm{PeriodoPWM}}{4\cdot\mathrm{Tosc}\cdot\mathrm{TMR2 Preescaler}}\right) -1 =155
El timer debe ser configurado:
setup_timer_2(T2_DIV_BY_16,155,1);
Y para configurar los módulos:
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
Ahora a apartir de la siguiente formula podemos determinar el rango del Ciclo de Trabajo.
\mathrm{CTPWM}=\left(\mathrm{CCPR1L:CCP1CON<5:4>}\right)\cdot\mathrm{Tosc}\cdot\mathrm{TMR2 Preescaler}
Osea, para 100% CTPWM=500us. Entonces:
\mathrm{CCPR1L:CCP1CON<5:4>}=\frac{\mathrm{CTPWM}}{\mathrm{Tosc}\cdot\mathrm{TMR2 Preescaler}}=625
Entonces:
set_pwm1_duty(625); // Ciclo de trabajo al 100%
set_pwm2_duty(625); // Ciclo de trabajo al 100%