vendredi 30 août 2013

Comment utiliser le MCP23017 I2C Port Expander Avec le Raspberry Pi - Partie 1

Pour tout mes projets, j'ai utiliser le GPIO en standard avec ses entrées et ses sorties.
Cela donne un total de 17 broches pour jouer, mais comment faire si vous avez besoin de plus ?

La manière la plus rapide pour avoir plus d'entrées et de sorties est d'utiliser un "I/O Port Expander". Cet un appareillage qui vous permet de contrôler un nombre de ports utilisant les données que vous envoyer à ce périphérique.

D'autres personnes ont eu déjà beaucoup de succes en uilisant les périphériques I2C, c'est ainsi que j'ai décidé d'en tester un.
I2C est un protocole de communication série qui permet aux puces d'échanger des données sur le même bus. 
Un "Port Expander" prend les données et contrôle les broches appropriées. Cela permet à beaucoup de capteurs et de dispositifs pour être contrôlés en utilisant seulement quelques-uns des axes de l'IP GPIO. 

La configuration matérielle.

Le dispositif que j'ai choisi est une extension I2C MCP23017 de port avec un total de 16 ports. Pour piloter ce dernier, vous utilisez les deux broches I2C sur GPIO l'en-tête du Pi (broches 3 et 5). Cela nous donnerait 31 (15 + 16) entrées ou sorties pour jouer avec!


Il est effectivement possible de piloter plusieurs extensions de port vous donner un énorme coup de pouce du nombre d'entrées ou de sorties. Ajout d'un autre MCP23017 augmenterait le nombre GPIO 31 à 47 (15 + 16 + 16). Le tout pour quelques euros.

Le grand avantage de ces dispositifs est qu'ils ne coûtent pas cher (+/- 5€ pièce) et nécessitent très peu de composants externes.

Dans cet exemple, j'ai 3 LED et un bouton poussoir raccordé à l'appareil qui est entraînée par les deux broches I2C sur le Pi:


Broche 9 (VDD) est connectée à 3,3 V
Broche 10 (VSS) est reliée à la masse
Broche 12 (SCL) est relié à la broche 5 sur la Pi GPIO 

Broche 13 (SDA) est relié à la broche 3 sur la Pi GPIO 
Broche18 (Reset) doit être placée très haut pour un fonctionnement normal si nous raccorder à 3.3V
     Les broches 15, 16 et 17 (A0-A2) déterminent le nombre affecté à cet appareil. Nous n'utilisez qu'un seul dispositif de sorte que nous allons lui donner un zéro binaire en mettant ces trois épingles à 0 (masse)


 




Voici une photo de mon circuit d'essai construit sur un petit morceau de plaque d'essai:


 La configuration logicielle.

Pour utiliser I2C sur le Pi vous devez activer quelques choses dans Raspbian qui n'est pas activée par défaut. C'est un processus assez facile. D'abord, vous devez éditer le fichier modules utilisant: 

sudo nano /etc/modules
 
and add the following two lines :
 
i2c-bcm2708
i2c-dev

Utilisez CTRL-X, puis Y, puis Retour pour enregistrer le fichier et de sortie.

Ensuite, vous devez modifier le fichier de liste noire des modules:
sudo nano / etc / modprobe.d / Raspi-blacklist.conf

et de mettre un symbole # au début des deux lignes de sorte qu'ils ressemblent à ceci:
# blacklist spi-bcm2708
# blacklist i2c-bcm2708

Utilisez CTRL-X, puis Y, puis Retour pour enregistrer le fichier et de sortie.  
La dernière étape consiste à installer des services publics, nous pouvons utiliser 
pour tester notre configuration I2C:

sudo apt-get install i2c-tools python-smbus

Une fois cette opération terminée, vous pouvez éteindre votre Pi en utilisant:

sudo halt

Attendez dix secondes, couper l'alimentation de votre Pi et 
vous êtes maintenant prêt à raccorder votre circuit.
 
Tester le matériel. 
 
Une fois que vous avez connecté votre matériel et fait une double vérification du câblage.  
Assurez-vous que 3.3V va aux broches correctes et vous avez pas les courts-circuits . 
Alimentez le Pi et attendez qu'il démarre .
Si vous avez un Rev 2 Pi puis tapez la commande suivante :
sudo i2cdetect - y 1
Si vous avez un Rev 1 Pi puis tapez la commande suivante :
sudo i2cdetect - y 0
Pourquoi cette différence? Entre le Rev 1 et Rev 2 versions du Pi ils ont changé les signaux qui sont allés 
aux broches 3 et 5 sur l'en-tête GPIO . 
Cela a changé le numéro du périphérique qui doit être utilisé avec I2C de 0 à 1 .
J'ai utilisé un Rev 1 Pi et ma sortie ressemble à ceci :
 
 pi @ RaspberryPi ~ $ sudo i2cdetect - y 0
      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F 
00:           -- -- -- -- -- -- -- -- -- -- -- -- --
10:  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20:  20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30:  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40:  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50:  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60:  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70:  -- -- -- -- -- -- -- -- 
 
Cela montre que j'ai un appareil connecté et son adresse est 0 × 20 (32 en décimal) .  
C'est parce que les trois broches d'adresse sont attachées bas .  
Si vous réglez A0 élevé l'adresse deviendrait 0 × 21 (33 en décimal) .  
Comment vous définissez A0, A1 et A2 est à vous, mais tous vos périphériques I2C doivent avoir 
une adresse unique. 
Test de ligne de commande
Pour faire un test rapide , nous pouvons utiliser la ligne de commande pour activer la LED sur GPA0 :
Nous avons d'abord configurer le port A broches GPA0 - 6 comme sorties et GPA7 comme entrée. 
 (10000000 en binaire et 0 × 80 en hexadécimal ) :
i2cset -Y 1 0x20 0x80 0x00
Ensuite, nous avons mis en GPA0 à haute logique qui permettra à la LED:
i2cset - y 1 0x20 0x14 0x01
Pour éteindre la LED que nous utilisons:
i2cset - y 1 0x20 0x14 0x00
N'oubliez pas de remplacer le 1 par un 0 si vous utilisez une carte 1 Rev .
Il est temps de commencer à utiliser ces GPIOs supplémentaires ...

Découvrez comment faire pour utiliser un MCP23017 duplicateur de port I2C avec le 
Raspberry Pi - Partie 2 pour savoir comment vous pouvez contrôler les sorties en utilisant des scripts Python.
 
  
Découvrez comment faire pour utiliser un MCP23017 duplicateur de port I2C avec le
 Raspberry Pi - Partie 3 pour savoir comment vous pouvez contrôler les entrées à l'aide de scripts Python . 
 
Voici quelques photos de mon circuit d'essai de référence : 
  
 
Traduction CBO, de la source : 


Aucun commentaire:

Enregistrer un commentaire