[I2C]Gestione di piu dispositivi con medesimo indirizzo

Salve, ultimamente sto studiando la comunicazione TWI gestita dal Atmega328p in particolare il protocollo I2C, prima di spingermi a sperimentare ho deciso di acquistare un modulo basato sul ADXL345 ma mi trovo davanti ad un dubbio.
Se ogni componente ha già un indirizzo definito (quello del ADXL345 0x1D) se io in un singolo bus inserisco 3 di questi sensori come posso controllarli indipendentemente?

Grazie

da elettronico potresti bypassare i segnali mettendo in AND il segnale di data e quindi costruirti un minidecoder che attivi lo slave che vuoi te :smiley: oppure chiedi a san google...di solito si manifesta in forme sempre diverse ...

Da san Google mi sono subito presentato con la richiesta di modificare l'indirizzo del componente, ma non sembra possibile, ora proviamo con la gestione separata, vediamo se ha idee, se no riporrò la domanda XD

Edit:
San Google mi riferisce che la soluzione è NON usare componenti con il medesimo indirizzo.... un po deludente.

nel datasheet del componente non spiega nessun metodo ? ]:slight_smile:

Esistono anche dei Multiplexer per il I2C.

PCA9548A multiplexer: http://www.nxp.com/documents/data_sheet/PCA9548A.pdf I2C Multiplexer Shield Testing – Kerry D. Wong How to use multiple accelerometers on arduino MEGA through I2C - Sensors - Arduino Forum

Si sceglie con 3 Pin uno dei 8 Bus "secondari".
Ciao Uwe

Lucailvec:
nel datasheet del componente non spiega nessun metodo ? ]:slight_smile:

Sul data sheet c'è scritto chiaramente che l'ADXL345 dispone di due address I2C selezionabili tramite il pin "ALT ADRESS", ovvero puoi usare due ADXL345 sullo stesso bus I2C.

RobertoBochet:
Da san Google mi sono subito presentato con la richiesta di modificare l'indirizzo del componente, ma non sembra possibile, ora proviamo con la gestione separata, vediamo se ha idee, se no riporrò la domanda XD

Edit:
San Google mi riferisce che la soluzione è NON usare componenti con il medesimo indirizzo.... un po deludente.

Esistono 2 tipologie di indirizzi I2C, quelli composti da una unica parte non variabile e quelli composti da due parti di cui una fissa e una variabile. La parte variabile generalmente si modifica cambiando lo stato elettrico (high oppure low) ad uno o più pin esterni al componente. Ovviamente il componente deve prevedere questa possibilità. Come ti ha detto Astrobeed, per tua fortuna quello che vuoi usare tu prevede questa cosa :wink:

wow , affascinante il buffer per l'i2c mai visto in vita mia $) ma per l uso che ho e avrò nella mia vita si aggiungerà alle cose che ho in casa haha

astrobeed:
Sul data sheet c'è scritto chiaramente che l'ADXL345 dispone di due address I2C selezionabili tramite il pin "ALT ADRESS", ovvero puoi usare due ADXL345 sullo stesso bus I2C.

Proprio per questo parlavo di 3 sensori.

uwefed:
Esistono anche dei Multiplexer per il I2C.

PCA9548A multiplexer: http://www.nxp.com/documents/data_sheet/PCA9548A.pdf http://www.kerrywong.com/2012/10/08/i2c-multiplexer-shield-testing/ How to use multiple accelerometers on arduino MEGA through I2C - Sensors - Arduino Forum

Si sceglie con 3 Pin uno dei 8 Bus "secondari".
Ciao Uwe

Mi sembra una soluzione molto buona, certo un bus solo sarebbe tutta un altra cosa. Senti ma non riesco a capire bene il funzionamento, nel senso creo il bus principale con i pin SCL SDA del multiplexer con le classiche resistenze di pull up, poi questo RESET a cosa lo collego? Gli altri bus necessitano di altre resistenze di pull up indipendenti? Per selezionare il bus che mi interessa devo usare una combinazioni di low e high sui i pin A0 A1 A2 e poi le richieste sul bus le faccio come al solito, come se fosse un bus unico?
Scusate, non prendetemi per uno sfaticato ma ho sfogliato il datasheet e combinazione di inesperienza e un inglese non perfetto mi portano a queste domande.

Grazie a tutti.

No, con A0,A1 e A2 selezioni l' indirizzo I2C del PCA9548A. Il o i canale/i (possono essere attivi anche piú canali contemporaneamente) attivo/i lo selezioni via I2C.

An active LOW reset input allows the PCA9548A to recover from a situation where one of the downstream I2C-buses is stuck in a LOW state. Pulling the RESET pin LOW resets the I2C-bus state machine and causes all the channels to be deselected as does the internal Power-on reset function

Mettilo su HIGH, nei casi che un canale si blocca puoi resettare l' integrato.
Il canale puó lavorare anche a una tensione diversa da quello "primario". Se Arduino funziona a 5V ogni canale I2C puó essere messo indipendemente a una tensione diversa o uguale mettendo le resistenze pullup a quella tensione.
Ciao Uwe

Ottimo, grazie mille Uwe :slight_smile: