Pages: [1]   Go Down
Author Topic: 3 porte seriali in una con un multiplexer.  (Read 1685 times)
0 Members and 1 Guest are viewing this topic.
Terni/Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 93
Dedalo project member
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti!

Vorrei trovare un modo efficace per permettere ad Arduino, e cioè all'ATMega328 (lo uso in modalità standalone) di comunicare attraverso 3 o più porte seriali con vari moduli, ciascuno dei quali riceve ed invia dati.
Ho avuto un sacco di problemi con SoftwareSerial, so che permette di ascoltare una porta alla volta e so anche che bisogna usare listen() e svariati while e if...il risultato finale non mi è piaciuto (è impreciso e poco affidabile e a livello software si complica un bel pò) e quindi ho deciso di risolvere la questione a livello hardware.
Prima che me lo suggerite  smiley-razz ..non voglio usare un Arduino Mega, come ho già detto ho solo un ATMega328 standalone con il bootloader di Arduino.

Non volendo usare SoftwareSerial, posso utilizzare 2 multiplexer comandati da alcuni pin digitali, uno per il canale RX ed uno per il canale TX? Riuscirebbero a stare dietro alla velocità di trasmissione dei dati?
In questo modo sfrutto per tutti i moduli solo la porta seriale hardware (pin 0 e 1)!
Se è fattibile....quale integrato mi consigliate?

Fatemi sapere, se conoscete altre soluzioni ditemi pure  smiley-cool

Ciao!!!
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7179
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Potresti optare per una conversione da seriale RS232 a RS485 che supporta più slave.
Hai bisogno solamente di 2 o più convertitori, uno per l'arduino e uno per ciascun modulo.
Ad esempio:
--> http://www.robot-italy.com/it/sn75176bd-differential-bus-transceiver.html
Poi devi scrivere anche il protocollo di trasmissione.
--> http://real2electronics.blogspot.it/2009/09/arduino-and-rs485-english-version.html

Se hai l'Atmega in standalone non è necessario il bootloader. Potresti farne a meno. --> http://www.michelemenniti.it/VHD/Elettronica/GPAT_v4.pdf

C'è anche un'altra discussione sull'argomento
--> http://arduino.cc/forum/index.php/topic,146069.0.html
« Last Edit: March 06, 2013, 01:02:18 pm by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Terni/Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 93
Dedalo project member
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie mille per il tuo intervento smiley
A dire il vero non conoscevo questo tipo di comunicazione, Master e Slave. Ho letto un pò di cose e mi sembrerebbe una cosa fattibile, ma mi servirà un pò per capire bene come agire!
Nel frattempo, che ne dici invece della mia idea? Ti sembra fattibile?

EDIT:
Ora che ci penso....forse mi sono spiegato male, o almeno in maniera incompleta: i moduli con cui deve parlare l'ATmega328 non sono altri microcontrollori, ma moduli GPS, GSM e sensori vari. Questi ricevono ed inviano sulla seriale i dati, e non possono essere istruiti ad un nuovo protocollo di trasmissione!
« Last Edit: February 03, 2013, 04:46:10 pm by zeroG » Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9652
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

posso utilizzare 2 multiplexer comandati da alcuni pin digitali, uno per il canale RX ed uno per il canale TX? Riuscirebbero a stare dietro alla velocità di trasmissione dei dati?

Quello che vuoi fare è fattibile solo se devi parlare/ricevere con un dispositivo per volta, ovvero sei tu a decidere con quale device parlare e tutti gli altri non devono inviare informazioni nel frattempo altrimenti vanno perse.
Logged

Terni/Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 93
Dedalo project member
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Astrobeed e grazie per l'intervento.
Si, devo interrogare i moduli uno per volta, e non c'è nessun rischio che le informazioni vadano perse.
Credo proprio che farò un tentativo con questo cosino qui http://www.fairchildsemi.com/ds/74/74VHC4052.pdf
E' un multiplexer doppio che gestisce 4 input e 4 output: potrebbe andare?
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Potresti usare un PCF8574 che è un port expander 8 bit pilotato in I2C,da ogni bit di uscita comandi il pilota di due buffer tri-state (74HC125)e rispettando il senso di comunicazione dei dati ottieni 8 seriali.
E' una possibile soluzione buttata giù alla veloce,se potrebbe tornarti utile fammi sapere e provo a spiegarti meglio.
Ciao.
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9652
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Potresti usare un PCF8574 che è un port expander 8 bit pilotato in I2C,da ogni bit di uscita comandi il pilota di due buffer tri-state (74HC125)e rispettando il senso di comunicazione dei dati ottieni 8 seriali.

No, il PCF8574 è un " 8-bit quasi-bidirectional port and an I2C-bus interface", non hai un collegamento diretto tra una coppia di pin, come servirebbe, semplicemente puoi leggere, o settare lo stato out, degli otto bit tramite comandi I2C, è pensato per aumentare il numero di GPIO generici non per i bus di comunicazione, la soluzione è usare i CD4066, o similari.
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
No, il PCF8574 è un " 8-bit quasi-bidirectional port and an I2C-bus interface", non hai un collegamento diretto tra una coppia di pin, come servirebbe, semplicemente puoi leggere, o settare lo stato out, degli otto bit tramite comandi I2C, è pensato per aumentare il numero di GPIO generici non per i bus di comunicazione, la soluzione è usare i CD4066, o similari.
Si astro,l'idea era quella di utilizzare il PCF8574 per risparmiare pin e poi ogni uscita dell'integrato,quando posta ad 1,deve abilitare due buffer tri-state contenuti nel 74HC125,uno per il tx ed uno per l'rx.
Ho fatto la stessa cosa per indirizzare il protocollo SPI ma utilizzando come buffer gli SN74LS244 che hanno 8 buffer composti da due banchi a 4 bit.....Bisogna solo fare attenzione a rispettare la direzione dei dati.
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il 74hct4052 dovrebbe andare bene,
http://www.nxp.com/documents/data_sheet/74HC_HCT4052.pdf
 guarda come lo usano quelli di atlas scientific per le loro sonde seriali :
https://www.atlas-scientific.com/_files/code/serial-port-connector-Sample-code.pdf
e guarda il loro prodotto:
https://www.atlas-scientific.com/product_pages/embedded/serial-port-connector.html
magari prendi spunto da loro e poi.... smiley-wink
« Last Edit: February 05, 2013, 03:22:11 am by BrainBooster » Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9652
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si astro,l'idea era quella di utilizzare il PCF8574 per risparmiare pin e poi ogni uscita dell'integrato,quando posta ad 1,deve abilitare due buffer tri-state contenuti nel 74HC125,

Ma perché ti devi complicare la vita quando risolvi tutto con due economicissimi CD4066, ottieni fino 4 seriali multiplexate.
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

astro secondo te fino a quale baudrate si può usare un cd4066?
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9652
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

astro secondo te fino a quale baudrate si può usare un cd4066?

Io lo uso sulla Luigino 328 per commutare tra Pin Tx e Rx del connettore con quelli del FTDI, quindi due seriali multiplexate, testato fino 1 Mbps senza problemi, in teoria può arrivare fino a oltre 5 Mbps.
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ottimo! io avevo consigliato il 74hct proprio pensando alla velocità..
Logged

Terni/Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 93
Dedalo project member
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il 74hct4052 dovrebbe andare bene,
http://www.nxp.com/documents/data_sheet/74HC_HCT4052.pdf
 guarda come lo usano quelli di atlas scientific per le loro sonde seriali :
https://www.atlas-scientific.com/_files/code/serial-port-connector-Sample-code.pdf
e guarda il loro prodotto:
https://www.atlas-scientific.com/product_pages/embedded/serial-port-connector.html
magari prendi spunto da loro e poi.... smiley-wink

Ma è fantastico!  smiley-cool E' proprio quello che avevo in mente di fare! Ho trovato in giro un 74HCT4052 con la pedinatura per breadboard (non smd), appena ho gli attrezzi sotto mano (fine settimana) faccio un pò di test.
Per il resto, il tipo di progetto che vorrei realizzare per ora va benissimo con 4 porte TX e RX, e visto che i pin digitali non mi servono per altre applicazioni, direi che è più che sufficiente.

Ci tengo a dire che secondo me questo tipo di soluzione è notevole. Fino ad ora ho letto in giro di disperati come me che cercavano di risolvere il problema con SoftwareSerial, con risultati poco soddisfacenti, soprattutto a livello di programmazione....chissà magari qualcuno più esperto di me può mettere due righe sul playground per diffondere il verbo! Dopotutto questo integrato è facilmente reperibile.  smiley

 
Logged

Pages: [1]   Go Up
Jump to: