De chip ziet er als volgt uit:
De Chip heeft GPA0-7 en GPB0-7 poorten en A0-2 voor het I2C adres in te stellen. De chip werkt met een basis adres van 0x20 en kan met deze drie pinnen ingesteld worden op een adres tussen 0x20 en 0x27.
Om de poorten aan te sturen gebruiken we ook een adres. Om de A-reeks aan te sturen gebruiken we adres: 0x12, en de eerste poort: 0x1.
Arduino Sketch:
#include <Wire.h>
const byte mcp_address=0x20; // I2C Address of MCP23017 Chip
const byte GPIOA=0x12; // Register Address of Port A
const byte GPIOB=0x13; // Register Address of Port B
void setup()
{
//Send settings to MCP device
Wire.begin(); // join i2c bus (address optional for master)
// IOCON.BANK defaults to 0 which is what we want.
// So we are using Table 1-4 on page 9 of datasheet
Wire.beginTransmission(mcp_address);
Wire.write((byte)0x00); // IODIRA register
Wire.write((byte)0x00); // set all of bank A to outputs
Wire.write((byte)0x00); // set all of bank B to outputs
Wire.endTransmission();
}
void loop()
{
Wire.beginTransmission(mcp_address);
Wire.write(GPIOA); // address bank A
Wire.write((byte)0x1); // value to send - pin A1 HIGH
Wire.endTransmission();
delay(500);
Wire.beginTransmission(mcp_address);
Wire.write(GPIOA); // address bank A
Wire.write((byte)0x2); // value to send - pin A2 HIGH
Wire.endTransmission();
delay(500);
}
Bovengenoemde code laat de leds op pin GPA0 en GPA1 om en om branden: