FREQUENCÍMETRO (contador de
impulsos) DE 60 MHz COM
ARDUINO
Ola amigos, vamos
aqui descrever um frequencímetro, que não é dos
melhores mas é fácil de montar e de ajustar, sendo muito
util para ler frequencias em radios caseiros. Não é um
instrumento de bancada, pois não tem uma precisão
adequada. A precisão deste frequencimetro depende de ajustes no
software.
Como o Arduino somente respode a entradas de 6MHz, montamos um
prescaler divisor por 10. Usamos o 74HC4017 como prescaler.
Esquema

Programa
O programa do frequencimetro é simples, retiramos as
bibliotecas de
Martin Nawrath, que podem ser encontradas neste link : http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/.
A resolução da
frequencia lida pode ser alterada no sketch do programa nesta linha
FreqCounter::start(10); // Valores de 10, 100 ou 1000 ms
são possíveis para uma resolução de 100, 10
e 1 Hz respectivamente (ou seja start (1000) = resolução
de 1Hz.
Este programa não tem previsão de offset, mas o calculo
é simples e facil de ser implementado.
Para ajuste da frequencia correta lida, pode ser necessario um ajuste
no programa, para isto sera necessario injetar a frequencia maxima a
ser lida (por exemlo 50MHz) copiar a medida que aparece no display (por
exemplo 50035kHz) e para achar o coeficiente de ajuste é
só dividir 50035/50000=1,0007)
e colocar este indice na linha
frq = (10* frq1)/1 ;
frq = (10* frq1)/1.0007 ;
Ao ligar o frequencimetro ele não mostra de primeira a
frequencia, então incluimos um teste que melhora este problema,
escrevendo "ESPERE" no display.
Montagem :
A montagem foi feita de maneira simples, pois este projeto de
frequencimetro foi usado no AJUSTE DE LOOP AUTOMATICO e no
FREQUENCIMETRO FALANTE.
A montagem do prescaler foi descrita no meu site http://py2ohh.w2c.com.br/trx.html
item 144
Monte conforme o esquema acima, faça download das bibliotecas
(library) abra o IDE do arduino, inclua a biblioteca nova no sistema,
copie a ide para formar um novo programa, compile os dados (acertando
antes a placa e o processador) e grave via USB o novo programa no
arduino. Qualquer duvida me escreva.
Sketch ou programa : // depois de duas barras são apenas
comentarios ...
// incluir library entrada do frequencimetro pino 5 digital
//ligações da serial lcd A4 SCL e A5 SDA
#include <FreqCounter.h> //inclui a biblioteca
float frq; //define a variavel numerica como float
float frq0 = 10000; // idem mas dá o valor de 10000 a ela
#include <Wire.h> // inclui outra biblioteca para o lcd
#include <LiquidCrystal_I2C.h> // inclui outra biblioteca para o lcd
// Inicializa o display no
endereco 0x27
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup() { //inicia o setup
Serial.begin(9600); //inicializa a conexão serial
lcd.begin (16, 2); // inicilaiza o LCD
}// fecha o setup
void loop() { //inicia o loop principal
frequencimetro(); // chama a função frequencimetro
}// fecha o loop principal
void frequencimetro() { // esta é a função
frequencimetro no final ela volta de onde foi chamada
FreqCounter::f_comp = 0; // Cal Value / Calibrate with
professional Freq Counter = valores de 0 a 9
// a chamada anterior é apara acerto do timer, deixe com o
numero que dá o menor erro depois acerte o //coeficiente
conforme descrito
delay (100) ; //espera 100milisegundos
FreqCounter::start(10); // values of 10, 100 or 1000 ms
are practicable for a resolution of 100, 10 and // 1 Hz aqui ajusta a
resolução
while (FreqCounter::f_ready == 0) { // repita enquanto o tempo
do contador esta no tempo ajustado
frq = (FreqCounter::f_freq); //leia a contagem ou
frequencia
frq= (1* frq)/1.0; //ajuste o valor lido
}
delay (1000); //espere i segundo
if (abs(frq-frq0) < 10000){ //rotina para ver se o valor lido
esta correto
//caso a frequencia esteja certa
lcd.setCursor(0, 0); //coloque o cursor do lcd na primeira linha
primeiro caracter
lcd.print("Freq "); // imprima "Freq " tem um espaço para
não amontoar tudo
lcd.print(int(frq)); // imprima a seguir a frequencia lida
}
else { //caso a frequencia ainda esteja fora
lcd.clear(); //limpe a tela do lcd
lcd.print(" ESPERE !"); // escreva " ESPERE !" deve
ficar mais ou menos no centro
} // encerra o if ...else
frq0=frq; //deixa estas variaveis com o mesmo valor para checar
no if...else depois
delay(1000); //estera 1 segundo ou 1000 milisegundos
} // encerra a função frequencimetro e fim do programa
73 de py2ohh miguel