# Frecuencimetro pantalla lcd, pic 16f84a



## ina85 (Mar 2, 2009)

buenas noches...les escribo pq estoy monmtando un frecuencimetro lcd con la implementacion del pic 16f84a.
en la red he encontrado algunos diseños incluso con sus programas...pero...mi duda esta en q el mio debe medir hasta 500 hz solamente, y poseer base de timpo de 500 hz.

quisiera q me ayudaran en cuanto a esto por favor ya q soy novata en el uso de pics..

http://es.geocities.com/ea5chq/frecuencimetro_digital_lcd.htm 


 en esta pagina esta el codigo fuente q tngo pensado utilizar,,, debo ajustarlo para mis requerimientos (medir hasta 500 hz solamente, y poseer base de timpo de 500 hz.)

el cosdigo esta al final de la pagina..

de verdad estoy un poco desesperada pq soy novata en el tema..

agradezco cualquier ayuda gracias



```

```


----------



## cristian_elect (Mar 3, 2009)

Frecuencimetro que mida señales digitales nada mas.


----------



## ina85 (Mar 4, 2009)

no, mas bien crero q solo señales analogicas


----------



## cristian_elect (Mar 5, 2009)

Con pic16f84 solo se puede construir frecuencimetro analogo al menos que le agrege circuitos extras.


----------



## ina85 (Mar 5, 2009)

no se a q te refieres con frecuencimetro analogo


...necesito un frecuencim etro q mida frecuencias de señales analogicas....en la primera hoja explique bien


----------



## cristian_elect (Mar 5, 2009)

Aqui te doy un ejemplo simulado en proteus


----------



## mcrven (Mar 5, 2009)

ina85 dijo:
			
		

> buenas noches...les escribo pq estoy monmtando un frecuencimetro lcd con la implementacion del pic 16f84a.
> en la red he encontrado algunos diseños incluso con sus programas...pero...mi duda esta en q el mio debe medir hasta 500 hz solamente, y poseer base de timpo de 500 hz.
> 
> 
> ...



La verdad es que es sorprendente tu propuesta, amiga.

En general, el problema de estos instrumenteos reside en lograr que lean frecuencias altas y muy altas.
Sin embargo, tampoco sé cual es el problema para limitar "algo" este frecuencímetro. Si lees con cuidado, verás que sólo manteniendo Q2 instalado tal cómo lo muestra el diagrama original, queda limitado a un máximo de 500KHz (1Hz ~ 500KHz).
Con eso tienes resuelto tu problema. Si mide más de 500 Hz... Mejor qué sobre... ¿O no?

Ahora, lograr que un PIC funcione con una base de tiempo de 500Hz... Sería otra cosa.
Para lograr conciliar tus límites deberás rehacer muchas cosas. No creo que alguien se moleste en diseñar un instrumento tan limitado. Así que creo que deberás hacerlo tú misma, desde cero.

Saludos:


----------



## ina85 (Mar 7, 2009)

se que el rango de frecuencia es limitado, pero es lo que me exigen

podrian explicarme a q se refiere base de tiempo?gracias


----------



## cristian_elect (Mar 7, 2009)

Es el tiempo que se toma la muestra y eso da la resolucion de la medicion para 500Hz se toma tiempo de muesta a 1s para que salga la medicion hasta las unidades. En caso de Mhz la base de tiempo son milisegundos cuya resolucion es hasta el mil.
Del ejemplo anterior hay una correccion esta en hex


----------



## Oslo (Mar 23, 2010)

Al parecer ya no le dieron seguimiento a este tema. Pero para dar mi opinion, es facil hacer un frecuencimentro con un PIC16F84A. utilizas la entradas RA4 como contador de impulsos. Y como comentaban utilizan una base de tiempo de 100ms para poder medir frecuencias que vayan desde los 10Hz hasta los 2.55KHz. Les anexo el programa y la simulacion en proteus.. Saludos

estoy viendo que hay un pequeño problema. estan recorridos los numeros abra que modificarse con las subrutinas de BIN a BCD


----------



## allinpop (Mar 28, 2010)

Arme el frecuenciometro FR50 y intento meterle señales digitales pero no muestra mas que F= y nada, FR50 y BT= nada. Ayudarme por favor


----------



## Oslo (Mar 29, 2010)

Hola allinpop...   que intentas hacer??? 

Que deseas medir??


----------



## jubiloso (May 1, 2010)

Hola a todos, he visto que  INA85  quiere construir un frecuencimetro y por lo que he leido parece ser que hay algunas pegas (por ser frecuencias muy bajas), en mi caso os dire que tengo casi todo preparado para construir un frecuencimetro de precision (de 0  a  500 ciclos) con el PIC 16F628 pero me falta programarlo, la señal a meter es digital, lo quiero hacer con un PIC, el cristal de cuarzo es de 20 MHz. y lleva un condensador ajustable, , no se si sera pedir mucho, pero mi peticion es,  si hay alguien que tenga el programa  ó  lo pudiera hacer, no se programar, tengo un amigo que sabe meter los datos en el PIC (el tampoco sabe programar), en espera de noticias y dando las GRACIAS a todos por adelantado y mis mejores saludos desde España.


----------



## patron789 (Sep 30, 2010)

Hola a todos tengo el codigo de este frecuenciometro y compila bien pero cuando lo monto en proteus no muestra nada en la lcd me gustaria saber si alguno de ud sabe el por que sucede esto y si lo montan en proteus y funciona pues les agradeceria me enviaran el archivo o un imagen

Hola a todos tengo el codigo de este frecuenciometro y compila bien pero cuando lo monto en proteus no muestra nada en la lcd me gustaria saber si alguno de ud sabe el por que sucede esto y si lo montan en proteus y funciona pues les agradeceria me enviaran el archivo o un imagen

```
#include    <16f877a.h>
#device adc=10 // Configuracion del Analo. a 10 bits
#fuses      XT
#fuses      NOWDT
#fuses      NOPROTECT
#fuses      PUT
#use        delay    (clock = 4000000) //Definimos el valor del Crystal
#include "LCD.C"   // Cargamos la libreria del LCD
 
int cont1,cont2; // Declaracion de variables
int32 ppm = 0;
float algo;
 
#int_EXT    // Configuracion de interrupciones externas
void EXT_isr()
{
 disable_interrupts(int_EXT);
 enable_interrupts(int_EXT);
 ++ppm;
}
#int_timer0   // Configuracion de las interrupciones internas
void TIMER0_isr()
{
 set_timer0(0);
 ++cont1;
 if (cont1 == 245)  // Aproximadamente es un Segundo por desbordamiento de banderas
 {
    cont1 = 0;
    ++cont2;
 }
}
void presenta (void)  // presentacion de incio al encender el PIC
{
 lcd_gotoxy(6,1);
 lcd_putc("medida");
 lcd_gotoxy(6,2);
 lcd_putc("Frecuencimetro..");
}
void main()
{
 
 set_tris_a(0xff);  // configuracion de las salidas y entradas
 set_tris_b(0x01);
 set_tris_c(0x00);
 set_tris_d(0x00);
 set_tris_e(0x00);
 enable_interrupts(GLOBAL|INT_EXT|INT_TIMER0); // Habilitamos las interrupciones
 ext_int_edge (L_TO_H);
 setup_timer_0(RTCC_DIV_16);
 output_c(0);
 lcd_init(); //Inicializamos el LCD
 presenta();  // Llamadod e la funcion presenta
 while(TRUE)
 {
    if (cont2 == 1)
      {
      cont2 = 0;
      cont1 = 0;
      algo=ppm/1;
      lcd_putc("\f");
      lcd_gotoxy(6,1);
      printf (lcd_putc, "# Pulsos: %ld",ppm);
      delay_ms(500);
      lcd_gotoxy(6,2);
      printf (lcd_putc, "Frecuencia:%f%%",algo);
      delay_ms(500);
      ppm = 0;
      algo = 0;
}
}
}
```


----------



## HANS MARTINEZ (Sep 9, 2011)

hola amigos, estoy haciendo un proyecto de un frecuencimetro q llegue hasta 450 mhz, necesitoo ayuda en cuestion de pic, alguien se anima


----------



## Chico3001 (Sep 9, 2011)

Ningun PIC llega a esa frecuencia...


----------



## bondadoso (Sep 14, 2011)

en esta pagina viene un frecuencimetro con 16f84  llega a 35mhz tambien esta el hex. alguien que me saque de dudas se puede medir esos 35mhz con un pic????

http://www.foxdelta.com/products/fc1.htm


----------



## retrofit (Sep 14, 2011)

bondadoso dijo:


> en esta pagina viene un frecuencimetro con 16f84  llega a 35mhz tambien esta el hex. alguien que me saque de dudas se puede medir esos 35mhz con un pic????
> 
> http://www.foxdelta.com/products/fc1.htm



En realidad tienen dos modelos, uno que llega hasta 400 Mhz y otro a 3.5Ghz
Es posible medir estas frecuencias con un PIC ya que se emplean integrados divisores.
En el modelo de 400 Mhz utilizan el MC12080 que puede divir entre 10/20/40/80 selecionable por medio de unos Micro-Interruptores.

Saludos.


----------



## bondadoso (Oct 12, 2011)

estoy implementando un frecuencimetro de la siguiente manera, genero una señal de 1 hz, que entra a rb7 del pic, y la señal a medir la frecuencia a rb0 que es donde esta la interrupcion externa y esta se activa mientras esta el pulso positivo y se incrementa un contador y en el pulso negativo se imprime el valor del contador en la lcd y se pone contador en cero. el programa lo he revisado mil veces pero me da de frecuencia=0 adjunto el programa y el archivo en proteus. 


```
/*
this program is a frecuency counter*/
#include <18f2525.h>
#fuses XT,NOWDT,PUT,NOWRT,NOPROTECT,NOLVP
#use delay(clock= 4000000)
#use fast_io(B)
#include <flex_lcd.c>
long i=0;
long c=0;
#INT_EXT
void EXT_isr(void){
         i++;
}
void main(){
   set_tris_B(0xff);
   port_b_pullups(FALSE);
   lcd_init();
   while (TRUE) {

      i=0;
      disable_interrupts(int_ext);
      disable_interrupts(GLOBAL);
      lcd_gotoxy(1,1);
      printf(lcd_putc,"HZ=%Lu",c);
      while(input(PIN_B7)==1){
         enable_interrupts(int_ext);
         ext_int_edge(L_TO_H);
         enable_interrupts(GLOBAL);
         c==i;      
      }
   }
}
```


----------



## bondadoso (Oct 13, 2011)

bueno al archivo de proteus hay que conectarle un generador de funciones con señal cuadrada amplitaud 5v y de unos 10khz porque guarde el diagrama en la version 7.0 y no se guardo el generador ni el osciloscopio, necesito que cuente hasta 30 khz, espero y sea posible con el pic......

ya identifique el error
esta en c==i; //creo bederia de pasar el valor de i a c pero no lo esta haciendo:enfadado:


----------



## bondadoso (Oct 20, 2011)

adjunto una nota de aplicacion de microchip donde esta el programa de un frecuencimetro de 
50 mhz en ensamblador, espero que alguien que sepa ensamblador explique un poco como funciona para hacerlo en c18 para un pic182525 que es el que tengo.


----------



## leo625 (Nov 19, 2011)

Saludos, es la primera vez que escribo en el foro, se podria decir que soy nuevo, aunque mi cuenta ya tiene años de creada . 
Bueno respondiendo a tu inquietud, si revisas la hoja de datos del microcontrolador verás en las ultimas hojas el cuadro: "TIMER0 AND TIMER1 EXTERNAL CLOCK REQUIREMENTS", que son las caracteristicas de los contadores del pic, ahi verás claramente que el mínimo ancho de pulso que puede medir el timer0 es de 10ns y el timer1 es de 30ns(timer0 es mas preciso); si utilizas el timer0 como contador extern, entonces podrás medir como máximo un periodo de 20ns, esto equivale a 50Mhz, esto en teoria y dependerá del pic en particular, algunos alcanzan mucho mas(60, 70Mhz).
Existen varias tecnicas, unas mas complejas que otras para hacer hacer un frecuencimetro usando el TMR0.
Ahora con respecto a la nota de microchip; utiliza una tecnica para alcanzar a medir altas frecuencias sin perder mucha resolucion, y consiste en usar el TMR0 y su preescaler, de manera que al final de la cuenta unes los dos valores que obtengas del TMR0 y el preescaler, para obtener el conteo exacto. Tanto el TMR0 como su preescaler tienen un tamaño de 8bits de manera que juntos hacen un contador de 16 bits, de manera que los dos juntos pueden contar hasta 65,536 cuentas(Hz).
Suponiendo que usas el preescaler a su maximo valor que es 256, entonces cada 256 cuentas el preescaler se desbordará a cero e incrementará en uno el TMR0.
Ahora, lamentablemente el valor del preescaler no se puede leer por software ; pero de nota de microchip AN592, muestra la unica tecnica para leer el valor del preescaler y consiste en usar un pin mas del pic.
Suponiendo que estas usando ademas del TOCKI, el pin RA3; inicialmente declaras como entrada el pin RA3, una ves terminado el tiempo de medicion declaras como salida el pin RA3 y lo pones en bajo, esto anulará  la señal que estas midiendo. Una ves llevado a bajo el pin RA3, comienzas a hacer transiciones de alto a bajo en el pin RA3, y revisas si el TMR0 se ha incrementado en cada transicion, si no continúas hasta que se incremente el TMR0, una ves detectado el incremento del TMR0, lo que tienes que hacer(tienes que usar preescaler a 256) restar a 256 el numero de transiciones que hiciste en el pin RA3 para que se incremente el TMR0.
Esto es así:
Valor del preescaler = 256 - N(número de transiciones de H-L en el pin RA3).
Luego concatenas el valor de TMR0 con el valor del preescaler para obtener la cuenta real.
Si quieres mas precicion puedes usar la interrupcion del TMR0 de manera que cada ves que se desborde el TMR0, incrementes un tercer registro, uniendo este con el TMR0 y el preescaler obtienes un contador de 24 bits de manera que puedes contar hasta 16,777,216 cuentas(hz) con un tiempo de conteo de 1 segundo.
Ahora toda la explicacion que te he hecho es para un pic 16F , no conozco mucho los 18F, pero supongo que tambien se puede aplicar.
Y si no te quieres complicar con los codigos y si solo quieres medir maximo hasta unos 120 khz, pues puedes usar el BASIC para pic, que tiene una instruccion que no usa el TMR0, y cuenta hasta 125KHz usando un crystal de 20MHz, de manera que en una sola linea de codigo de basic ya obtienes la cuenta . 
Yo me inicie con assembler, ahora uso tanto el basic como el C, para programar pics.
Bueno espero haberte sacado de dudas, cualquier consulta no dudes en hacerlas que estamos para apoyarnos.


----------



## SERGIOD (Nov 19, 2011)

Miren estro esta en un tema que Hizo rash yo aproveche y subi un frecuencimetro pruebenlo:
https://www.forosdeelectronica.com/...nado-electronico-19782-post530512/#post530512


----------



## leo625 (Nov 21, 2011)

Aca unas fotos de la simulacion de un frecuencimetro que usa la tecnica del AN592 de microchip.

http://imageshack.us/photo/my-images/401/1hz.png/
http://imageshack.us/photo/my-images/20/4mhz.png/
http://imageshack.us/photo/my-images/231/20mhz.png/
http://imageshack.us/photo/my-images/6/50mhz.png/
http://imageshack.us/photo/my-images/651/125hz.png/
http://imageshack.us/photo/my-images/710/500khz.png/




















































La resolucion es de 1 hz hasta los 16Mhz, luego es de 4 Hz hasta los 50Mhz. 
En la simulacion, solo hay un pequeño error de 4 hz cuando se mide una señal de 50 Mhz, lo cual demuestra lo preciso que es el usar esta tecnica de leer el preescaler, el programa no esta escrito en ensamblador, nisiquiera en C, esta escrito en un modesto BASIC, y solo ocupa menos de 500 palabras de memoria;  si pues aunque usted no lo crea!.


----------



## Tom sawyer JCHL (Nov 22, 2011)

buenas , nececito medir el periodo de señales pequeñas hasta 5hz en un at89c52, pero tengo un problema, realize el programa midiendo el numero de pulsaciones por segundo, y no es nada preciso para mis requerimientos,asi q decidi hacerlo midiendo el periodo, ¿alguna idea?


----------



## DJ DRACO (Nov 22, 2011)

Para el caso del amiguillo que quiere medir unos 450MHz...no se podría implementar un CD4040 y usar la salida en la que divide por 12 por ejemplo?

Así tendríamos a la salida unos 37,5MHz...ahi algunos pic's que trabajan hasta 40MHz...deberian funcionar

o no?


----------



## J2C (Nov 22, 2011)

DJ Draco

Con *viento intergalactico* a favor puede ser que un CMos como el CD4040 llegue a los 10 MHz y tu le pides que acepte un clock de 450 MHz !!!!.



Saludos, JuanKa.-


----------



## DJ DRACO (Nov 22, 2011)

jajaja mi campo no es el de altas frecuencias...

sólo decía...


----------



## J2C (Nov 22, 2011)

Para adecuar frecuencias tan altas y mayores se usan divisores con la técnica ECL mucho mas costosos que los CMOS y los TTL F.

DJ Draco tiran cosas asi solo confunde mas a los jovenes que recien comienzan.



Saludos, JuanKa.-


----------



## DJ DRACO (Nov 22, 2011)

Qué es ECL?
Podrias explicarme?


----------



## J2C (Nov 22, 2011)

DJ Draco

Como no, empeza por aqui: http://es.wikipedia.org/wiki/Emitter-coupled_logic que esta en castellano y sino por http://en.wikipedia.org/wiki/Emitter-coupled_logic en ingles un poco mas desarrollado el tema.



Saludos, JuanKa.-


----------



## SERGIOD (Nov 22, 2011)

SERGIOD dijo:


> Miren estro esta en un tema que Hizo rash yo aproveche y subi un frecuencimetro pruebenlo:
> https://www.forosdeelectronica.com/...nado-electronico-19782-post530512/#post530512



Ahora esta sin clave 
revisenlo:
https://www.forosdeelectronica.com/posts/584284/


----------



## leo625 (Nov 22, 2011)

El programa se ese frecuencimetro está en el libro microcontroladores de cekit.


----------



## SERGIOD (Nov 22, 2011)

leo625 dijo:


> El programa se ese frecuencimetro está en el libro microcontroladores de cekit.



Pues yo no tengo ese libro que dices y seguro que como yo hay muchos que no lo tienen  es mas practico subir la informacion al foro y que todos los foreros lo descarguen si lo desean


----------



## leo625 (Nov 22, 2011)

Mas tarde subiré el codigo del programa, para que lo vean; que por cierto esta muy bien explicado en ese libro.


----------



## leo625 (Nov 22, 2011)

Frecuencimetro del libro de microcontroladores cekit


----------



## SERGIOD (Nov 22, 2011)

leo625 dijo:


> Frecuencimetro del libro de microcontroladores cekit



Bueno gracias por la información bajando


----------

