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?
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 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.
Lucailvec:
nel datasheet del componente non spiega nessun metodo ? ]
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
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.
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 SCLSDA 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.
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