MCP23017-Plusieurs

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Introduction

Un MCP23017 c'est bien... mais plusieurs MCP23017 c'est mieux!

Avec 3 MCP23017 il est possible de commander jusqu'à 48 entrées sorties. Mais pour qu'ils partagent le même même bus I2C, il faut qu'ils aient chacun une adresse I2C différentes.

Un autre cas de figure qui peut se présenter: c'est qu'un autre composant sur le bus I2C utilise déjà l'adresse 0x20 par défaut. Dans ce cas, il faut également changer l'adresse du MCP23017.

Changer l'adresse

L'adresse I2C se configure sur les broches A0, A1, A2.

L'adresse de base du MCP23017 est 0x20 à laquelle s'ajouter la valeur calculée à partir des bits d'adresse.

MCP23017-layout.jpg

Lorsque l'on raccorde les 3 broches A0, A1 et A2 sur GND/Masse alors le MCP utilise l'adresse par défaut qui est 0x20 + (bit d'adresse=0).

Chacune des broches Ax ont une valeur particulière qui intervient dans le calcul d'adresse si la broche est raccordée sur +5V:

  • A0 = 1
  • A1 = 2
  • A2 = 4

Si A0 et A2 sont raccordés sur +5v alors l'adresse est: 0x20 + Valeur de A0 + Valeur de A2 = 0x20 + 1 + 4 = 0x20 + 5.

Si A1 et A2 sont raccordés sur +5v alors l'adresse est: 0x20 + Valeur de A1 + Valeur de A2 = 2 + 4 = 0x20 + 6.

Si A0, A1 et A2 sont raccordés sur +5v alors l'adresse est: 0x20 + Valeur de A0 + Valeur de A1 + Valeur de A2 = 0x20 + 1 + 2 + 4 = 0x20 + 7

Exemple pratique

Sur base des calculs d'adresses précédent, nous allons présenter un exemple de montage pratique correspondants.

  • IC1 avec Adresse 5 - Led sur GPA0 (broche 21 du 1ier MCP23017)
  • IC2 avec Adresse 6 - Led sur GPA1 (broche 22 du 2ieme MCP23017)
  • IC3 avec Adresse 7 - Led sur GPA6 (broche 27 du 3ieme MCP23017)

Notez les raccordements respectifs des broches A0, A1 et A2 sur IC1, IC2 et IC3.

MCP23017-SeveralMCPs.jpg

Code

L'exemple de code didactique suivant montre comment activer les LEDs sur les 3 MCP23017 branché ci-dessus.

/* Exemple SeveralMCP23017.pde
   Utilise la librairie Adafruit-MCP23017 pour démontrer l'utilisation de plusieurs MCP23017 sur
   un seul bus I2C. 
   
   Code écrit par Meurisse D. pour MCHobby.be [www.mchobby.be], Licence CC-BY-SA
   
   TUTORIEL complémentaire EN FRANCAIS par MCHobby.be sur (voir wiki pour licence tutoriel)
      http://mchobby.be/wiki/index.php?title=MCP23017

   Acheter un MCP23017
      http://shop.mchobby.be/product.php?id_product=218
*/
   
#include <Wire.h>
#include "Adafruit_MCP23017.h"

// Test de base d'ecriture d'état pour trois "MCP23017 I/O expander" partageant un même bus I2C
//
// Raccordements: http://mchobby.be/wiki/index.php?title=MCP23017-Plusieurs
Adafruit_MCP23017 mcp1;
Adafruit_MCP23017 mcp2;
Adafruit_MCP23017 mcp3;
  
void setup() {
  mcp1.begin(5); // Utilise l'adresse 0x20 + 5 pour IC1
  mcp2.begin(6); // Utilise l'adresse 0x20 + 6 pour IC2
  mcp3.begin(7); // Utilise l'adresse 0x20 + 7 pour IC3

  // Définir la sortie #0 (GPA 0, broche 21) sur IC1 comme sortie
  mcp1.pinMode(0, OUTPUT); 
  // Définir la sortie #1 (GPA 1, broche 22) sur IC2 comme sortie
  mcp2.pinMode(1, OUTPUT); 
  // Définir la sortie #6 (GPA 6, broche 27) sur IC3 comme sortie
  mcp3.pinMode(6, OUTPUT); 
}


// Activer/désactiver la sortie #0 du MCP toutes les 100 millisecondes

void loop() {
  delay(1000); // Attendre 1000ms
  mcp1.digitalWrite(0, HIGH); // Activer sortie sur IC1
  delay(300);
  mcp2.digitalWrite(1, HIGH); // Activer sortie sur IC2
  delay(300);
  mcp3.digitalWrite(6, HIGH); // Activer sortie sur IC3
  
  delay(1000); // Attendre 1s (1000ms)
  mcp1.digitalWrite(0, LOW); // Désactiver sortie sur IC1
  delay(300);
  mcp2.digitalWrite(1, LOW); // Désactiver sortie sur IC2
  delay(300);
  mcp3.digitalWrite(6, LOW); // Désactiver sortie sur IC3
}


Source: Librairie MCP23017 d'AdaFruit Industries

Tutoriel réalisé par Meurisse D pour MCHobby basé sur la librairie MCP23017 de LadyAda (AdaFruit Industries).

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.