Este proyecto está basado en el trabajo de IMSAI. Tomando ese trabajo como base realicé este proyecto.
En el pasado ya había realizado un frecuencímetro pero este está limitado por las características propias de los mismos. Estos no pueden medir frecuencias mayores a 15 Mhz en sus entradas. En su momento trate de buscar la manera de implementarle un divisor como el cd4040 pero terminaba trabajando con el mismo rango de frecuencia.
Las alternativas comprendían la utilización de componentes difíciles de conseguir y a veces costosos teniendo en cuenta que en el mercado hay frecuencímetros baratos de los llamados "chinos" no valía la pena la construcción y luego el agregado del divisor por que el costo termina siendo similar. Por supuesto que como tarea de practica o simplemente por el hecho de hacer un contador "retro" o por la pasión de la electrónica se puede realizar.
Con la realidad de mi país las importaciones "chinas" son muy caras para comprar y los vendedores nacionales ya no traen estos elementos para vender, sumado a que hoy en día ya necesito, necesitamos trabajar con frecuencias bastante altas.
Por todo esto desarrolle este contador o frecuencímetro basado en el integrado MB506 que es un PRESCALER que básicamente lo que hace es recibir una frecuencia entre 100 Mhz a 2.4 Ghz en su entrada y dividirla por un número.
Decidí dividir por 256 que es lo máximo que nos entrega el integrado y esto es para acceder a frecuencias altas. Para establecer la división hay que configurar los pines del integrado: SW1 y SW2.
Esto quiere decir que el diagrama que realice no tiene la opción en placa de poder cambiar por un divisor distinto a 256.
Para ver las características del MB506 les recomiendo visitar esta página:
Es un proyecto simple que requiere pocos componentes. El trabajo lo realiza este integrado y el Arduino se encarga de tomar la salida del integrado, interpretarla y mostrarla en una pequeña pantalla.
Si bien los componentes utilizados son smd no quita que se puedan utilizar componentes standar pero seguramente tendremos una desviación importante en la lectura de la frecuencia.
Entre el MB506 y el Arduino tenemos un transistor, un BC547, muy común y que puede ser reemplazado por cualquier otro de uso general con características similares. Toda esta etapa entre el MB506 y el Arduino ya viene con frecuencias bajas por lo cual se puede utilizar transistores de este tipo.
Otra cuestión a tener en cuenta es la parte de la alimentación que debe estar bien filtrada utilicen , es mi concejo, baterías y coloquen si o si los condensadores que siguen luego del 7805: C6 al C10.
Otra cuestión importante es que si planean cargar código en el Arduino y esté soldado a la placa del proyecto como en mi caso, es decir que no puedan sacarlo deben colocar un interruptor (SWA en el diagrama) para desconectar la unión con el 7805 de lo contrario al momento de conectar el cable USB para cargar código EL ARDUINO SE QUEMA.
Listado de Componentes:
Todos los condensadores no polarizados son de 0.01 uF
C10: Polarizado de 10 uF
Todos los diodos: 1N4148
R1: 1K
R2: 33K
R3: 2.2K
Interruptores: 2 a elección, sin retención.
Arduino Nano o a elección.
MB506 prescaler
Regulador 7805
Varios opcionales:
Conector RF , cables
Agregué un diodo de protección entre SWA y la entrada positiva +5v del Arduino, indicado con el nombre "Diodo".
Hay que realizar una conexión aérea con cables (jumper) entre los pines 3 y 6 del MB506. Van a ver que les queda un orificio extra sobre el pin 5 del MB506 el cual no tienen utilidad.
Utilizamos A4 y A5 del Arduino para la comunicación con el display: A4 = SDA y A5 = SCL y sobre la línea de alimentación positiva del Arduino (+5v) y del GND del mismo tenemos para sacar la alimentación para el display.
Necesitamos tener varias librerías algunas ya vienen por default y otras hay que cargarlas.
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <FreqCount.h>
#include <EEPROM.h>
El código es muy sencillo y prácticamente todo el trabajo lo realiza la librería "FreqCount.h" tomando las lectura en D5 del Arduino.
Para aquellos que quieran experimentar con el código un consejo: Se está utilizando la librería "EEPROM.h" para almacenar valores en la memoria eprom del Arduino esta memoria tiene una vida útil de 100.000 escrituras por lo cual si por ejemplo meten el código utilizado para la escritura en un bucle for van a cargarse ese sector de memoria enseguida. Esto solo aplica para escritura, la lectura no produce desgaste alguno.
Si llegaste aquí por casualidad te invito a ver la demostración del funcionamiento en mi canal: