Misura frequenza con libreria FreqCounter.h

Ciao a tutti, ho trovato questo scketch in rete, quale è la frequenza massima misurabile con questa libreria ?
Io avrei bisogno di misurare sotto i 4 KHz.
Grazie

#include <FreqCounter.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
unsigned long frq; //Declares an extended size variable for the measured frequency
int cnt;



void setup() {
 
  lcd.begin(16, 2); //LCD display columns and rows
  
  lcd.print("FrequencyCounter"); //Prints a splash screen for 2 seconds
  lcd.setCursor(0, 1);
  lcd.print("  Version  2.1  ");
  delay(2000);
  
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Frequency /Hz :"); //Prints "Frequency /Hz :"
  
}

void loop() {

  FreqCounter::f_comp=10;
  FreqCounter::start(1000);

  while (FreqCounter::f_ready == 0) 

  frq=FreqCounter::f_freq; //Sets the 'frq' variable as the measured frequency
      lcd.setCursor(0, 1);
      lcd.print(frq); //Prints this measured frequency
      lcd.print("       ");


}

http://www.instructables.com/id/Frequency-Counter/step3/Stripboard-layout/

Naturalmente, non so il perchè ma ogni cosa che trovo in rete e carico non funziona come dovrebbe :cold_sweat:
Sto ignettando un onda quadra ad 1 kHz sul pin 5 ma non legge assolutamente niente.

Ti consiglio questa lettura --> Frequenzimetro Digitale con micro ATMEL - FINITO - - Software - Arduino Forum

Grazie PaoloP, naturalmente è lontano anni luce dalle mie esigenze.
Dovendo misurare solamente un segnale di 4V ad onda quadra/sinuosidale ero curioso di vedere la precisione rispetto ad un' oscilloscopio.
Ma legge valori a cavolo.

Quella lib funziona, Michele ci ha realizzato un frequenzimetro capace di leggere qualche MHz di segnale.
Ricontrolla tutto per bene, collegamenti e saldature.

PS:
un'onda sinusoidale non credo tu possa leggerla da un pin digitale dell'Arduino, questo è capace solo di vedere uno stato alto se la tensione è compresa fra Vcc0,6 e Vcc ed uno stato basso se la tensione è compresa fra 0 e Vcc0,3.
Tutto quello nel mezzo è letto come flottante. Capirai che la cosa diventa problematica.

Per la precisione leggo senza problemi segnali di livello logico TTL o CMOS fino a 6,5MHz, a patto che il duty cycle sia di circa il 50%, in caso contrario la frequenza letta diminuisce proporzionalmente.
La precisione dipende dal tipo di Arduino che usi: se il clock è basato su un quarzo (Duemilanove) allora hai buoni risultati, se è basato su un risonatore ceramico (UNO) le cose peggiorano decisamente.
Nel mio caso, con uno stand-alone ed un oscillatore quarzato di buona qualità ho raggiunto la precisione di frequenzimetri professionali.
Come dice giustamente Leo il segnale in arrivo al pin 5 deve essere digitale, se hai garanzia di non scendere sotto i 4V ti basta aggiungere un 74HC(T)14 ed usarne solo due porte in serie (sono dei NOT SCHMITT TRIGGER), avrai una squadratura perfetta.
Molto importante è la riga:
FreqCounter::f_comp=10;
che in pratica rappresenta la taratura dello "strumento"; nel Topic ho dato qualche indicazione, sui numeri di Settembre e Ottobre di Elettronica IN l'argomento è stato approfondito; sul sito è scaricabile gratuitamente la versione del firmware, molto più complessa, ovviamente, alla quale ha dato un eccellente contributo Leo, come leggerete nelle note iniziali.
Infine consiglio di trovare il link originale della lib, è stata aggiornata almeno un paio di volte, io ho usato l'ultima versione.

L'autore della libreria dovrebbe essere questo --> http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/

Molto probabilmente la mia breadboard cinene ha qualche problemuccio. Ho smontato tutto e rimontato su una piu seria e funziona alla perfezione anche se con qualche variazione del valore nella fase iniziale.
Legge anche una frequenza sinuosidale. Ho collegato l'oscilloscopio in pararllelo al pin 5 di arduino e questo è il risultato.
E' normale?

SHS00063.BMP (219 KB)

che intendi con normale? il segnale da solo com'è? se posti una sola immagine senza confronto come fai a sapere se è "normale"? E' chiaro che leggi anche segnali sinusoidali ma a mio modesto parere avrai sempre valori sfalsati, il pin digitale di un micro ragiona con 0 e 1, un segnale sinusoidale è di tipo analogico.

sorry, intendevo rispetto ad un onda sinuosidale.

SHS00064.BMP (219 KB)

ovvio che vengono tagliati i valori negativi che, teoricamente, non dovresti proprio applicare al microcontrollore, ecco perché hai l'obbligo almeno morale di squadrare quei segnali prima di portarli al pin 5. Hai difficoltà ad implementare il componente che ti ho consigliato?

Chiaro Michele, certo procuro su rs il 74HC(T)14 e modifico lo schema. Grazie mille per l'aiuto e complimenti per il tuo frequenzimetro.

Grazie :slight_smile: quella (T) significa che puoi prendere indifferentemente 74HC14 o 74HCT14, se lavori a 5V e con quel tipo di segnali l'uno vale l'altro. Ciao