MCP23017
http://ww1.microchip.com/downloads/jp/DeviceDoc/20001952C_JP.pdf
初期設定 参考サイト
https://www.petitmonte.com/robot/howto_io_expander.html
ARUDINO MCP23017 ハードウェア接続方法
・デバイスアドレスを指定 (A0, A1, A2 のPINで指定)
※デバイスアドレスはArduinoからMCP23017へ指令する際に指定するアドレス
A0, A1, A2 のPINに対して 「High ⇒ 1 Low ⇒ 0」 で指定
計算方法は、 2 (2乗) * A2 + 2 (1乗) * A1 + 2 (0乗) * A016進数で 0x20 ~ 0x27 の8通りのデバイスアドレスを指定することが可能(8つの、MCP23017 を接続することが可能)
・VDD, VSSで電源を供給
グラウンド、電位
https://blogs.yahoo.co.jp/denshiyorimichi/33243395.html
・SCL、SDAを接続
https://novicengineering.com/i2c%E9%80%9A%E4%BF%A1%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/
SCL:SDA:
Arduino R2 の場合
Uno: SDA=A4 SCL=A5
※Arduinoの世代によって接続するPINが異なるので注意
https://trac.switch-science.com/wiki/Arduino-diffhttp://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=342
ARUDINO MCP23017 ハードウェア接続方法 ※スケッチ作成
・ライブラリ Wire.h をinclude
#include <Wire.h>
・デバイスアドレスを指定
A0, A1, A2 で指定したデバイスアドレス0x20 ~ 0x27 の8通りのデバイスアドレスを指定することが可能uint8_t DEVICE_ADDRESS = 0x20;
・初期設定
setup()内で、決まったお作法をしてデバイスアドレスを指定した MCP23017 と接続
void setup() {// マスタとしてI2Cバスに接続する Wire.begin(); // 初期設定(IODIRA/IODIRB) Wire.beginTransmission(DEVICE_ADDRESS); // 先頭アドレスへ Wire.write(0x00); // I/O設定Aの全てを出力設定にする Wire.write(0x00); // I/O設定Bの全てを出力設定にする Wire.write(0x00); Wire.endTransmission();// GPIOA(GPA0~GPA7) Wire.beginTransmission(DEVICE_ADDRESS); Wire.write(0x12); // 全てのGPAピンをHIGH(出力)にする Wire.write(0xff); Wire.endTransmission(); // GPIOB(GPB0~GPB7) Wire.beginTransmission(DEVICE_ADDRESS); Wire.write(0x13); // GPB0をLOW(入力)でそれ以外のGPBピンはHIGH(出力)にする Wire.write(0xfe); // 2進 11111110 Wire.endTransmission();}
・GPIOA GPIOB の各ピンへの指令方法
// デバイスアドレスを指定 Wire.beginTransmission(DEVICE_ADDRESS); // GPIOA or GPIOB を指定(右側の0 ~ 7 / 左側の0 ~ 7 どちらを操作) Wire.write(0x13); // 0 ~ 7 のどのPINをHIGH・LOWに指定するかを「0 , 1」で指定 Wire.write(0b11111111); // 2進 11111111 // データ転送 Wire.endTransmission();