akira.kei が 2026年09月27日22時31分59秒 に編集
初版
タイトルの変更
LEDマトリクスを点灯させる
タグの変更
rp2040-zero
rp2040
micropython
MicroPython
記事種類の変更
セットアップや使用方法
ライセンスの変更
(MIT) The MIT License
本文の変更
## LEDマトリクスをどうやって点灯するのか 結構前に秋月電子通商で100円くらいで投げ売りされていた「TOM1588BH-B」を何個か買ってあって、いつか使おうと思っていた。でも試そうとしたら結構ハードルが高くて面倒くさくなって放置していた。([今買うと代替品が250円する](https://akizukidenshi.com/catalog/g/g105163/)) - 8x8ドットマトリクスLEDなので当然16本の結線が必要 - ダイナミック点灯が前提なのでソフトウェアが煩雑 - ダイナミック点灯なので暗くなりがちだから電流を多く流したい(一灯当たり10から20mAくらい) - 電流を多く流すのでマイコンで直接ドライブできない - アノード側とカソード側の両方にトランジスタドライブを入れると3.3V系では電圧不足 結局、アノード側(ソース)ドライバに[TBD62783APG](https://akizukidenshi.com/catalog/g/g110957/)、カソード側(シンク)ドライバに[TBD62083APD](https://akizukidenshi.com/catalog/g/g110669/)を入れて、電源は5Vにしてrp2040-zeroで16本+5V電源供給でドライブしてみた。  LEDマトリクスのピンアサインはアノードとカソードが入り乱れているので、後ろの1段目でアノード抵抗220Ωとカソードのピンアサインを分け、2段目でドライバICを配置している。実際に使用する際には8x8では表示領域は足りないわけで、複数個の組み合わせが必要になる。それぞれに8+8+2=18本を配線するのはナンセンスなので、この後ろに更にマイコン基板を実装して配線本数を削減する必要がある。 ## MicroPythonなら簡単に点灯させられるはずだが コードは以下のようにダイナミック点灯をさせてみた。ピンアサインはハードウェア優先だったので、かなり入り乱れている。 ```Python: import utime from machine import Pin, Timer ANODES = [5, 7, 4, 6, 0, 3, 1, 2] CATHODES = [ 11, 12, 14, 8, 15, 9, 10, 13] anodes = [Pin(p, Pin.OUT) for p in ANODES] cathodes = [Pin(p, Pin.OUT) for p in CATHODES] for pin in anodes: pin.value(0) for pin in cathodes: pin.value(0) while True: for i in range(0,8): cathodes[i].value(1) for j in range (0,8): anodes[j].value(1) utime.sleep_ms(100) anodes[j].value(0) cathodes[i].value(0) ``` で、やってみたのだがどうにもおかしい。明るさが一定じゃないし点灯抜けもあり、何度もはんだ付けをやり直したり、各部の電圧を測ってみたが解決しなかった。 ## RP2040-Zeroのピン出力がおかしい そもそもRP2040-zeroのピン出力は3.3Vしかないはずなのに、どのピンにも5Vが出ている!なんでやねん。それにGP11の反応がない。このマイコン、どうやらただのしかばねのようだ。。。 ## マイコンを交換しても直らない 紆余曲折の後、ストックしてあるマイコンを交換してまた試したが、症状が微妙に改善されただけで直らない。もしかしてマトリクス側の部品の問題なの?と全点灯治具を作って点灯チェックをしてみたら。。。  つかねぇじゃねえか!!しかもムラがある。。。こいつもダメだw ## もう疲れたよ マイコンもマトリクスも交換してようやく動いたが、今日はもう疲れたよ(パトラッシュ) 