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