Utiliser un MCP23017 pour ajouter 16 entrées/sorties à votre Arduino

Cette fois, ce sont nos Arduinistes qui sont gâtés.
Nous venons de publier le tutoriel MCP23017 - GPIO Expander sur notre wiki

Derrière ce nom barbare et son prix démocratique se cache un outil important facile à mettre en oeuvre.
Voici quelques éléments de notre tutoriel.
Description
Le MCP23017 utilise 2 broches I2C pins (qui peuvent être partagées avec d'autres périphériques I2C), et en échange, il fournit 16 broches d'utilisation générale en plus.
MCP23017 disponible chez MCHobby

Ce composant est celui utilisé dans le shield LCD RGB pour contrôler l'afficheur LCD et le clavier (KeyPad) à 5 boutons. C'est un composant fiable et facile à mettre en oeuvre.
Chacune des 16 broches peut être configurée:
  • en entrée (input)
  • en sortie (output)
Chaque entrée est peut utiliser soit une pullup ou un drain ouvert (open drain).
Il est même possible d'obtenir un signal d'interruption via une broche externe lorsqu'une entrée change d'état... comme cela, il n'est nécessaire de continuellement vérifier l'état des entrées par votre programme (cette méthode s’appelle du "pooling" en anglais).

Fiche technique 
Layout du MCP23017 - cfr Tutoriel MCP23017

Les broches intéressantes sont les suivantes:

Alimentation

Attention de ne pas inverser le sens de raccordement.
  • VDD: Alimentation
  • VSS: GND, la masse.

Les entrées/Sorties

Notées GPAx et GPBx. Toutes les entrées/sorties GPAx sont codées sur un octet (byte) tandis que toutes les entrées/sorties GPBx sont codées sur un autre octets.
Si vous utilisez moins de 8 entrées/sorties, il est préférable de les regrouper sur GPAx... car du coup, elles peuvent toutes être commandées en même temps avec un seul octet.

Bus I2C

Le bus I2C est est pris en charge par les broches.
  • SCL : Signal d'horloge. SCL signifie Serial CLock ("horloge série" car ce signal cadence l'échange d'information sur le bus I2C).
    Connecté sur Arduino UNO A5
  • SDA : Signal de donnée. SDA signifie Serial DAta ("Donnée série car" car les données sont envoyée en série sur cette ligne).
    Connecté sur Arduino UNO A4

Changement d'adresse

Les circuits intégrés se trouvant sur un Bus I2C ont chacun une adresse (un peut comme un numéro de maison dans une rue). Cela permet de connecter plusieurs circuit sur un même bus (les même fils SDA et SCL) et de pouvoir s'adresser à un circuit bien particulier en utilisant sont adresse. Il ne peut pas y avoir deux circuits différents avec la même adresse sur le Bus.
Si l'on veut mettre plusieurs fois le même circuit sur un bus I2C alors il faut pourvoir en changer l'adresse... C'est justement la fonction des broches A0, A1, A2. Elle permet de modifier l'adresse par défaut du composant sur le Bus I2C. C point est abordé plus en détail dans le tutoriel.

Fiche technique

Vous pouvez trouver la fiche technique du MCP23017 ici.

Activer une sortie
Cet exemple présente le montage pour commander une broche du MCP23017 comme sortie.
Le but du montage est de faire clignoter une LED sur la sortie #0 (GPA0) du MCP27013.
Afin de rendre le fonctionnement du programme plus évident (ou vous assurer que le programme fonctionne bien sur votre Arduino), nous avons également fait clignoté la LED de votre Arduino (celle raccordée sur la sortie 13).

Exemple de montage en sortie sur le MCP23017 (crf Tutoriel MCP23017)

/* Exemple toggle.pde
   Utilise la librairie Adafruit-MCP23017 pour changer une sortie du MCP23017. 
   
   Code écrit par LadyAda pour AdaFruit Industries [www.adafruit.com], Domaine Publique
   
   TRADUCTION FRANCAISE par Meurisse D. pour MCHobby.be [www.mchobby.be], CC-BY-SA pour tâche de traduction.
   COMPLEMENT DU CODE   par Meurisse D. pour MCHobby.be [www.mchobby.be], Domaine publique... comme AdaFruit
   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://mchobby.be/PrestaShop/product.php?id_product=218
*/
   
#include 
#include "Adafruit_MCP23017.h"

// Test de base d'ecriture d'état pour un "MCP23017 I/O expander"
// Domaine publique (code d'origine)!

// Connectez la broche #12 du MCP23017 sur Arduino broche Analogique A5 (Horloge I2C, SCL)
// Connectez la broche #13 du MCP23017 sur Arduino broche Analogique A4 (Données I2C, SDA)
// Connectez la broche #15, 16 et 17 du MCP23017 sur DNG (Sélection de l'adresse)
// Connectez la broche #9 du MCP23017 sur 5V (Alimentation)
// Connectez la broche #10 du MCP23017 sur GND (Masse commune)

// Sortie #0 (GPA0) est sur la Broche 21 du MCP, vous pouvez y connecter une LED 
// ou autre choses (lui même raccordé vers la masse/GND)

// Ajout MCHobby:
// - Connectez la broche #18 du MCP23017 sur 5V (désactiver la ligne Reset)
// - Activer la broche 13 pour faire clignoter la LED sur la carte Arduino au même rythme
//   (sert de témoin d'exécution et permet de détecter les erreurs de montage.
// - Utiliser un délai de pause de 1 seconde au lieu de 100ms
//
Adafruit_MCP23017 mcp;
  
void setup() {
  mcp.begin(); // Utilise l'adresse par défaut qui est 0

  // Définir la sortie 13 comme sortie
  pinMode( 13, OUTPUT );

  // Définir la sortie #0 (GPA 0, broche 21) comme sortie
  mcp.pinMode(0, OUTPUT); 
}

Utiliser une broche comme entrée
Il est également possible d'utiliser les broches du MCP23017 comme entrée (en combinaison avec des sorties).
Commander une broche du MCP23017 comme entrée (cfr tutoriel MCP23017)

Ce point complémentaire, résistance de protection, code d'exemple sont tous disponible ici dans notre tutoriel 

Tutoriel
Notre tutoriel sur le MCP23017 est disponible ici. Il contient de nombreuses autres informations qui ne peuvent pas être reprises dans ce billet

Vous aimez notre documentation? Aidez nous à en produire plus en achetant vos produits chez MCHobby.

Où acheter
Le MCP23017 est disponible ici chez MCHobby