Visualizza messaggio singolo
Vecchio 05 maggio 20, 12:01   #106 (permalink)  Top
Smsteves
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Citazione:
Originalmente inviato da ElNonino Visualizza messaggio
Concordo, Arduino per applicazioni in cui è richiesto il funzionamento in realtime, con latenze basse e deterministico non è assolutamente adatto, se poi si utilizzano librerie di dubbia qualità l'insuccesso è quasi certo.

Per l'applicazione in oggetto vedrei molto meglio un PIC od un ARM...

Ho sempre sostenuto che Arduino è stata una grande idea ma ha generato un effetto collaterale: quello di far credere a molti di svegliarsi una mattina e saper sviluppare firmware e nel caso del modellismo senza neanche avere le basi del HW.
Ma dai, non siamo cosi' catastrofici… Arduino è basato su un processore equivalente a molti pic…

Ma ElNonino mi hai hato un idea. invece di guardare il Software guardiamo dal lato HW (hardware) il problema.

Bene facciamo gli elettronici seri (sono sempre un pochino arruggito ma ci provo)
Quindi ho fatto un paio di prove
Inserito il serial.print nel sofware ho verificato senza toccare la radio quali valori venissero letti da pulsein.
Erano un po' ballerini ma neanche eccessivamente meno del 1% di errori.

Quindi per capire se il problema fosse la radio che si fa? si piglia un vecchio ma serio oscilloscopio digitale Tektronix 100MHz e si misurano gli impulsi.
Risultato? valori inchiodati quindi non e' la ricevente che genera errori.

Bene e le tensioni? il segnale della radio verso il servo e' un onda quadra circa 3.5Volt compatibile con ingresso di Arduino. quindi non e' li' il problema.

Proviamo a mettere i pullup? magari con un diodo? non cambia nulla quindi eliminato.

Quindi dato che arduino usa per pulsein il Timer1 interno al processore, che viene usato anche per altro la soluzione sarebbe quella di usare un pulsein che adoperasse il timer2 ad esempio. Oppure…

Fermiamo interrupt (blocca le interruzioni ai timer tra le altre cose)
Leggiamo il valore
Riabilitiamo Interrupt e...

Miracolo senza mettere un processore quantistico abbiamo un valore che balla +/-1 lultima cifra.. Un milionesimo di secondo badate bene…

Sto programmando un plc per lavoro (Ebbene si' lo confesso faccio questo lavoro) ma più tardi posto il codice modificato…

La linea da da inserire e' la seguente:
noInterrupts();

e dopo i pulsein

interrupts();

per riabilitarli

Provate per credere oppure aspettate un paio d'ore che produco..

Smsteves

Ultima modifica di Smsteves : 05 maggio 20 alle ore 12:04
Smsteves non è collegato   Rispondi citando