Se usa el PWM del PIC, para usarlo depende del compilador y un poco menos del PIC.. Si hoy lo tengo que hacer usaria un 16f628 o algo parecido, usaria ccs donde las funciones son:
setup_ccp1(CCP_PWM) para activar el PWM.
setup_timer_2(T2_DIV_BY_16,238,1) esto genera un pulso de 262Hz con un cristal de 4mhz, esto se puede variar segun las necesidades.
set_pwm1_duty(duty) con esto seteas el duty, no tengo los valores en la cabeza..
setup_ccp1(CCP_OFF) con esto apagas el PWM..
Para calcular todos los valores uso el proyect wizar del ccs..
Un abrazo Mariano !!