Les circuits intégrés ADS1115, MCP23017, PCF8574 et PCA9685 sont 4 solutions pour augmenter très facilement le nombre d’entrées / sorties numériques, PWM, analogiques via le bus I2C. Cela permettra de conserver le code source de votre projet et de gagner du temps de développement en évitant de devoir migrer vers une autre plateforme telle que le STM32 ou l’ESP32. C’est par exemple le cas du micro-contrôleur ESP8266 dispose d’une seule entrée analogique et 8 E/S numériques.
Toutes ces cartes d’extension utilisent le bus I2C pour communiquer. Par conséquent, elles sont utilisables par toutes les plateformes compatibles y compris les nano PC Raspberry Pi, Orange Pi, Odroid…
Sommaire
ADS1115 (ADSxxxx), 4 entrées A/N 16 bits
Le circuit intégré ADS1115 permet d’ajouter 4 entrées analogiques
Principales caractéristiques techniques
|
MCP23017, 16 I/O numériques I2C. MCP23S17 (version SPI)
Le circuit intégré MPC23017 permet d’ajouter 16 entrées / sorties numériques supplémentaires via le bus I2C.
Le MCP23S17 est une version adaptée au bus SPI jusqu’à 10 MHz.
Principales caractéristiques techniques
|
Branchement de base pour les circuits intégrés
Attention, pour pouvoir utiliser la version en boitier DIP28 ou SO28, il faut connecter les broches suivantes
- Broches I2C SDA et SCL au 3,3V à l’aide d’une résistance de pull-up de 4.7 KΩ.
- Broches A0, A1 et A2 au GND
- RESET au 3,3V
- VDD au 3,3V
- VSS au GND
Exemple de code permettant d’allumer une LED
#include
#include "Adafruit_MCP23017.h"
// Basic pin reading and pullup test for the MCP23017 I/O expander
// public domain!
// Connect pin #12 of the expander to Analog 5 (i2c clock)
// Connect pin #13 of the expander to Analog 4 (i2c data)
// Connect pins #15, 16 and 17 of the expander to ground (address selection)
// Connect pin #9 of the expander to 5V (power)
// Connect pin #10 of the expander to ground (common ground)
// Connect pin #18 through a ~10kohm resistor to 5V (reset pin, active low)
// Input #0 is on pin 21 so connect a button or switch from there to ground
Adafruit_MCP23017 mcp;
void setup() {
mcp.begin(); // use default address 0
mcp.pinMode(0, INPUT);
mcp.pullUp(0, HIGH); // turn on a 100K pullup internally
pinMode(13, OUTPUT); // use the p13 LED as debugging
}
void loop() {
// The LED will 'echo' the button
digitalWrite(13, mcp.digitalRead(0));
}
PCF8574, 8 entrées/sorties numériques
Le circuit intégré PCF8574 de Texas Instrument permet d’ajouter 8 entrées / sorties numériques supplémentaires. Sont fonctionnement est très similaire au MCP23017 de Microchip vu précédemment
Principales caractéristiques techniques
- Fabricant : Texas Instrument
- Alimentation électrique :
- de 2,5V à 6V
- courant de veille : 10 μA max
- Courant de sortie : 25mA par sortie
- Adresses I2C
- Principale : 0x38
- Alternative : 0x3F
- Autre : utiliser les broches A0, A1 et A2 pour attribuer une adresse
- Vitesse du bus I2C supportées : 100kHz, 400kHz et 1MHz
- Broches
- VCC Alimentation (2,5V à 6V)
- GNG masse électrique
- A0, A1, A2 : sélecteur d’adresse I2C. Inutile de relier au GND ou VCC si adresse par défaut
- Librairies
- PCF8574 de Rob Tillaart (PIO 1358)
- Disponibilité
- Boitier DIP16 à souder au pas de 2,54mm
- Carte d’extension
- Documentation technique
PCA9685, 16 canaux PWM 12 bits pour LED
Le circuit intégré PCA9685 permet d’ajouter 16 canaux PWM 12-bits qui permettra de piloter des LED ou des servo-moteurs de faible puissance. Le PCA9685 est parfaitement adapté pour piloter des bras robotique.
Principales caractéristiques techniques
- Fabricant : NXP
- Alimentation électrique :
- de 2,3V à 5,5V
- protection contre la sur-tension
- courant de veille : 1 μA max.
- Courant de sortie : 20mA par sortie sans dépasser 150mA au total sur VSS
- Sorties PWM
- 16 sorties 12-bits (4096 niveaux) pour LED
- Fréquence de 24 Hz à 1526 Hz
- Adresses I2C
- Principale : 0x40
- Alternative : 0x7F
- Autre : utiliser les broches A0 à A5 pour attribuer une adresse manuellement. 64 adresses possibles
- Vitesse du bus I2C supportées : 1MHz
- Broches
- VDD Alimentation (2,3V à 5,5V)
- VSS GND, masse électrique
- A0 à A5 : jusqu’à 62 adresses I2C permettant de piloter jusqu’à 992 LED en combinant plusieurs PCA9685
- Librairies
- Disponibilité
- Documentation technique
Repérage des broches du PCA9685
Le test complet de la carte d’extension Geekcreit avec du code Arduino ou MicroPython
Autres projets
Exemple de code Arduino pour piloter un servomoteur
Un petit exemple qui fait varier la position d’un servo-moteur sur 180° développé à l’aide de la librairie de Sumotoy.
/*
Test PCA9685 driver Doit.am 16 servos I2C shield
Compatible Arduino Uno / Espduino / ESP8266
*/
#include
#include
#define MAX_SERVOS 16
/*
* ESP8266 I2C - pins
* SDA: 4 - D2
* SCL: 5 - D1
*/
servo_PCA9685 servo = servo_PCA9685();
uint8_t servonum = 0;
void setup() {
#if defined(ESP8266)
Serial.begin(115200);
#else
Serial.begin(38400);
#endif
Serial.println("\nservo start");
servo.begin();
}
int angle = 0;
void loop() {
if ( angle == 180 ) {
angle = 0;
}
servo.moveServo(0,angle);
Serial.println("Move to "+angle);
angle++;
delay(200);
}
Adresses I2C des cartes ADS1115, MCP23017, PCF8574, PCA9685
Si vous rencontrez des difficultés à initialiser l’équipement vous pouvez utiliser le scanner I2C proposé dans ce tutoriel.
A LIRE AUSSI :
Adresses I2C des capteurs et actionneurs les plus courants
Chaque équipement dispose d’une adresse I2C alternative. En fonction du fabricant de la carte d’extension, la sélection de l’adresse alternative se ferra via un jumper, un pont à souder ou directement par programmation. Consultez la documentation technique du fabricant pour savoir comment choisir l’adresse I2C.
Mises à jour
8/10/2020 Publication de l’article
Avez-vous aimé cet article ?