salve a tutti sarò io che sbaglio come sempre ma siamo già alla seconda prova che arduino mi da risultati strani in sostanza credo che l'unità di misura del tempo non sia delle migliori..
prima prova:
ho preso arduino e volevo fare suonare una cicaletta (non saprei come chiamarla una mini "cassa") a 4KHz io da bravo calcolatore mi sono trovato che dovevo far spegnere e accendere la porta 0.25 ms (T/F => 1/4k) e così ho fatto tutto contento accendo è il rumore non era dei migliori, ho constatato in un oscilloscopio che la F non era 4K ma era ben si 40Khz
sono sicuro al 100% di aver scritto 0.25 come tempo e sono sicuro di quello che ho letto sullo oscilloscoppio.
seconda prova:
come alcuni di voi ricordano un po di tempo fa ho provato a fare un capacimetro ho atteso fino ora di riparlarne proprio per risolvere questo problema. lo schema elettrico è come riportato sul sito stesse resistenze che spiegano sul sito condensatore da 90uF. sempre da bravo calcolatore (scherzo) ho trovato che il T(tempo di carica al 63%) dovrebbe essere 0.9s (T=RC => 10k0.000'09F = 0.9s)
questi sono i dati ripostati:
94 mS 9 microFarads
94 mS 9 microFarads
94 mS 9 microFarads
94 mS 9 microFarads
95 mS 9 microFarads
94 mS 9 microFarads
94 mS 9 microFarads
94 mS 9 microFarads
94 mS 9 microFarads
94 mS 9 microFarads
95 mS 9 microFarads
95 mS 9 microFarads
94 mS 9 microFarads
94 mS 9 microFarads
95 mS 9 microFarads
94 mS 9 microFarads
94 mS 9 microFarads
app
apparte la capacità che li per farla quadrare basterebbe metterci un *10 ma sono i 94ms che mi preoccupano voi che dite?
dove sbaglio non capisco
Ma non è che la tua R è una 100K? l'hai misurata? In questi casi bisognerebbe ricorrere alle resistenze a strato metallico precisione minima 1%, meglio 0,5%.
Comunque sia hai mai manipolato il bootloader del 328P del tuo Arduino?
L'unico componente esterno incriminabile sarebbe l'oscillatore che è collegato tra i pin 9 e 10 del 328P
la resistenza comunque non centra la sua tolernza non mi farebbe fare errori così elevati ma comunque o boh si è assestato da solo riprovando il capacimetro, misteri della vita non è andato per 1 set e solo ora va.
il problema è sempre la cicaletta resta sempre ai 40Khz invece che 4K. riesci a spiegarmi come mai?
ilmandorlone:
la resistenza comunque non centra la sua tolernza non mi farebbe fare errori così elevati ma comunque o boh si è assestato da solo riprovando il capacimetro, misteri della vita non è andato per 1 set e solo ora va.
il problema è sempre la cicaletta resta sempre ai 40Khz invece che 4K. riesci a spiegarmi come mai?
La sua tolleranza no, ma se hai usato una 100k invece di una 10k i conti tornerebbero alla perfezione, rifai i conti, da bravo calcolatore
invece non so dirti sulla storia dei 40Khz, con quali comandi li generi? è possibile vedere la sezione di sketch che usi? così dai un'info utile a chi si intende di programmazione, io non molto purtroppo...
EDIT: vedo solo ora che hai risolto; riprova domattina a freddo dopo diverse ore che Arduino è spento e vedi se risuccede
per quanto riguarda la resistenza è (marrone, nero, arancione) ma comunque ora ci mette più tempo ho riuplodato il sorgente non so cosa era sbagliato ma ora va
OK, la R è esatta, se tutto funziona ovvio che il tuo Arduino non ha alcun problema.
Riguardo lo sketch ho un solo dubbio: ma la frequenza non si misura sull'intero ciclo, cioè con la somma del periodo HIGH e del periodo LOW? in questo caso il tempo in realtà sarebbe di 0,5sec.
Altra cosa: hai provato a cambiare pin? sul tredici c'è quella fastidiosa R del led, non so se possa causare problemi.
quindi è come dico io? la frequenza si misura sul perido intero dell'onda?
f = 1/T
quindi periodo e frequenza dicono la stessa cosa, non è che la frequenza del sengale è la metà del periodo. In questo caso il segnale è un'onda quadra quindi sta al 50% alto e al 50% basso. Pensa ad una sinusoide....
delay accetta numeri di tipo unsigned long quindi niente decimali.
Per periodi inferiori usa come ti ha detto Uwe il delayMicroseconds.
sì, la frequenza va calcolata tenendo conto che va generata un'onda quadra con duty cicle del 50% per cui per metà del periodo calcolato il segnale deve stare HIGH e per l'altra metà LOW. In questo modo il periodo fra 2 creste alte diviene del tempo necessario.
ma è quello che sto dicendo, probabilmente esprimendomi male, infatti un po' di post fa gli facevo osservare che usando due pause da 0,25ms per l'1 e per lo 0, in realtà costruiva un periodo di 0,5msec, dimezzando la frequenza. sbaglio? No, vedo che Leo mi conferma ciò che dico.
uwefed:
Scusate la risposta in ritardo;
Sí Michele confermo:
quindi è come dico io? la frequenza si misura sul perido intero dell'onda?
Ciao a tutti.
Grazie Uwe, nessun problema, ognuno scrive quando può e col tuo intervento direi che la questione è definitivamente chiusa. Ora aspettiamo solo che il nostro amico ci confermi di aver fatto la prova che gli hai suggerito e che tutto funziona alla perfezione.
Ciao
ilmandorlone:
quindi tagliando la testa al toro in sostanza il tempo deve essere 0.25/2 cioè 0.125 ? così la somma e 0,25 ms?
sì, perché devi misurare l'intero periodo che comprende la fase HIGH e la fase LOW, cioè un'onda quadra intera; usa il comando che ti ha consigliato Uwe e vedrai che risolvi tutto ed il tuo Arduino rientra nei ranghi di quelli funzionanti