Frequenzimetro khz e precisione

Salve possiedo una arduino "uno" vorrei sapere se è possibile sfruttarla per leggere una frequenza che varia dai 240,000 khz ai 280,000 khz con una precisione maggiore possibile magari un 0,001 khz. E' possibile ? Grazie

Arduino ha un clock a 16MHz. Tu vuoi campionare segnali da 240 a 280 MHz...la risposta è: penso proprio di no.

A cosa ti serve distinguere 1Hz su 240 MHz??

[quote author=Federico Vanzati link=topic=69666.msg516130#msg516130 date=1313591703] Arduino ha un clock a 16MHz. Tu vuoi campionare segnali da 240 a 280 MHz...la risposta è: penso proprio di no. [/quote]

Se non siamo in America 240,000 kHz sono 240000 Hz, infatti poi cita 0,001 kHz come risoluzione pari a 1 Hz. Si, è possibile realizzare con Arduino un frequenzimetro preciso al singolo HZ, volendo anche a 0,1 Hz, con un range misurabile compreso tra 1Hz e 20MHz, però è indispensabile bypassare wiring e programmarsi direttamente timer e interrupt. Da qualche parte ho un abbozzo di sketch per implementare il frequenzimetro, lo avevo scritto per un amico al quale poi non è più servito, se lo ritrovo non mi ci vuole molto per renderlo utilizzabile.

Eh già, sicuramente è una virgola e non un separatore di migliaia...mannaggia a me! :blush:

Trovata la libreria pronta all'uso con una semplice ricerca con google, sul sito trovi anche esempi per l'eventuale premplificatore del segnale se è minore di 2.5Vpp. L'ho provata al volo su una UNO con un segnale in ingresso di 5.23 MHz, il massimo che ho sottomano adesso, e funziona perfettamente, puoi impostare la base dei tempi per 1 secondo, risoluzione 1 Hz, 0,1 secondi, risoluzione 10 Hz.

si era una virgola ragazzi, astrobeed potresti spiegarmi meglio la cosa? e poi come visualizzo il risultato? con che precisione, potrei usare un lcd etc oppure direttamente da pc come? Grazie

klim007: si era una virgola ragazzi, astrobeed potresti spiegarmi meglio la cosa? e poi come visualizzo il risultato? con che precisione, potrei usare un lcd etc oppure direttamente da pc come? Grazie

La libreria che ti ho linkato esegue la misura della frequenza su richiesta contando il numero degli impulsi sul counter/timer 1 (16 bit) tenendo conto degli overflow per il tempo specificato nella base dei tempi, poi come visualizzare il valore dipende da te. Lo sketch d'esempio fornito con la libreria invia la misura sulla seriale, ma nulla vieta di visualizzarlo su un LCD o altro device di output, p.e. una scala di led tarata su una certa frequenza che mostra lo scostamento a passi di tot hertz come si fa sugli accordatori elettronici. La precisione dipende dalla base dei tempi, se usi un secondo hai il singolo Hertz e ci vuole un secondo per effettuare la misura.

se volessi 7 cifre con una dopo la virgola? cioè 000.000,0 HZ è possibile ? e con che precisione? grazie

klim007: se volessi 7 cifre con una dopo la virgola? cioè 000.000,0 HZ è possibile ? e con che precisione?

Però un minimo di sforzo fallo pure tu, basta leggere la descrizione della libreria sulla pagina che ti ho linkato per avere tutte le informazioni. La libreria prevede una base dei tempi di 1s, 0.1s, 0.01s, pari ad una risoluzione di 1Hz, 10Hz, 100Hz, volendo è possibile arrivare a 0.1 Hz di risoluzione usando una base dei tempi di 10s, ma oltre al fatto che servono 10 secondi per fare la misura devi modificare la libreria in tal senso. Come visualizzare i dati dipende solo da te, la funzione della libreria ti ritorna un valore numerico pari al numero degli impulsi contati durante il periodo impostato per la misura. Per esempio se la frequenza è 50000 Hz e hai impostato la base dei tempi a 1s il valore che ottieni è 50000, se vuoi visualizzarlo come 0500000,0 devi formattarlo tu in questo modo trasformandolo il numero in una stringa ASCII per poi manipolarla come serve per ottenere quel formato di visualizzazione. Attenzione a non confondere la risoluzione con la precisione, sono due cose diverse, in questo caso la precisione dipende da quella del quarzo collegato all'ATmega, la libreria prevede un parametro di compensazione per portare la precisione al massimo possibile, circa +/- 0,002%, per impostarlo serve una frequenza campione molto precisa, almeno 1 MHz, tramite la quale si verifica l'errore e si agisce sulla compensazione.

hai ragione astrobeed ma non vorrei fare cavolate, senti per il discorso compensazione quindi prima dovrei generare un onda almeno 1 mhz così da settare il parametro FreqCounter::f_comp= 8; // Set compensation to 12. con la massima precisione giusto?