Go Down

Topic: Velocitá di comunicazione Serial Port (Read 819 times) previous topic - next topic

f.schiano

Ciao a tutti,

ho un dubbio. Sto comunicando da Arduino verso MATLAB attraverso Serial port.

In pratica prima connetto la serial port e poi attraverso delle istruzioni del genere :

Code: [Select]
L=fscanf(comPort,'%f');

acquisisco da Arduino quello che sta inviando.

Io al momento nel firmware Arduino ho 3 Serial.println (L, time, contr) e quindi lato MATLAB avró :

Code: [Select]

L=fscanf(comPort,'%f');
time=fscanf(comPort,'%f');
contr=fscanf(comPort,'%f');


In questo modo sono in grado di acquisire correttamente i 3 valori mandati da Arduino. Tutto funziona.

Il dubbio é dovuto al fatto che il mio Group Leader mi ha chiesto di effettuare questa comunicazione Arduino-Matlab in maniera time-fixed cioé:

Arduino manda dei dati ad esempio ogni 30ms e sapendo ció io dal lato MATLAB richiedo dati solo ogni 30ms.
In questo modo secondo lui posso risparmiare tempo e avere una simulazione piú veloce.

Vorrei una vostra opinione a riguardo. Questa cosa é vera oppure i miglioramenti non si vedono?

Spero di essere stato chiaro

Grazie mille per il prezioso aiuto!


leo72

Lato Arduino non ci dovrebbero essere differenze. L'invio e la ricezione di dati sulla seriale sull'Arduino è fatta (a partire dall'IDE 1.0) usando gli interrupt per cui che tu spedisca in un istante qualsiasi oppure ogni 30 ms lato scheda dovrebbe essere identico. E' l'interrupt che si occupa di mandare i dati, per cui diventa un'operazione trasparente per l'utente.

Casomai vedo l'invio a tempi prestabiliti più problematico perché devi sincronizzare l'invio e la ricezione, altrimenti rischi di trovarti con l'Arduino che spedisce quando l'altro non riceve o viceversa mettersi in ricezione quando il primo non spedisce.
Considera inoltre che l'Arduino ha un risuonatore ceramico come fonte di clock, quindi un dispositivo non proprio preciso, ed i 30 ms calcolati con la funzione millis di Arduino non sono molto precisi.

f.schiano

Grazie per la risposta Leo.

Ho ancora una domanda. Come fa a funzionare quello che sto facendo ora? Cioé Arduino e Matlab si sincronizzano automaticamente?
Sicuramente c´é un carattere iniziale da cui Matlab inizia a leggere il messaggio  e uno in cui capisce che il messaggio é finito. Giusto?

leo72

Se l'invio si limita a pochi byte per volta non ci sono problemi di assenza di sincronizzazione. La trasmissione avviene a velocità tali per cui essi sono ricevuti e letti tutti insieme.

Però se capitasse invece di spedire molti dati troveresti che il ricevitore dovrebbe sincronizzarsi con il trasmettitore oppure utilizzare byte di inizio e fine trasmissione ed altri meccanismi per individuare la ricezione del corpo del messaggio, altrimenti potresti avere la lettura di dati senza senso.

Go Up