Différences entre versions de « MCP23017-Plusieurs »
(Page créée avec « {{MCP23017-NAV}} {{traduction}} {{MCP23017-TRAILER}} ») |
(→Code) |
||
(9 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{MCP23017-NAV}} | {{MCP23017-NAV}} | ||
− | {{ | + | == 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. | ||
+ | |||
+ | [[Fichier: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. | ||
+ | |||
+ | [[Fichier:MCP23017-SeveralMCPs.jpg]] | ||
+ | |||
+ | == Code == | ||
+ | L'exemple de code didactique suivant montre comment activer les LEDs sur les 3 MCP23017 branché ci-dessus. | ||
+ | |||
+ | <nowiki>/* 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 | ||
+ | } | ||
+ | </nowiki> | ||
{{MCP23017-TRAILER}} | {{MCP23017-TRAILER}} |
Version actuelle datée du 21 juillet 2019 à 11:08
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.
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.
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.