Sei sulla pagina 1di 13

Search Programmazione WxWidgets CodeBlocks Android Elettronica Arduino 1-Wire

AA

Jan

20
2014

Arduino e porta seriale RS485


Arduino, Elettronica Add comments

69.164.218.62 Utente non autenticato Registrati Collegati

Oggi vediamo come collegare multiple schede Arduino tramite porta RS485. Il mio interesse per la comunicazione seriale fra diverse schede nasce dalla
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

Italiano English

pdfcrowd.com

necessit di connettere insieme pi schede per farle interagire tra loro nel contesto di un progetto domotico. Se cercate in rete troverete molti modi diversi per connettere insieme degli Arduini con bus diversi, I2C, RS485,RS232, etc. Ognuno ha i suoi pregi e difetti alcuni permettono trasmissioni solo a breve distanza, altri a centinaia di metri, alcuni permettono di collegare solo 2 dispositivi, altri permettono di arrivare ad un numero maggiore, alcuni permettono un collegamento di tipo master-slave, altri di tipo multimaster. Insomma, c davvero da perdersi. Ora vi chiederete perch ho scelto lRS485? Gli obiettivi che mi prefiggevo erano la possibilit di connettere multipli dispositivi in contemporanea, poter avere una linea lunga abbastanza da cablare lintera casa, essere abbastanza immune ai disturbi e costare poco. LRS485 permette di raggiungere i 1200 metri senza ripetitori, permette di connettere da 32 a 256 dispositivi in base ai chip usati, molto economica ed scarsamente sensibile ai disturbi. Se ci fossero solo fattori positivi non esisterebbero neanche le alternative, ma come dicevamo ogni standard ha lati positivi e negativi. I negativi
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

RSS McMajan Libreria Ss_TFT Arduino, rel e infrarossi. IteadStudio 2.8 TFT Display shield: Una nuova libreria Arduino e RS485: piccoli approfondimenti Arduino cos? (per principianti e anche meno)

Categories Elettronica (36) 1-Wire (8) Arduino (30) Programmazione (26) Android (7) CodeBlocks (9) wxWidgets (11) Senza categoria (1)

pdfcrowd.com

ogni standard ha lati positivi e negativi. I negativi riguardano il fatto che lRS485 descrive solamente la connessione fisica ma non descrive in che modo vengono trasmessi i dati seriali, quindi il protocollo dobbiamo scrivercelo da noi, dobbiamo occuparci noi del controllo dintegrit della trasmissione e leventuale ritrasmissione dei pacchetti di dati corrotti.

WEB (1) Wordpress (1)

Elettronica Sito ufficiale Arduino

Programmazione

RS485: Le basi
La RS485 consiste in un bus formato da 2 soli conduttori detti A e B, per le connession Half Duplex. Nei due conduttori scorre lo stesso segnale ma uno speculare allaltro, se in uno scorre un segnale alto, nellaltro ci sar un segnale basso e viceversa. Per fare un paragone, il +12 della RS232 corrisponde al +5 della linea A della RS485 e 0 (zero) della linea B. Viceversa il -12 della RS232 corrisponde a 0 di A e +5 di B. Nellimmagine in adiacenza potete vedere uno schemino comparativo. Questo sistema di invio speculare dei dati prende il nome di linea
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

HomePage Code::Blocks HomePage wxWidgets

Blog QR Code

pdfcrowd.com

differenziale in quanto il ricevitore non analizza il semplice livello del segnale ma la differenza fra i due, per questo lRS485 definita linea differenziale. Ci f si che la linea sia particolarmente immune ai disturbi esterni, in quanto un eventuale disturbo interferisce in maniera simile su entrambe le linee per cui la loro differenza viente mantenuta, basti pensare che anche se la RS485 usa segnali a 5V, la soglia minima di soli 1.5V e la soglia differenziale fra le due linee per interpretare correttamente un segnale di soli 200mV. Unaltra cosa importante la geometria del bus. Ci sono bus che per loro natura sono obbligati ad avere una determinata configurazione, lRS485 non di questi per cui per aggiungere un dispositivo non si f altro che collegare i 2 cavi in un qualunque punto della rete ed il gioco fatto. Pi sopra accennavo, senza approfondire, al termine Half Duplex, ma cosa significa? Per capirlo basta farci una semplice domanda. Se abbiamo 5 dispositivi collegati il segnale da dove arriva e a chi indirizzato? Questa
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

domanda ci f capire che nello stesso istante un solo dispositivo alla volta pu inviare segnali sulla linea RS485. Infatti lapplicazione pi tipica che trovate pressoch ovunque la cosidetta configurazione single master multi slave che significa che c un nodo master che lunico deputato allinvio spontaneo di comandi sul bus, e multipli slave (schiavi) che possono rispondere unicamente quando interrogati dal master. Questa la tipologia di connessione pi usata e pi semplice da sviluppare ma ha un grossso difetto concettuale. Se il master si rompe, si blocca, gli tagliamo i cavi o qualunque altra cosa, tutta la rete resta bloccata perch gli slave non sono autorizzati ad inviare dati se non in risposta a comandi inviati dal master. Laltra cosa intuibile che quando il master invia un comando, tutti gli slave ricevono in contemporanea quel comando per cui per decidere chi che dovr rispondere necessario predisporre una struttura software che gestisca questo aspetto. Esisono per dei chip che permettono la trasmissione cosidetta Full-Duplex. In questo caso non vengono usati 2 conduttori ma 4 (A,B,Z,Y) e le linee di trasmissione dei master sono collegate a quelle di ricezione degli slave. In questo modo trasmissione e ricezione possono avvenire in contemporanea, ma fate
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

molta attenzione perch solo una mezza verit. Infatti solo un master alla volta potr trasmettere e solo uno slave alla volta potr rispondere, inoltre i master non sono collegati fra di loro e gli slave non sono collegati fra loro per cui nessun master conosce i dati inviati dagli altri e lo stesso avviene per gli slave. Nello schema qui a fianco potete vedere il tipico collegamento Full Duplex.

Ognuno ovviamente libero di usare lo schema che pi predilige in base alle proprie esigenze, ma nel mio caso avevo lesigenza di collegare pi centraline, ognuna indipendente e tutte in grado di conoscere lattivit delle altre. Questo il tipo di collegamento pi complesso, ma sicuramente il pi flessibile. In definitiva andremo ad usare una connessione RS485 half duplex multimaster, ossia una configurazione in cui tutte le schede possono decidere autonomamente quando cominciare una trasmissione
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

seriale e tutte vedono le trasmissioni delle altre. A questo punto sorge spontanea una domanda: come facciamo a decidere chi pu trasmettere e soprattutto quando?.

MAX485 SN75176
I nomi qui sopra altro non sono che alcuni comuni chip in grado di creare un punto di comunicazione RS4585 half duplex. Ho scelto questi due in quanto sono i pi facilmente reperibili sul mercato e sono intercambiabili in quanto hanno il medesimo pinout (i pin di uscita sono nelle stessa posizione e funzionano nello stesso modo). Per praticit mi riferir al max485, ma quanto scritto vale per entrambi. Qui vicino vi ripropongo lo schema classico del chip. Come potete vedere ci sono ci sono 8 pin di cui i classici VCC (5V) e GND per alimentazione e massa. Fate attenzione che esistono anche altri chip con alimentazione diversa dai 5V. Come vedete ci sono le linee A e B per la comunicazione differenziale di cui accennavamo sopra. Vediamo ora gli altri 4.
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

DE (Driver Output Enable): Quando viene messo a livello alto il chip viene attivato quale output, ossia per inviare dati. Viceversa quando allo stato basso il chip funziona da ricevente per i dati inviati da altri. V da se che solo un chip sulla linea potr essere a livello HIGH nel medesimo istante in quanto, come abbiamo detto, solo un chip alla volta pu trasmettere dati. RE (Receiver Output Enable): Quando messo a livello basso il chip in grado di ricevere dati dalla linea differenziale. DI (Driver Input): riceve i dati da inviare per cui sar collegato alla linea TX della UART del nostro Arduino RO (Receive Output): In questo pin arrivano i dati letti dalla linea differenziale, per cui andr connesso alla linea RX della UART di Arduino. Se A > di B si almeno 200mV RO sar allo stato alto, viceversa se A < B di almeno 200mV sar allo stato basso.

La via pi semplice
La via in assoluto pi semplice per inviare e ricevere dati
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

utilizzare un pin digitale aggiuntivo di controllo collegato direttamente a DE ed RE. Quando questo posto altro il chip sar pronto alla trasmissione di dati mentre quando sar basso verr usato per la ricezione. In genere si usa questo sistema nelle comunicazioni master-multislave. Gli slave restano in ricezione ed il master in trasmissione. Quando il master ha trasmesso e si aspetta una risposta va in ricezione e lo slave che deve rispondere passa in trasmissione, per poi tornare allo stato originario quando la comunicazione terminata. I lati negativi sono legati al fatto che usiamo un pin digitale aggiuntivosu ogni scheda ed ogni volta che decidiamo di inviare o ricevere dati dobbiamo ricordarci di settare per primo quel pin costruendo apposite routines software. Inoltre questo sistema funziona in maniera semplice con la configurazione master-multislave, ma se volete usare una configurazione multimaster siete costretti a ricorrere a complicati algoritmi software per evitare i conflitti.

Una via alternativa


Se ci interessasse la via pi semplice non avrebbe avuto molto senso scrivere questo articolo, internet ne gi piena, sarebbe lennesimo inutile copia-incolla. Durante lo
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

sviluppo del mio progetto mi sono imbattuto in una tecnica che da un lato aggiunge complessit hardware, dallaltro fa risparmiare risorse e riduce la complessit migliorando laffidabilit del software. Non voglio dire che sia una via migliore o peggiore, solo una via diversa per risolvere lo stesso problema delegando allhardware ci che prima facevamo via software. Vorrei specificare che non una mia invenzione, ho solo ripreso un articolo di Jan Axelson ritenendo che la sua soluzione fosse quando di pi adatto potessi trovare per il mio progetto. Il concetto di per se estremamente semplice, ossia, anzich sprecare un pin digitale per dire al nostro chip se ricevere o inviare dati, facciamo si che di base li riceve e non appena inviamo dati sulla uart commuta il chip 485 per inviare dati. Per farlo utilizziamo un NE555 di cui abbiamo parlato in questo articolo in configurazione monostabile. In pratica non appena dalla UART viene intercettato il fronte di discesa del bit di start, loutput del 555 mette il max485 in uno stato di invio. Non appena arriva il bit di stop o un fronte di salita lNE555 f si che entro 40microsecondi venga commutato lo stato del max485 dalla trasmissione alla ricezione. Il tempo di 40microsecondi corrisponde a circa mezzo bit nella trasmissione a 9600baud. La domanda che potrebbe
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

sorgere spontanea : ma ogni volta che ho un fronte di salita mi si chiude la connessione? In effetti cos, ma nello stato base il segnale alto per cui non ha alcuna importanza se il chip in trasmissione si momentaneamente messo in ricezione, limportante che i destinatari vedano il segnale alto, poi se c un nuovo zero da inviare lNE555 riattiva la trasmissione del max485. Ora vediamo lo schema con le varie connessioni: Be Sociable, Share!

Tw eet

Like

Share

Articoli correlati:
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

1. 1wire microlan introduzione e convertitore seriale 2. 74HC165: come espandere gli ingressi digitali di Arduino. Related posts brought to you by Yet Another Related Posts Plugin.

Stefano

Stefano Smania, medico radiologo Programma in C dalla fine degli anni 80. Ha conoscenze discrete di C++, php, javascript, html, sql. Possiede approfondite conoscienze sullo standard DICOM. Bazzica con l'elettronica e unisce le diverse passioni in un progetto di domotica. Ha realizzato da solo un piano della propria casa, dal rivestimento termico, ai muri interni, l'impianto elettrico e domotico, idraulico, riscaldamento a pavimento, infissi e quant'altro vi venga in mente. Gli piace cucinare ma ha poco tempo per applicarvisi. Scrive questi articoli nella speranza che servano a qualcuno
Posted by Stefano at 00:58 Tagged w ith: arduino, multimaster, ne555, rs485

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Leave a Reply
You must be logged in to post a comment.

IteadStudio 2.8 TFT Display shield sia su Arduino UNO che su Mega 2560

(Italiano) Arduino cos? (per principianti e anche meno)

2011 McMajan

Suffusion theme by Sayontan Sinha

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com