Comunicazione I2C a distanze elevate

Grazie per la rapidissima risposta :slight_smile:
Da quanto ho capito per comunicare via RS485 ho bisogno di un chip..
Sapresti indicarmi quale e come usarlo?
Grazie :slight_smile:

QUI trovi una breakout board già fatta che ti evita saldature di chip di tipo SOIC e simili.

Comunque, il chip da usare è il MAX485 (... o un equivalente) che trovi descritto QUI ed il cui datasheet è QUI.

Se cerchi con Google troverai molti esempi d'uso :wink:

Guglielmo

Perfetto!
Grazie :slight_smile:

Consiglio l'SN75176 come alternativa al MAX485, più economico e più immune ai disturbi della linea

Parliamo della disposizione dei cavi. Un sistema a stella dove tutti i cavi partono dal "master" e vanno ai vari "slave" puó non funziona bene.
Ciao Uwe

uwefed:
Parliamo della disposizione dei cavi. Un sistema a stella dove tutti i cavi partono dal "master" e vanno ai vari "slave" puó non funziona bene.

In realtà non fai una stella, ma un bus a 4 fili, un doppino TX ed un doppino RX (per avere il full-duplex) oppure un singolo doppino che raggiunge i vari devices (e lavori in half-duplex). Se le resistenze di terminazione sono messe bene e usi un protocollo affidabile, non hai alcun problema !

Ad esempio, su RS485, funziona bene il MODBUS di cui si trovano anche le librerie per Arduino :wink:

Guglielmo

Scusami Guglielmo
Se dal master partono tutti i collegamenti ai veri slave hai un collegamento stella indipendentemente se usi 4 o 2 fili.
o mi sbaglio??
Ciao Uwe

No Uwe, è un BUS, non una stella.

Dal master partono solo due fili intrecciati (il vecchio doppino), oppure 4 fili per il full-duplex (due coppie) e li mandi e li spezzi come ti pare. Il più lontano (l'ultimo) deve avere la resistenza di terminazione :wink:

Esempio Half-Duplex :

Esempio Full-Duplex :

Guglielmo

È proprio quelo che voglio dire.
Non funziona se usi dal master ad ogni slave un cavo dedicato.
Per avere un bus come é necessaro ( dove ogni slave é collegato con un cavo corto ai cavi che vanno dal master all'ultimo slave ) devi far passare il cavo dati attraverso tutta la casa da stanza a stanza.

Ciao Uwe

uwefed:
È proprio quelo che voglio dire. ...

Ah ... ok ... basta capirsi :grin: :grin: :grin:

E comunque SI, devi partire con un doppino e, in un modo o nell altro (puoi fare una dorsale e delle ramificazioni), devi arrivare a tutte le stanze. Ma questo penso che turipassaro lo immaginasse visto che .... voleva usare I2C XD XD XD

Guglielmo

In attesa dell'arrivo dei MAX485 pensavo (così in teoria XD ) alla realizzazione di un sistema "fatto in casa"..
Nel mio caso ad esempio io devo comunicare solo l'accensione e lo spegnimento dei vari relè, non potrei quindi creare un ciclo for che spenga e accenda un pin un tot di volte sul master e contarle sullo slave?
Salvo

E come stabilisci l'inizio e la fine della sequenza? Ed in caso di un disturbo sulla linea, come te ne accorgi che un impulso si è inserito in mezzo alla sequenza?
Forse con 2 linee, una da tenere alta durante la trasmissione ed una per l'invio dei dati.

PS:
tenendo comunque conto che con 5V non so se percorri pulito più di qualche decina di metri, dovresti usare almeno segnali a 12V.

turipassaro:
non potrei quindi creare un ciclo for che spenga e accenda un pin un tot di volte sul master e contarle sullo slave?

NO, in un ambiente "reale" (... e non sul tavolino del laboratorio) l'affidabilità di un detto sistema è praticamente pari a ZERO ! ... oltre alla complicazione di gestire e sincronizzare correttamente il tutto ...

Guglielmo

leo72:
E come stabilisci l'inizio e la fine della sequenza? Ed in caso di un disturbo sulla linea, come te ne accorgi che un impulso si è inserito in mezzo alla sequenza?
Forse con 2 linee, una da tenere alta durante la trasmissione ed una per l'invio dei dati.

Infatti io pensavo ad una cosa con due linee una HIGH in trasmissione..
Però per la lunghezza e l'affidabilità non saprei come fare XD
Salvo

turipassaro:
Però per la lunghezza e l'affidabilità non saprei come fare XD

Come t'ho detto, lascia stare e usa "protocolli" affidabili ed ampiamente collaudati.

Guglielmo

Nel mio progetto userò sicuramente i MAX485 (che lente le poste italiane! XD) ma, essendo in attesa, ho buttato giù un po' di codice.
Il tutto funziona ma in effetti riscontro un po' di "scomodità":

  • i tempi di trasmissione diventano un po' lunghetti;
  • Il mio codice usa le pull-up interne all'atmega qundi non penso possa percorrere distanze elevate (i miei test avvengono a circa 10cm di distanza XD)

Ci ho comunque provato..

turipassaro:
Ci ho comunque provato...

Hai fatto bene ... in ogni caso è "sperimentazione" (... ed esperienza) :wink:

Guglielmo

Arrivati finalmente i MAX485! :smiley: :smiley:
Sapreste darmi delle indicazioni su come interfacciarli con l'arduino (collegamenti) e qualche libreria?
Grazie
Salvo

Risolto con la libreria SoftwareSerial! :smiley: :smiley:
Grazie a tutti dell'aiuto!
Salvo