MicroPython的午睡(139)M5Stack、MCP23017 2個接続、異電源

Joseph Halfmoon

前回前々回とI2C接続のIO Expander、MCP23017をM5Stackに接続するの回でした。シツコク今回も接続。以前と異なるのは「同じI2Cバスに2個接続」「I2Cバスは3.3VだけれどもIO Expanderは外部5V電源」という点。別シリーズで扱っている古代のマイコンのDMAコントローラにするためね。

※「MicroPython的午睡」投稿順 Indexはこちら

※M5Stack Grayに書き込んだUIFlow2.0 (Alpha-27)対応のMicroPython処理系とWindowsパソコン上で動作しているThonny 4.0.1で動作確認しています。

古いハードを掘り起こし

忘却力の老人はほぼほぼ忘れておったのですが、Raspberry Pi Picoをホストにしてそのようなハードウエアを工作(珍しく半田付けで)してあったのです。I2C側は3.3V動作、IOExpander側は5V電源動作のつもりのもの。相当前に作った後、箱の奥底で「熟成」していたので動くかどうか怪しいデス。今回は古いハードを掘り起こし、M5Stackに接続しなおし、I2Cスキャンをかけて外部5V電源に接続しているMCP23017が2個認識されるところまで確認。

今回はMCP23017で制御したい対象は明確であります。以下の回などで取り扱っている、古代の8ビット・マイクロプロセッサ「インテル8085(コンパチ品だけれども)」に対して、ソフトウエアDMAコントローラにしようと。

レトロな(13) 74HC74で漏れなく1ウエイト、必要ないけど入れてみる

8085にSRAMを接続し、主記憶としたものにM5StackのMicroPython(UIFlow2)からDMAをかけて、オブジェクト・プログラムを書き込んであるHEXファイルからそのSRAM上に機械語コードを展開しようという目論見であります(まだ肝心のSRAMモジュール作ってないけど。)

今回実験部分の回路図が以下に(まだ8085には接続してありません。)M5Stack8085DMAschematic

次のステップとして、まずはSRAMに接続して上記の「DMAコントローラ」からSRAMを読み書きできることを確認したいと思うとります。そのため、SRAM載せられるようにブレッドボードは大き目(かなり古い奴をお値引き価格で買ったもの。)M5Stack8085DMA_BB.PNG

動作確認

動作確認には、以前にも使用しているI2CスキャンのMicroPythonスクリプトをちょい直しで使いました。MCP23017はI2Cアドレス0x20から0x27まで8個接続できます。今回は制御信号類が0x20番地のMCP23017、アドレス・データバス(8085はマルチプレクス・バス)は0x21番地のMCP23017としたので2個づかいです。以下のスクリプトでは複数個のMCP23017があってもちゃんと報告するようになってます。

# i2cSCAN.py
from machine import I2C, Pin
import M5

def main():
    M5.begin()
    print("M5Stack Gray, I2C0 SCAN")
    i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
    lis = i2c.scan()
    for device in lis:
        grp = device & 0x78
        prt = device & 0x07
        if device== 0x75:           
            print("IP5306,  Power MGR ", end="")
        elif device== 0x68:           
            print("MPU6886, 6 axis Motion Sensor ", end="")
        elif device== 0x10:           
            print("BMM150,  3 axis Magnetic Sensor ", end="")
        elif grp == 0x20:           
            print("MCP23017,  IO Expander {0} ".format(prt), end="")
        else:           
            print("UNKNOWN DEVICE ", end="")
        print("found at ADR=0x{0:02X}".format(device))

if __name__ == "__main__":
    main()が

画面キャプチャを忘れましたが、ちゃんとMCP23017が2個認識されておりますぞ。後はDMAのプログラムを書くだけだ。その前にSRAM接続せねば。

MicroPython的午睡(138)M5Stack、MCP23017をIO拡張アダプタ化 へ戻る

MicroPython的午睡(140)M5Stack、ソフト制御でバスサイクル生成 へ進む