■ MCP23017 I2C(SPI)バス 16ビット I/Oエキスパンダ ■


 MCP23017はI2Cバスの2本の信号線、MCP23S17はSPIバスの4本の信号線を使用して、マイコンに16個のI/Oポートを拡張するICです。
 各ポート毎に入力/出力の切り替えや内蔵プルアップ抵抗の設定が可能なので、マイコンのポートピンが足りないときや、外部にスイッチやLEDを増設する際に重宝します。
 スレーブ・アドレスを8つから選択できるので、同じI2C(SPI)バスに8個のMCP23017 (MCP23S17)を接続できます。

  ○ 動作電源電圧 : 1.8V〜5.5V。
  ○ 低スタンバイ電流 : 1μA (最大)
  ○ 各出力ピンの最大シンク電流 : 25mA
  ○ 各出力ピンの最大ソース電流 : 25mA
  ○ I2Cインターフェイス (MCP23017) : 100kHz, 400kHz, 1.7MHz
  ○ SPI インターフェイス (MCP23S17) : 10MHz (最大)
  ○ 割り込み出力(INTA,INTB) : アクティブHigh、アクティブLow、オープンドレイン。
  ○ 3つのアドレスピンで、8つのスレーブ・アドレスを選択可能。




 ・操作方法の詳細は、日本語データシートに詳しく記載されています。

 ・一番難解な点は、「IOCON: I/Oエクスパンダ コンフィグレーション レジスタ」の設定です。

IOCON : I/Oエクスパンダ コンフィグレーション レジスタ
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
BANK MIRROR SEQOP DISSLW HAEN ODR INTPOL -
初期値は[0000_0000]

bit7 BANK: レジスタのアドレス指定を制御する
 1 = 各ポートに関連付けられているレジスタが別々のバンクに分かれる
 0 = レジスタが全部同じバンクに入れられる( アドレスが連続した状態)
bit6 MIRROR: INT ピンのMirror ビット
 1 = INT ピン同士を内部接続する
 0 = INT ピン同士を接続しない。INTAはPORTAに、INTBはPORTBに関連付けられる。
bit5 SEQOP: シーケンシャル動作モードビット
 1 = シーケンシャル動作が無効になり、アドレスポインタはインクリメントされない
 0 = シーケンシャル動作が有効になり、アドレスポインタがインクリメントされる
bit4 DISSLW: SDA 出力のスルーレート制御ビット
 1 = スルーレートは無効
 0 = スルーレートは有効
bit3 HAEN: ハードウェア アドレス イネーブル ビット(MCP23S17 のみ) (Note 1)
 1 = MCP23S17のアドレスピンを有効にする
 0 = MCP23S17のアドレスピンを無効にする
bit2 ODR: INT ピンをオープンドレイン出力として設定する
 1 = オープンドレイン出力(INTPOL ビットよりも優先される)
 0 = アクティブ ドライバ出力( 極性はINTPOL ビットで設定する)
bit1 INTPOL: このビットでINT 出力ピンの極性を設定する
 1 = アクティブHigh
 0 = アクティブLow
bit0  未実装: 「0」として読み出し
        Note 1: MCP23017 はアドレスピンが常に有効です。

 ・単純な拡張I/Oとして使用する場合は、初期値[0000_0000]のままでOKです。
 ・I2CやSPIのコマンドを連続して送るプログラムによっては、bit7の[BANK]とbit5の
  [SEQOP]を使用目的によって変更することで、プログラムの簡素化が図れます。
 ・bit7の[BANK]は、各レジスターの並び方を、機能するレジスター順かGPIOAまたは
  GPIOBごとに配置するかを変更できます。
 ・bit5の[SEQOP]は、同じポートの内容を連続して変化させる場合に、アクセスした
  レジスターのアドレスを自動的に加算しないように設定できます。
 ・その他のビットの詳細は、データシートを参照して下さい。

 ・「IODIR: I/O方向レジスター」は、GPIOAまたはGPIOBの各ポートを、ビットごとに入力
  または出力に設定します。

 ・「GPPU: GPIOプルアップ抵抗レジスター」は、入力に設定したポートに対して、
  内蔵された100KΩの抵抗でプルアップする設定ができます。

 ・「GPIOAまたはGPIOB: 汎用I/Oポートレジスター」によって、ポートピンに対する
  入力または出力を行います。

 ・その他、「IPOL: 入力極性」や割り込み関連の操作は、データシートを参照して下さい。






MCP23017 I2C G-LCD アダプターのテスト
 
Amazonや中国通販(AliExpress)で入手できる、MCP23017 I2C グラフィックLCD アダプター
 (完成基板)のテストです。
・グラフィックLCDは多くのポートピンを使用しますが、I2Cの2本のポートピンで表示が可能になります。
・ただし、描画速度は極端に遅くなります。

・秋月電子のTG12864B-02WWBV等の、20ピンで横1列のグラフィックLCDモジュールの裏面に、
 直接ハンダ付けで実装できます。

・I2Cバスのプルアップ抵抗器やスレーブアドレス選択用のハンダ・ジャンパーも搭載されているので、
 電源とマイコンから2つのポートを接続するだけで、グラフィックLCDの表示が可能です。

・アダプターのI2CアドレスA0,A1,A2を変えることで、同じI2Cバス上に8台までグラフィックLCDを
 接続することも可能です。
 (スレーブアドレスのA0,A1,A2は、それぞれのアダプターで選択を変えて下さい)
 (並列接続した際に、ボード上のI2Cバスのプルアップ抵抗値が、2KΩ程度より低くならないように
  注意して下さい)
・LCDによってバックライトLEDの電流制限抵抗器が必要な場合は、LEDのジャンパーピンを外して
 抵抗器を取り付けます。

・テストはArduinoボードを使用していますが、各種AVRマイコン回路に接続できます。

回 路 図  PDF版 MCP23017_I2C_GLCD_Cir.pdf
 
   注意! この図面を使用した、いかなる損害にも責任を負いません。

 
・接続するLCDが1台の場合は、 「MCP23017 I2C G-LCD アダプターの設定」ルーチンをそのまま
 使用可能です。

・2台以上のLCDを使用する場合は、下記の行を追加して下さい。
   Const Mcp23017_multi = 1 '複数G-LCDモードにする。
   Dim Glcd_address As Byte : Glcd_address = &H40 'MCP23017のスレーブ・アドレス。
                      (&H40,&H42,&H44,&H46,&H48,&H4A,&H4C,&H4E)
・同時に、それぞれのスレーブアドレスで下記の初期化を実行して下さい。
   Glcd_address = &H42 '2台目のG-LCDを指定する。
   !CALL _set_display 'グラフィックLCDを初期化する。
・各LCDの表示命令の前に「Glcd_address = &H42」行でアドレスを指定して、表示するLCDを
 選択して下さい。

・I2Cバスは、ポートピンを自由に選択できるソフトウェアI2Cと、AVRの専用ピンを使用する
 ハードウェアTWIが選択できます。
・「Const I2c_select = 1」行で、0:ソフトウェアI2C と 1:TWI で指定します。
・ソフトウェアI2Cの場合は、使用するSCLとSDAピンを指定して下さい。
・ハードウェアTWIの場合は、各AVRの専用ピン名を記述して下さい。

・ATtinyチップに搭載されているUSIを使用する場合は、別途USI用のプログラムを参照して下さい。
・XMEGA・XTINYチップを使用する場合は、別途XMEGA・XTINY用のプログラムを参照して下さい。

・バックライトを制御する場合は、下記の設定を使用して下さい。
  Backlight = 0 : Glcdcmd &H3E , 1 : Glcdcmd &H3E , 2 'LCD画面とバックライトをオフにする。
  Backlight = 1 : Glcdcmd &H3E , 1 : Glcdcmd &H3E , 2 'バックライトをオンにする。
  Backlight = 1 : Glcdcmd &H3F , 1 : Glcdcmd &H3F , 2 'LCD画面とバックライトをオンにする。

・[glcdKS108_I2C_MCP23017.lib] ライブラリを、
 C:\Program Files\MCS Electronics\BASCOM-AVR\LIB\ に保存してからコンパイルして下さい。
・[font8x8.font] と [KS108.bgf] ファイルを、下記のテストプログラムと同じフォルダーに保存して下さい。

プログラム  テキスト形式 ソースファイル  MCP23017_I2C_G-LCD_Test.TXT
 BASCOM-AVR用 ソースファイル  MCP23017_I2C_G-LCD_Test.bas
 複数LCDのテスト
プログラム  テキスト形式 ソースファイル  MCP23017_I2C_G-LCD_Multi.TXT
 BASCOM-AVR用 ソースファイル  MCP23017_I2C_G-LCD_Multi.bas
 USIのテスト。
プログラム  テキスト形式 ソースファイル  MCP23017_I2C_G-LCD_Test_USI.TXT
 BASCOM用 ソースファイル  MCP23017_I2C_G-LCD_Test_USI.bas
 XMEGA・XTINY 用のテスト。(BASCOM-AVR(製品版)とXTINY Add Onが必要です)
プログラム  テキスト形式 ソースファイル MCP23017_I2C_G-LCD_Test_XM_XT.TXT
 BASCOM用 ソースファイル MCP23017_I2C_G-LCD_Test_XM_XT.bas
  
注意! 著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。
       (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)







   電子工作の部屋 Top へ 前のページへ戻る