Расширитель портов на MCP23017 – модуль для увеличения количества портов ввода-вывода для любых микроконтроллеров, имеющих I2C-интерфейс. Поддерживаются прерывания, возникающие при смене уровня сигналов на любом из 16 пинов (работают как на вход, так и на выход).

Благодаря наличию адресных выводов A0, A1 и A2 к одному контроллеру (например, Arduino) можно подключить до 8 модулей MCP23017, увеличив число дополнительных GPIO до 128.
Распиновка

7 контактов сверху:
- VCC – вывод питания, +5 В;
- GND – общий, «земля»;
- SCL – тактирующая линия шины I2C;
- SDA – линия данных шины I2C;
- RST – линия сброса;
- ITA – выходной порт прерывания A;
- ITB – выходной порт прерывания B.
20 контактов справа:
- VCC – вывод питания, +5 В;
- GND – общий, «земля»;
- PB0-7 – контакты порта B;
- PA0-7 – контакты порта A.
Пример

В Arduino IDE выберите пункт «Инструменты» и подпункт «Управлять библиотеками» и установите библиотеку Adafruit_MCP23017.

Загрузите следующий код на Arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#include <Wire.h> #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) // Output #0 is on pin 21 so connect an LED or whatever from that to ground Adafruit_MCP23017 mcp; void setup() { mcp.begin(); // use default address 0 mcp.pinMode(0, OUTPUT); Serial.begin(9600); } // flip the pin #0 up and down void loop() { int x; mcp.digitalWrite(0, HIGH); x = mcp.digitalRead(0); int i; for (i = 0; i < 40; i++) { Serial.println(x); delay(50); } mcp.digitalWrite(0, LOW); x = mcp.digitalRead(0); for (i = 0; i < 40; i++) { Serial.println(x); delay(50); } } |
В этом коде вывод PA0 (нулевой вывод платы MCP23017) настроен как выходной и будет попеременно включён и выключен. Откройте пункт «Инструменты», подпункт «Плоттер по последовательному соединению».
