Vi scrivo per colmare un vuoto dato sicuramente dalla mia ignoranza sull’argomento. Quindi mi scuso in anticipo per la banalità del problema.
In vari programmini ho sfruttato la comunicazione seriale come feedback a video per analizzare l’avanzamento dei vari cicli, ma ora ho voluto sperimentare unendo tra loro txrx di un primo Arduino con rxtx di una seconda scheda (ovviamente unendo tx con rx e viceversa).
Il primo Arduino stampa ogni 50ms il carattere ‘a’
Il secondo, quando vi è comunicazione, legge il carattere in arrivo e lo stampa su una seconda seriale.
Tra TX del primo Arduino e l’RX del secondo ho posto un interruttore.
Benissimo, perché se apro l’interruttore il secondo Arduino continua a ricevere e stampare il carattere ‘a’ per svariati secondi? C’è una specie di accumulo/memoria sui dati in ricezione e continua ad eseguire le istruzioni fino a che non li ha processati tutti?
Quindi non c’è modo di interromperla ‘istantaneamente’ mediante un interruttore esterno?
Questa cosa però mi accende un secondo dubbio: la trasmissione è più performante della ricezione? O il ritardo si ha a causa dell’elaborazione del dato?
Hai due serbatoi, uno per la trasmissione ed uno per la ricezione ... quando tu scrivi li riempi alla massima velocità della MCU (che ti ricordo viaggia a 16 MHz) quindi ... ci mette meno di un battito di ciglia a riemprli; lo svuotamento invece avviene alla velocità di trasmissione che hai scelto ... che è sicuramente molto più lenta della velocità con cui hai riempito il serbatoio di caratteri.
A questo devi aggiungere che tu da una parte devi ricevere e dall'altra stai trasmettendo al monitor seriale ... e chiaro che i dati si accumulano nel serbatioio ed impiegano un po' di tempo per essere svuotati.
Se lui scrive a raffica riempie il buffer in qualche microsecondo ... il buffer va svuotato, SE va a 9600, un po' meno di 1000 caratteri al secondo quindi, nel momento che apre l'interruttore, comunque almeno un altro bel po' di caratteri vengono stampati sul monitor seriale (il buffer varia in funzione della memoria SRAM libera e può arrivare a 64 caratteri) ...
Confermo di aver probabilmente fatto qualche errore io... poiché ora chi riceve e chi trasmette viaggia a 115200 e la problematica del ritardo che avevo riscontrato si è risolta da sé.