Te pego una práctica sencilla que hice con el PWM, con una frecuencia cte (10khz) va aumentando y disminuyendo el duty en un bucle:
Codigo:
#include <16F877.h>
#fuses NOLVP,HS,NOWDT,NOPROTECT,PUT
#use delay(clock=20000000) // 0.2us por instruccion
#include <LCD_4x20.C>
#ORG 0x1F00,0x1FFF {} //for the 8k 16F876/7 bootloader
void main(void)
{
int i;
lcd_init();
printf(lcd_putc,"fPWM, en CCP1 10khz"
;
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_1,100,1);
while(1)
{
for(i=1;i<=99;++i)
{
set_pwm1_duty(i);
delay_ms(50);
}
for(i=99;i>=1;--i)
{
set_pwm1_duty(i);
delay_ms(50);
}
}
}