roberto8303 Inserito: 26 giugno 2016 Segnala Share Inserito: 26 giugno 2016 salve, una curiosità mi serve una lettura di frequenza quindi genero un impulso a 100hz, utilizzo con arduino pulse in. pinMode(led,INPUT); Serial.begin(9600); } void loop(){ pulsante=pulseIn(led,HIGH); a=410000/pulsante; Serial.println(a); delay(300); } perchè la frequenza esatta viene fuori solo se metto a=410000? e non 500000? Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 26 giugno 2016 Segnala Share Inserita: 26 giugno 2016 Scusa Roberto, ma non è che si capisce molto di quello che stai facendo Tu misuri il tempo, in microsecondi, per cui l'ingresso rimane nello stato alto. Se leggi 100 significa che il tuo impulso rimane alto per circa 244µs. Questo è il metodo classico che si usa per misurare la distanza tramite un sensore ad ultasuoni. Se vuoi misurare la requenza devi crearti una base tempi e contre gli impulsi che occorrono durante questo tempo. A esempio se fai una base tempi di 1" conterai 100 impulsi se la frequenza è 100Hz. Oppure per aumentare la precisione si misura il periodo ovvero si conta il tempo che trascorre tra un fronte ed il successivo. Cn arduino di solito si usa Timer1 con clock esterno come contatore e timer2 come geenratore di base di tempo oppure contimer1 si conta il clock interno da 16MHz abilitando e stoppando il conteggio con i fronti dell'impulso da misurare. Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 26 giugno 2016 Autore Segnala Share Inserita: 26 giugno 2016 ho provato a generare con un generatore di segnale un impulso a 100hz 2,5volt e con questo codice su arduino riesco a leggere la frequenza solo che volevo capire perchè bisogna dividere solo per 410000 il contenuto di pulsein. Ho provato a portare la frequenza fino a 1khz e oltre e si trova arduino legge bene anche se è un modo diverso volevo capire se era possibile usare questo codice Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 26 giugno 2016 Segnala Share Inserita: 26 giugno 2016 Dipende da quanto dura il semiperiodo alto del tuo impulso perchè, ripeto, l'istruzione che stai usando serve per determinare il tempo che impiega l'ingresso per passare dallo stato alto a quello basso. Se scegli LOW invece di HIFGH misura esattamente l'altra parte del periodo, cioè circa 9.75ms se l'impulso ha una frequenza di 100Hz Comunque se fai una ricerca con goolgle con chiave " arduino pulseIn()" trovi spiegazioni dettagliate di come lavora questa funzione. Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora