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 D5lcdpino13 D6lcdpino14 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 meuprefixo@yahoo.com.br
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