Collegare dispositivi I2C

Da raspibo.
Jump to navigation Jump to search

I2C e' un bus composto da due fili (oltre il filo di massa): il filo dati e il filo clock. Possiamo dire che I2C e' una rete per circuiti integrati.

Il nostro Raspberry PI ha due bus I2C, uno e' disponibile sul pettine di contatti per i nostri giochi.

Fra la revisione A e la revisione B del Raspberry PI hanno invertito i bus:

  • Nella revisione A: il bus 0 e' per le sperimentazioni.
  • Nella revisione B: il bus 1 e' per le sperimentazioni (il bus 0 sarebbe disponibile sul bus P5, occorre saldare un pettine per i contatti).

Il mio consiglio per fare esperimenti sul bus (o sui bus) I2C e' di installare il pacchetto con gli strumenti (tool) per I2C.

sudo apt-get install i2c-tools

Occorre poi caricare i moduli per usare I2C a livello utente:

$ sudo bash
# modprobe i2c_dev
# modprobe i2c_bcm2708

Se tutto va bene si puo' usare il comando i2cdetect per controllare le unita' collegate:

# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

(per le schede rev.A usare -y 0 al posto di -y 1 in tutti i comandi da qui in poi).

Il sistema non vede nessun integrato collegato al bus, infatti non abbiamo ancora collegato nulla.

A questo punto basta collegare gli integrati I2C in modo che:

  • Il pin di massa dell'integrato sia attaccato alla massa del Raspberry PI (Pin. 6)
  • Il pin di alimentazione sia collegato a +3.3v (Pin. 1 del Raspberry PI o in qualche modo sia alimentato a 3.3v)
  • Il pin SDA (dati) dell'integrato sia collegato al pin 3
  • Il pin SCK (clock) dell'integrato sia collegato al pin 5.

E' comodo collegare per esempio le schede di JeeLabs in questo modo:

  • PWR (indicato con P sul circuito stampato) al PIN 2 del Raspberry PI, +5v
  • DIO (indicato con D sul circuito stampato, per le unita' I2C e' SDA) al PIN 3 del Raspberry PI
  • GND (indicato con G sul circuito stampato) e' la massa, collegatela al PIN 6
  • +3v (indicato con + sul circuito stampato),e' la tensione 3.3v, va collegata al PIN 1
  • AIO (indicato con A sul circuito stampato, per le unita' I2C e' SCK) al PIN 5 del Raspberry PI
  • IRQ (indicato con I sul circuito stampato), serve per segnali di interruzione, per applicazioni evolute si puo' collegare a un gpio libero per fare in modo che l'unita' I2C attiri l'attenzione del Raspberry PI nel caso di un evento. Per ora si puo' lasciare scollegato.

NOTA IMPORTANTE: I2C e' uno standard di segnalazione (protocollo di comunicazione liv. 1 e 2) ma non stabilisce la tensione di lavoro. Esistono schede (e.g. per il vecchio arduino) che funzionano a 5V. NON SI POSSONO COLLEGARE AL RASPBERRY PI se non tramite un circuito di conversione della tensione di segnalazione. Attaccate solo circuiti che usano I2C a 3.3v altrimenti potete danneggiare il vostro Raspberry PI Piu' schede I2C possono essere collegate in parallelo. Occorre fare due considerazioni:

  • Se volete usare il pin IRQ, quello deve essere portato a un GPIO diverso per ogni scheda
  • Se mettete molti integrati attacati al bus I2C la corrente fornita dal Raspberry PI potrebbe non essere sufficiente, occorre studiare un circuito alternativo per l'alimentazione.

Se per esempio mettete opportuni ponticelli