Go Down

Topic: I2C multi slave (Read 848 times) previous topic - next topic

F4LK0

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

gpb01

#1
Aug 02, 2013, 01:54 pm Last Edit: Aug 02, 2013, 02:05 pm by gpb01 Reason: 1

...
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 ;)

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 :)

Guglielmo
Search is Your friend ... or I am Your enemy !

F4LK0

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

gpb01

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 ???  :smiley-eek:

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 !!! ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

cece99


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

Puoi anche usare lo sketch I2C scanner ;)
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

gpb01


...
Puoi anche usare lo sketch I2C scanner ;)


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 ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

F4LK0



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

Puoi anche usare lo sketch I2C scanner ;)


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.

F4LK0



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

Puoi anche usare lo sketch I2C scanner ;)


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.


gpb01


...
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 ;)

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

Guglielmo
Search is Your friend ... or I am Your enemy !

astrobeed


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.

F4LK0

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

Go Up