Vai al contenuto
PLC Forum


frequenzimetro con atmega128 - Come misurarla?


MarcoNiky

Messaggi consigliati

Salve a tutti,

ho la necessita' di realizzare un preciso frequenzimetro con range 20-10KHz con tempo di risposta il piu' veloce possibile.

Dispongo di una scheda stk300 ed ho realizzato con Bascom un programma che fa partire timer0 per la durata di un secondo e quindi va a visualizzare, giusto per verifica, sulla porta b (quella collegata agli 8 led) il numero di conteggi effettuati sulla porta d.6 collegata ad un generatore a onda quadra variabile da 16 a 100 Hz.

La cosa che mi sconcerta e' che visualizzo i 'numeri del lotto' cioe' valori che, fissata ad esempio la frequenza a 16 Hz, possono variare da 20 a 7 Hz...

Ho quindi pensato ad un errore software ed ho cercato sulla rete qualcuno che avesse realizzato un software del genere... l'ho trovato, compilato e provato.

Pero' ho ottenuto lo stesso risultato Random.

Preciso che la forma d'onda in input e' stabile e con duty cycle del 50% (la visualizzo con l'oscilloscopio ed e' perfetta con salti di 5V).

Qualcuno puo' indicarmi una soluzione?

Magari con tempo di campionamento inferiore al secondo?

Grazie mille per l'attenzione

Marco

Link al commento
Condividi su altri siti


per frequenze basse meno di un khz ti conviene misurare il tempo fra i due fronti di salita o discesa di un periodo, per frequenze alte tipo dopo gli 1 khz ti conviene misurare quante volte hai i fronti in salita. la scansione può avvenire anche in meno di 1 secondo anche 100ms

Link al commento
Condividi su altri siti

Misurare la frequenza senza un apposito hardware non e' cosa semplice. Dovresti verificare se nel tuo codice sono attivi altri interrupts che possono falsare la misura.

Immagino che a livello software tu vai a contare i fronti che passano dalla porta.

Un netto miglioramento lo puoi ottenere se riesci ad "iniettare" la tua frequenza da misurare all'interno di un contatore hardware del micro.

Per valori bassi della frequenza ti conviene, come suggerito da MarcoNiky, trasformare il tuo frequenzimentro in "periodimetro".

Ti suggerisco comunque di utilizzare un contatore hardware, interno o esterno al micro

Ciao

Gianluca Furno

Link al commento
Condividi su altri siti

Ciao a tutti e grazie per i consigli!!

Appena possibile faro' quello che mi avete suggerito e vi informero' dei risultati.

Riguardo al conteggio utilizzo l'interrupt di timer0 di atmega128 che permette di stabilire il tempo di conteggio e utilizzo il timer01 come contatore dei fronti di salita (o discesa) per incrementarlo negli intervalli dettati dal timer0 e quindi leggere il risultato.

In effetti potrei aggiungere un contatore esterno e fargli leggere il risultato, ma poiche' le mie frequenze sono 'lente' (da 20 Hz a max 10K Hz) pensavo fosse in grado di farlo senza difficolta' il processore che utilizzo con un clock a 4MHz.

Grazie 1000!!

Ciao

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...