dudas con la configuracion del timer 1 para el pic16f873

Hola a todos , estoy intentando programar con CCS el pic16f873 para utilizarlo como frecuenciometro , para ello estoy utilizado el timer1 como contador , aplicando los pulsos por el pin C0.

He escrito un par de lineas de codigo , y lo unico que he consegido es registrar frecuencias mayores a 2 Hz y pares , no se si es un problema del codigo , o del programa de simulación que estoy utilizando (proteus 6.3).

Aqui os dejo el codigo haber si pe podeis echar una mano , :( . Un saludo a todos.

void frecuencia (void){

set_timer1(0); //reseteo timer 1
setup_timer_1(T1_EXTERNAL_SYNC|T1_DIV_BY_1); //activo timer1 como contador
delay_ms(5000); //cuento durante 0.5s
setup_timer_1(T1_DISABLED);//desabilito timer 1

cuenta=get_TIMER1(); //recogo la cuenta de pulsos.
set_timer1(0);
lcd_init();

printf(lcd_putc,"pulsos min %f ",6*cuenta);
}

OBS: Queo que lo de utilizar un delay_mas(5000), no es muy optimo, ¿sería mejor utilizar el
timer0, para quear el retardo o los delay_cycles?
 
Buenas,
Tu problema es un poco de concepto,lo que ocurre es que tu espera no alcaza a contavilisar bien, programa no podra manejar frecuencias menores que 2HZ, esto debido a que la espera es de 0.5 segundos, lo que significa que con una frecuencia de 1HZ, no alcanzaria a contavilizar el pulso mientras tu terminas de esperar,
delay_ms(5000); //cuento durante 0.5s
al pic aun no le a llegado ningun dato.
Yo particularmente tengo uno con 16F873 que visualiza los datos en un LCD pero lo manejo en asembler.
cualquier cosa me escribes aqui mismo.
 
Si lo que quieres es un frecuencímetro, el propio compilador de CCS ya trae hecho uno que funciona muy bien. Está en la carpeta de ejemplos y se llama EX_FREQC.C
 
hay dos formas de hacerlo, una es utillizando el timer1 con el CCP o captura tal y como muestra el ejemplo del CCS otra forma es utilizar la entrada del pic como generador de reloj y con otro timer mirarlo cada X segundos.

Segun la frecuencia va mejor u otro metodo.

Tambien es importante trabajar con interrupciones de forma que el micro quede libre para otras tareas como visualizacion, calculos de promediado, pulsadores...


Finalmente como mas baja es la frecuencia si deseas conservar la precision debes esperar mas tiempo, uno que estube trasteando tardava casi un 1minuto en hacer una medida.
 
Atrás
Arriba