FREQUENCIMETRO
COM ARDUINO NANO versão 2 (50MHz)

Foto : Lendo a frequencia de um DDS .
Como diz o ditado popular "vivendo e aprendendo" aqui um novo
frequencimetro, para uso em receptores de conversão direta, com
leituras diretas de frequencia.
Resolvi re-editar a versão anterior sem o adaptador serial do
display, que dava "pau" em algumas versões do IDE do
arduino, agora a versão no "arroz com feijão" mais
simples.
Como no anterior usamos um 74HC4017 como prescaler divisor por 10, pois
o Arduino Nano não passa dos 6MHz quando usado direto. A minha
versão estava lendo até 52MHz.
Esquema :

Como dá para ver o esquema é super simples ...
vamos a montagem :
Usei uma placa padrão de 3x7cm de fibra de vidro com dupla face,
da China (U$2 por 5 peças), barras terminais macho e femea,
soquetes de CI para o 74HC4017 e para o Arduino Nano ... todo o
material comprado na China.

Foto : A montagem ficou tipo sandwich com o tamnha do LCD e 3,5cm de
altura. Poderia ter menos altura, mas não usando soquete para o
74HC4017 e nem para o arduino.

Foto : Notem que a PCB ficou fácil de montar com esta
disposição.

Foto : Disposição dos componentes amarelo 74HC4017,
vermelho LCD, azul arduino Nano.

Foto: para ver a disposição sem as linhas coloridas.

Foto : Devido a altura dos componenstes soqueteados, colocamos pinos
macho com tamanho maior.


Foto : O 7805 ficou proximo ao 74HC4017, os pinos quue aparecem do lado
esquerdo, são para entrada de VCC (12V) e para entrada de RF.

Foto : Retiramos o LCD, vejam como ficou compacto.

Foto : Retiramos o Arduino Nano

Foto : Retiramos o Arduino Nano e o 74HC4017, os soquetes e as
ligações de 5V (fios vermelhos) e terra (fios marrons).


Foto: detalhe ampliado da montagem do 74HC4017 em um soquete de
circuito integrado torneado.

Foto : Para entrada e saida de sinal usei capacitores 100nf SMD.

Foto : Sinal de entrada em 50MHz
Dicas para montagem e alterações do Sketch do arduino :
A. Voce pode colocar seu prefixo na tela inicial :
Na linha
String prefixo =
"PY2OHH";
é só alterar o prefixo por ex para py0rat na linha :
String prefixo =
"PY0RAT";
B. Voce pode usar outros pinos digitais para acionar o LCD
A linha
LiquidCrystal
lcd(12, 10, 6, 4, 3, 2);
define os pinos digitais do arduino que serão ligados a esta
configuração definida do LCD
LiquidCrystal
lcd(lcdpino4 RS, lcdpino6 E, lcdpino11 D4,lcdpino12 D5, lcdpino13 D6, lcdpino14 D7);
Assim o pino 4 do LCD (marcado RS) será ligado ao pino 12 do
arduino.
O pino 3 do arduino sera ligado será ligado ao lcdpino13
(marcado D6).
Somente o pino 5 para este esquema (entrada dde RF) que
já está definido e não permite uma
ligação para o LCD.
A alteração de pinos é livre e facilita o
desenho da PCB.
C. O ajuste de valor de frequencia lida, deve ser ajustado na linha
FreqCounter::f_comp
= 8;
O valor pode ir de 1 a 9
Ajustes finos adicionais são necessarios na linha
frq = ((1.000435
* frq) - 1.3);
O valor 1.000435 vem do resultado do valor da frequencia de entrada
(usando uma fonte de sinal mais confiavel disponivel) divido pela
frequencia lida no nosso frequencimetro.
Pode ainda aparecer um erro residual que se repete em toda a
escala ... no nosso caso o valor era de 1,3 kHz a mais ... assim
subtraimos do valor a ser mostrado.
D. Para programadores iniciantes :
Interessante o metodo para mostrar a frequencia incluindo o ponto e a
virgula ... é só copiar e usar...
E. Para usar em um radio monobanda é facil somar ou
subtrair a FI do valor lido (VFO) ... mostarndo o resultado da
conversão ...no proximo frequencimetro adicionaremos um Smeter e
o frequencimetro terá esta possibilidade.
OBS : Qualquer
dúvida entre em contato comigo via email [email protected]
meu prefixo é py2ohh
SKETCH DO FREQUENCIMETRO :
// incluir library entrada do frequencimetro pino 5 digital
#include <FreqCounter.h>
#include <LiquidCrystal.h>
volatile unsigned long frq;
volatile unsigned long frq0;
int f;
String prefixo = "PY2OHH"; // altere aqui pelo seu prefixo mantendo
entre aspas
// it is posible to change the ham call ... cahnge "PY2OHH" for your
CALL keep the "" signs
LiquidCrystal lcd(12, 10, 6, 4, 3, 2);
void setup() {
Serial.begin(9600);
lcd.begin (16, 2);
lcd.setCursor(1, 0);
lcd.print("Frequencimetro ");
lcd.setCursor(5, 2);
lcd.print(prefixo);
delay(5000); // tempo de 5 segundos na entrada com prefixo
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Frequencia ");
}
void loop() {
FreqCounter::f_comp = 8; // Cal Value / Calibrate with
professional Freq Counter
delay (10) ;
FreqCounter::start(100); // values of 10, 100 or 1000 ms
are practicable for a resolution of 100, 10 and 1 Hz
while (FreqCounter::f_ready == 0) {
frq = (FreqCounter::f_freq);
frq = ((1.000435 * frq) - 1.3); // 1.000435 =
leitura DDS / leitura freq.
// nem sempre somente com o valor multiplicado se
chega a um bom resultado
// assim o valor 1.3 é o valor que
aparece fixo constante nas leituras pode ser
//somado ou subtraido
// for to display corrected frequency read the
frequency in a prof. freq counter
// and calculate like 1.000435 = reading freq
counter / actual measurement
// may be you need to add a constant value im my
case is -1.3
}
if (frq != frq0) {
delay (100);
if (abs(frq) > 640000) frq = 0; // Zera sem entrada de
frequencia
// e limita o valor a 64MHz value limeit 60MHz and zeroed the
frequency
lcd.setCursor(2, 2);
// a seguir escreve no LCD a freq. com ponto de
separação de milhar e virgula
// in suite print in LCD the frequency value with point and
comma
//if you desire change the point and comma like in your country
use
f = frq / 10000; //calculo do valor do milhar
kHz
if (f < 10) lcd.print(' ');
lcd.print(f);
lcd.print('.');
f = (frq % 10000) / 10; // calculo do valor da centena kHz
if (f < 100) //coloca zero na centena se for menor que 100
lcd.print('0');
if (f < 10)// coloca zero na dezena se for menor que 10
lcd.print('0');
lcd.print(f);
lcd.print(',');
f = frq % 10; //Calculo da centena de Hz
lcd.print(f);
lcd.print(" kHz ");
lcd.setCursor(0, 1);
delay(100);
frq0=frq;
}
}
////////////////
Boas montagens !
73 de py2ohh miguel
Este artigoF