# dudas con la configuracion del timer 1 para el pic16f873



## tonio (Sep 22, 2006)

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?


----------



## einsignares08 (Sep 23, 2006)

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.


----------



## nocturno (Sep 24, 2006)

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


----------



## tiopepe123 (Sep 24, 2006)

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.


----------

