Pages: [1]   Go Down
Author Topic: Arduino Uno - Più di una porta seriale - è possibile?  (Read 1165 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 
Logged

Teramo
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Bologna
Offline Offline
God Member
*****
Karma: 5
Posts: 520
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Esatto. L unica pecca è che consuma spazio, oltre al fatto che non è velocissima.
« Last Edit: December 10, 2012, 01:13:38 pm by SUBSEA » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}
Logged

Teramo
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink
Logged

Offline Offline
God Member
*****
Karma: 9
Posts: 550
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21488
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

L' Arduino MEGA ha 4 porte seriali.
Ciao Uwe
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22645
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Pages: [1]   Go Up
Jump to: