Hola Muchachos: Tengo un problemita y necesito de su solidaria ayuda. Abajo coloque un codigo que encontre de como configurar un PWM para un 16f877. Lo que estoy necesitando es hacer esto mismo pero para un 16f819 y que me largue una frecuencia de 153.600Hz.
Por favor necesitaría que me digan como modificarlo para lo que necesito y si es posible alguna explicación de como se arma la formula.
Gracias
#include <16f877.h>
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#use delay(clock=4000000)
void main(void){
long duty_PWM1, duty_PWM2;
// Para cristal de 4 mhz, frecuencia de 20 khz ,
// T2DIV set to 1
// Para calcular la frecuencia:
// (4/frecuencia cristal)*T2_DIV*(periodo+1)
// (4/4000000)*1*(49+1)=0.00005seg
setup_timer_2(T2_DIV_BY_1, 49, 3);
// seleccionamos PWM para los dos módulos CCP
setup_ccp1 (CCP_PWM);
setup_ccp2 (CCP_PWM);
// cargamos el duty cicle para cada PWM. La frecuencia es igual para
ambas, 20KHz.
// Para calcular el tiempo en nivel alto, dado que usamos un LONG, sería:
// Valor*T2_DIV*(1/frecuencia del cristal). Si se usa un valor tipo INT
en lugar
// de LONG se calcularía multiplicando la fórmula por 4:
Valor*T2_DIV*(1/frecuencia del cristal)*4
duty_PWM1 = 100; // 0.000025seg/(1*(1/4000000))=100, que es el valor a
cargar. Duty 50%
duty_PWM2 = 200; // 0.000050seg/(1*(1/4000000))=200. Si te fijas, con
20KHZ el T=50us,
// que es lo que se ha puesto para el duty, osea, todo.
// Por tanto la señal será continua a 5v. Duty cicle
100%
set_pwm1_duty(duty_PWM1);
set_pwm2_duty(duty_PWM2);
while(1){ //bucle infinito.
}
}