I2C multi slave

salve.
sono appena entrato nel mondo Arduino.
Siccome è un po che ho in mente un progettino ho detto perché non provarci e mi sono preso un Arduino Due.
per ora la mia idea era collegare, tramite protocollo I2C, diverse periferiche, sia per capire un po il tutto sia per portare avanti il mio progetto.
le periferiche in questione è un RTC e un MLX90614.
quello che non riesco a comprendere è come riesco a capire, dopo aver eseguito la scansione degli indirizzi validi sulla rete I2C, a quale dispositivo corrisponde un determinato indirizzo.
anche nel caso ad esempio avessi due MLX90614.

ciao

F4LK0:
...
quello che non riesco a comprendere è come riesco a capire, dopo aver eseguito la scansione degli indirizzi validi sulla rete I2C, a quale dispositivo corrisponde un determinato indirizzo.
anche nel caso ad esempio avessi due MLX90614.

Ciao,

l'indirizzo è fissato dal produttore del componente I2C ... a volte tale indirizzo è selezionabile (entro certi limiti imposti sempre dal costruttore).
Se il componente che monti NON ha la possibilità di cambiare indirizzo ... bé ... semplicemente NON ne puoi montare due perché risponderebbero contemporaneamente alle richieste :wink:

Il MLX90614, ha un registro nella EEPROM (dovrebbe essere quello all'indirizzo di EEPROM 0x0E) dove puoi assegnarli l'indirizzo voluto (0x00 .. 0x7F) e quindi, assegnando a ciascuno un differente indirizzo, puoi averne contemporaneamente fino a 127 :slight_smile:

Guglielmo

e ok questa mi sembra sensata :D.
quindi nel caso avessi stessi indirizzi potrei pensare di "accendere/spegnere" il sensore A quando devo leggere il B e viceversa. ma nel caso si hanno due sensori differenti con indirizzi differenti come posso capire a quale sensore corrisponde l'indirizzo X.
spero di non dire cavolate atroci.

ciao

Mmm ... come fai a "spegnere ed accendere" un sensore ? Ti metti a gestire tutta una logica di alimentazione per dargli e toglierli corrente o per separalo fisicamente dal bus ??? :astonished:

Semplicemente ... NON puoi avere due sensori con lo stesso indirizzo.

L'indirizzo lo trovi nelle caratteristiche del sensore che ti da il costruttore ... leggere e studiare sempre i datasheet !!! :wink:

Guglielmo

F4LK0:
come posso capire a quale sensore corrisponde l'indirizzo X.

Puoi anche usare lo sketch I2C scanner :wink:

cece99:
...
Puoi anche usare lo sketch I2C scanner :wink:

Ma quello è uno scan del bus ... ti dice SOLO che c'è un qualche cosa all'indirizzo 0xXX ma ... se hai più sensori, non ti dice a cosa corrisponde ogni indirizzo trovato :wink:

Guglielmo

cece99:

F4LK0:
come posso capire a quale sensore corrisponde l'indirizzo X.

Puoi anche usare lo sketch I2C scanner :wink:

dal datasheet si lo so, è che pensavo fosse possibile poterlo sapere anche da protocollo.

comunque ho anche visto che i MLX90614 forniscono la possibilità di cambiare il loro SA. e gia qui non sarebbe male.

cece99:

F4LK0:
come posso capire a quale sensore corrisponde l'indirizzo X.

Puoi anche usare lo sketch I2C scanner :wink:

e infatti....ma come dice gpb01 cosi mi ritrovo gli indirizzi connessi al bus e no a chi corrisponde l'indirizzo.....

quindi ho capito che devo conoscere a priori l'associazione indirizzo e dispositivo. e non puo essere fatta dinamicamente con qualche procedura di scanner.

F4LK0:
...
quindi ho capito che devo conoscere a priori l'associazione indirizzo e dispositivo. e non puo essere fatta dinamicamente con qualche procedura di scanner.

Si, esatto, non è normalmente previsto che il modulo risponda fornendo un identificativo del modello del sensore quindi ... lo devi sapere :wink:

Come ho già scritto e ribadisco sempre ... bisogna studiare i datasheet !!! :slight_smile:

Guglielmo

F4LK0:
dal datasheet si lo so, è che pensavo fosse possibile poterlo sapere anche da protocollo.

Alcuni componenti I2C, in particolar modo i sensori, possono fornire su richiesta del master un ID prodotto, in pratica se il componente ha questa funzionalità una volta trovati i vari address I2C è possibile interrogarli per ottenere l'ID, la procedura non è standard quindi tocca prevedere tutte le varie possibilità in base all'hardware che si prevede di collegare.
In tutti i casi è meglio pianificare prima gli address dei device, con relativa mappa in memoria del micro, in modo che semplicemente interrogando l'address è possibile sapere sia se il dispositivo è collegato al bus e di cosa si tratta.

grazie a tutti ora ho le idee più chiare a riguardo.