Salve ragazzi ho qualche domandina da fare sull' i2c!
E' possibile collegare più dispositivi che comunicano tramite il protocollo i2c ad un solo dispositivo?
Faccio un esempio, io voglio collegare un E2PROM ed il Nunchuck (wii) al mio arduino uno, come posso fare?
E' possibile far comunicare 2 o più arduino tramite i2c (o qualsiasi altro protocollo seriale) fra di loro?
L'I2C è un bus comune su cui un dispositivo può essere sia Master (quindi inviare richieste di dati) sia Slave (quindi inviare dati su richiesta).
Ogni dispositivo è identificato da un indirizzo univoco (fornito dal costruttore, disponibile sul datasheet), alle volte composto da una parte fissa ed una variabile (mediante collegamento dei pin a GND e Vcc) per permettere il collegamento di più componenti (ad esempio le EEPROM I2C).
Quindi la risposta è SI', puoi mettere più dispositivi su un bus I2C e poi programmare il tutto per poter dialogare tra di loro.
leo72:
L'I2C è un bus comune su cui un dispositivo può essere sia Master (quindi inviare richieste di dati) sia Slave (quindi inviare dati su richiesta).
Ogni dispositivo è identificato da un indirizzo univoco (fornito dal costruttore, disponibile sul datasheet), alle volte composto da una parte fissa ed una variabile (mediante collegamento dei pin a GND e Vcc) per permettere il collegamento di più componenti (ad esempio le EEPROM I2C).
Quindi la risposta è SI', puoi mettere più dispositivi su un bus I2C e poi programmare il tutto per poter dialogare tra di loro.
Può esserci solo un master?
E come dovrei collegare?
I pin di clock (di tutti i componenti) insieme e i pin dati tutti insieme?
Certo che può esserci solo un Master: generalmente è il microcontrollore, dato che puoi programmarlo, mentre i dispositivi come le memorie o i sensori sono "passivi" nel senso che inviano dati su richiesta.
Colleghi tutto con 2 fili, mettendo tutti i pin SDA insieme e tutti i pin SCL insieme.
Ricordati che devi anche mettere 2 resistenze di pull-up su entrambe le linee (SDA e SCL) perché il bus I2C necessita di una tensione minima. Il valore dipenderebbe dalla distanza fra i vari componenti e dal numero dei componenti. Un valore fra 1,5K e 4,7K è comunque buono.
Federico: @leo la questione del "mentre scrivevi qualcuno ha scritto, vuoi rivedere il tuo messaggio" e' un gran casino anche per me...
+1
è un casino per tutti, stai lì mezzora ad elaborare e rivedere una risposta esaustiva e poi devi leggere cosa hanno scritto gli altri per non fare la figura del duplicone; se si togliesse forse non si eviterebbero quei rarissimi casi di risposte identiche, ma almeno uno pubblica in pace ciò che vuole, ad eliminare/correggere un nostro post ci siamo sempre, no?
E se dovessi collegare più arduino? Come faccio a stabilire qual'è il master e quale lo slave?
E come faccio a dare un comando ad una sola periferica? Cioè, come la identifico?
Altri arduino saranno specificati come slave, lo devi stabilire arbitrariamente tu quale sia lo slave e quale il master.
I varii componenti del tuo bus i2c vengono identificato con un indirizzo univoco.
Leggi lo sketch di esempio che e' incluso con il software di arduino, sotto Examples-Wire-Master (e Slave) Sender e Receiver per averne un'idea piu' chiara!
Fede
Federico:
Altri arduino saranno specificati come slave, lo devi stabilire arbitrariamente tu quale sia lo slave e quale il master.
I varii componenti del tuo bus i2c vengono identificato con un indirizzo univoco.
Leggi lo sketch di esempio che e' incluso con il software di arduino, sotto Examples-Wire-Master (e Slave) Sender e Receiver per averne un'idea piu' chiara!
Fede
Grazie mille, ho visionato gli esempi ed ora è tutto più chiaro