MicroPython的午睡(67) ラズパイPico、5V信号IF取り付け、動作確認

Joseph Halfmoon

進捗が捗々しくなかったのは大したことない配線本数を敬遠していたからに違いありません。何時までもメンドイなどと言っていると一生できないのでGWでもあり配線することにいたしました。ラズパイPicoに5V系のあるデバイスを接続する一件であります。重い腰を上げた今回は5V変換チップを接続して動作チェックまで。刻むね、自分。

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

大分前にかなり古いLSIを入手してあり、これをラズパイPicoのMicroPythonで制御せん、とぞ思っておりました。しかし、古いLSIだけに5V電源、当然IO電圧も5Vです。5Vの制御出力を13本あれば制御できる筈、と。高々13本の信号線でもメンドイと思う今日この頃です。

ラズパイPicoのIO電圧は3.3Vです。相手のチップは5V電源です。ただ古いだけにIOはTTLレベル(VIH=2.0V)でした。つまりラズパイPicoの出力端子を直結しても動く筈!ううむ、でもね、別件記事で3.3Vから5VへのIFいろいろやってきています。この際、5V対応のレベルコンバータを挟むべし、と思い至りました。使用するチップは以下の記事のものです。

部品屋根性(69) レベル変換おさらい3、3.3Vと5V間双方向その1

双方向切り替え可能なチップですが、今回は3.3Vから5V方向に固定。まずは「ちゃんと」動作していることを13本の5V出力端子全てにLEDを接続して確認、という段取りです。

動作確認の回路

冒頭のアイキャッチ画像にも掲げましたる回路が以下に。

RpiPico_5VIF_TEST_CIRCUIT

 

変換チップのA側には電源3.3V、B側には電源5Vを与えます。ラズパイPico側から8本のデータ線と5本の制御線を変換チップのA側端子に接続し、変換チップのB側(5V側)の端子の全てに5V電源のLEDを接続しておく、と。

OE端子は2つともLOW(出力イネーブル)にしてあるので、ラズパイPicoで端子にロウ(0V)を出せばLEDが点灯する筈。

なお、16端子の接続確認用のLED「治具」はいつの時代に作ったものだか記憶も定かでないですが、それぞれ電流制限抵抗1kΩが入っているので、点灯は弱々しく、全点灯したとしても50mAも電流は流れないはず(多分。ホントか。)現物写真は以下に。

5VifCheck

接続テスト用のMicroPythonスクリプト

接続テスト用のMicroPythonスクリプトが以下に。使用している13端子の一つづつ、ロウを1秒づつ出力し、順繰りに1個づつ点灯させていくものです。

正直、なにかトラブルとは予想しておらなんだ

回路とスクリプトであります。しかし、天網恢恢疎にして漏らさず(大きく意味が違う気がするが)、テキトーにやっていると天に許して貰えないのであります。

from machine import Pin
import time

ledLis = []
ledBuiltin = Pin(25, Pin.OUT)

def initLEDsG1():
    global ledLis
    for idx in range(16, 21):
        obj = Pin(idx, Pin.OUT)
        obj.value(1)
        ledLis.append(obj)

def initLEDsG2():
    global ledLis
    for idx in range(2, 10):
        obj = Pin(idx, Pin.OUT)
        obj.value(1)
        ledLis.append(obj)

def leds(ledPTR, ledVal):
    global ledLis
    ledLis[ledPTR].value(ledVal)

def main():
    global ledBuiltin
    initLEDsG1()
    initLEDsG2()
    ledPTR = 0
    while(1):
        ledBuiltin.toggle()
        leds(ledPTR, 0)
        time.sleep(1.0)
        leds(ledPTR, 1)
        ledPTR += 1
        if ledPTR >= len(ledLis):
            ledPTR = 0
        time.sleep(0.2)
    
if __name__ == "__main__":
    main()
動作試験でトラブった理由

以前一度動かしたときにはBからAで使っていた端子であったので、どうも見逃していたようです。それともその後の管理の不行き届きか。

最後の13ビット目の信号の動作がオカシイ

点灯パターンを調べ、胸に手を当てて考えてみるとどうも

御隣端子とショートしてるんでないかい?

という疑いが上がってまいりました。テスタで確認すれば疑い通りのショートのようです。原因究明すべく老眼の目にむち打ち、ルーペで該当の端子あたりをよくよく観察いたしました。

この小さな丸いやつは何?

意図せず半田ゴテから零れ落ちた半田の微小なしずくのようなもの、半田ボール然として、狭ピッチ、表面実装パッケージの足の隙間にピッタリ挟まっている感じです。ピンセットの先でツツくとどこかに消えてしまいました(飛んだ先で悪さをしないと良いが。。。)

「半田ボール」さんが消えたら予定通りに動きますです。ショート解消。やはり動作試験は大事ということで良いのかな、それとも、とりあえずつけなくても済むデバイスを取り付けたためにバチがあたったのか?

ともかく動けば後はオーライ。それで良いのか?

MicroPython的午睡(66) ラズパイPico、非反転アンプのオフセットとゲイン調整 へ戻る

MicroPython的午睡(68) ラズパイPico、IOレジスタへの直接アクセス へ進む