InicioCiencia EducacionFrecuencimetro Hasta 30kHz con Timer y PIC
En este post, les mostrare una forma muy sencilla de realizar un frecuencímetro de uso general, aunque de bajas prestaciones. Un frecuencímetro es un instrumento de medición que debe realizar una cuenta en un determinado tiempo. La frecuencia en Hertz es la cantidad de veces que se repite un pulso durante el transcurso de 1s. Por ejemplo: Si durante 1s contamos 30 pulsos, la frecuencia será de 30Hz. Si durante 1s contamos 1000 pulsos, la frecuencia será de 1kHz, y así sucesivamente para cualquier valor. En este programa extremadamente sencillo aplicaremos esta misma lógica, utilizaremos el Timer1 para crear un temporizador de 1s (el cual genera el lapso de tiempo para contar pulsos) y durante este lapso de 1s se contaran los pulsos que ingresan en la entrada T1CKI (Timer 1 External Clock Input). La forma de pensar esta lógica será la siguiente: 1) Encendemos el Timer 2) Demoramos 1s (el lapso de cuenta) 3) Apagamos el Timer 4) Mostramos cuantos pulsos ingresaron por T1CKI durante ese segundo. Como pueden ver en el programa la demora no es de 1000ms (1s) sino que es de 250ms, esto es porque en la configuración del Timer1 tenemos el divisor (preescaler) por 1, si quieren poner la demora de 1000ms tienen que configurar el preescaler como divisor por 4, esto quedaría: T1_DIV_BY_4, pero el refresco del LCD en mostrar la cuenta seria de 1s por ende es un poco lento y perdemos muestras, entonces al configurar el preescaler por 1 y esperar 250ms obtenemos el mismo resultado pero el LCD y las muestras se actualizan cada 1/4s entonces el funcionamiento será más eficiente. Claramente no es un instrumento de precisión ni mucho menos, solamente trata de explicar, mediante el uso del timer1 como temporizador, el funcionamiento básico de un frecuencímetro. El mismo está limitado en frecuencia, pero hasta los 30kHz nos mostrara una cuenta estable. Si quieren que este frecuencímetro acepte mayor frecuencia pueden poner un preescaler externo, que podría ser un circuito con FF (donde cada FF realizara una división por 2). Si utilizamos un 4017, tendremos un divisor programable de 1 a 10, donde la máxima entrada serian 300kHz que al pasar por el divisor /10 nos dará 30kHz y no tendríamos problemas en el MCU, (dentro del MCU en el printf tendremos que compensar esta división con una multiplicación por el mismo valor para que la lectura sea correcta), esto quedaría: printf(lcd_putc,"%lu Hz",pulsos*10); entonces de este modo ingresamos 300kHz al 4017, salimos con 30kHz del 4017 que ingresaran al MCU y la lectura será de 30kHz*10=300kHz. #include <16F628A.h> #FUSES NOWDT #FUSES HS #FUSES NOPUT #FUSES NOPROTECT #FUSES NOBROWNOUT #FUSES NOMCLR #FUSES NOLVP #FUSES NOCPD #use delay(clock=4000000) #define LCD_ENABLE_PIN PIN_B7 #define LCD_RS_PIN PIN_B4 #define LCD_RW_PIN PIN_B5 #define LCD_DATA4 PIN_B0 #define LCD_DATA5 PIN_B1 #define LCD_DATA6 PIN_B2 #define LCD_DATA7 PIN_B3 #include void main(){ lcd_init(); int16 pulsos; while(true){ set_timer1(0); //HAB Timer1 setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); //ON Timer1 2kHz delay_ms(250); //Demora 1/4s setup_timer_1(T1_DISABLED); //INHAB Timer1 pulsos=get_timer1(); //CONT Pulsos lcd_gotoxy(1,1); //Renglon (1,1) printf(lcd_putc,"%lu Hz",pulsos); //Muestra f } } NOTA: la redefinición de pines del display LCD se ha realizado porque se necesitaba el pin T1CKI que se encontraba dentro de los pines del LCD por defecto.
Datos archivados del Taringa! original
28puntos
452visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
1visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

s
sebabjt84🇦🇷
Usuario
Puntos0
Posts60
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.