Go Down

Topic: Arduino Uno - Più di una porta seriale - è possibile? (Read 1 time) previous topic - next topic

v_stefa

Buonasera,

per il mio progetto, Arduino Uno deve interrogare un dispositivo elettronico in grado di misurare delle tensioni e delle potenze.
Il dispositivo viene interrogato attraverso la porta seriale (pin 0 e 1) e fa uso di un semplice protocollo del tipo Domanda-Risposta.
Il dispositivo è passivo, ossia non c'è la possibilità che Arduino riceva delle risposte inviate autonomamente dal dispositivo (una specie di eventi esterni da gestire).
Vorrei chiedervi se c'è la possibilità di condividere la porta seriale inviando, di tanto in tanto, alcuni dati al serial monitor (vorrei capire quello che sta avvenendo all'interno del dispositivo).
Avevo letto di una libreria che consente di istanziare più di una porta seriale anche su dispositivi come Arduino Uno che ne hanno una sola (però non mi ricordo bene dove).
In pratica vorrei che, almeno in fase di sviluppo, il mio Arduino interroghi il dispositivo e poi mandi la lettura sul serial monitor.
Ovviamente è sufficiente anche un link da studiare.

Grazie
Enzo 

Simoneaudi93

Ciao, hai bisogno di usare la libreria software serial ( o new software serial, dipende da che IDE usi) in modo da creare una porta seriale virtuale su due nuovi pin in modo da usare i 0 e 1 per la comunicazione con il pc, qui trovi un pò di info:
http://arduino.cc/en/Tutorial/SoftwareSerial

Subsea

#2
Dec 10, 2012, 04:46 pm Last Edit: Dec 10, 2012, 07:13 pm by SUBSEA Reason: 1
Esatto. L unica pecca è che consuma spazio, oltre al fatto che non è velocissima.

v_stefa

Grazie per le indicazioni.
L'esempio riportato al link postato è quello di cui avevo bisogno.

Il codice all'interno del loop è quello che mi serviva: leggo da una parte e scrivo dall'altra.
MySerial è la porta seriale che si collega al dispositivo e Serial è la porta seriale di default (quella che è inclusa nella connessione USB).

Avrei ancora una domanda: dopo che il progetto è completato, conviene collegare il dispositivo alla porta seriale di default?
Ci sono differenze in termini di prestazioni oppure è indifferente? Il dispositivo deve comunicare a 9600 baud.

Grazie ancora
Enzo.


Code: [Select]
void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

Simoneaudi93

guarda purtroppo non sono molto informato sull'effettiva differenza, ma secondo me se non hai bisogno di spazio sull'ATmega puoi lasciare la seriale virtuale così nell'eventualità puoi fare debug tramite quella hardware, invece se hai bisogno di spazio e non ti è necessario comunicare col pc usa la seriale nativa del chip  ;)

m_ri

i limiti li vedi se devi fare cose più specializzate..
comunque considera che può solo ricevere da una porta per volta(e devi dirglielo te quando cambiare porta di ascolto)
inoltre quando riceve dati,invoca un interrupt per poter scrivere su un buffer..se te stai eseguendo codice bloccante in quel frangente,perdi i dati..e per alte velocità(tipo 115200 baud) ti consiglio fortemente quella hardware

uwefed


leo72


inoltre quando riceve dati,invoca un interrupt per poter scrivere su un buffer..se te stai eseguendo codice bloccante in quel frangente,perdi i dati..e per alte velocità(tipo 115200 baud) ti consiglio fortemente quella hardware

Dissento. Anche la seriale hardware riceve e spedisce i dati tramite interrupt e non va perso nulla. E' proprio grazie agli interrupt che si possono eseguire compiti sganciati dal loop principale.
Inoltre sono gli interrupt che sono non interrompibili e non perdono nulla senza dare noia al resto, a differenza della vecchia SoftSerial che invece era bloccante e non andava avanti finché non era arrivato quello che aspettava.

Go Up