LEDマトリクスをどうやって点灯するのか
結構前に秋月電子通商で100円くらいで投げ売りされていた「TOM1588BH-B」を何個か買ってあって、いつか使おうと思っていた。でも試そうとしたら結構ハードルが高くて面倒くさくなって放置していた。(今買うと代替品が250円する)
- 8x8ドットマトリクスLEDなので当然16本の結線が必要
- ダイナミック点灯が前提なのでソフトウェアが煩雑
- ダイナミック点灯なので暗くなりがちだから電流を多く流したい(一灯当たり10から20mAくらい)
- 電流を多く流すのでマイコンで直接ドライブできない
- アノード側とカソード側の両方にトランジスタドライブを入れると3.3V系では電圧不足
結局、アノード側(ソース)ドライバにTBD62783APG、カソード側(シンク)ドライバにTBD62083APDを入れて、電源は5Vにしてrp2040-zeroで16本+5V電源供給でドライブしてみた。
LEDマトリクスのピンアサインはアノードとカソードが入り乱れているので、後ろの1段目でアノード抵抗220Ωとカソードのピンアサインを分け、2段目でドライバICを配置している。実際に使用する際には8x8では表示領域は足りないわけで、複数個の組み合わせが必要になる。それぞれに8+8+2=18本を配線するのはナンセンスなので、この後ろに更にマイコン基板を実装して配線本数を削減する必要がある。
MicroPythonなら簡単に点灯させられるはずだが
コードは以下のようにダイナミック点灯をさせてみた。ピンアサインはハードウェア優先だったので、かなり入り乱れている。
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
もう疲れたよ
投稿者の人気記事

-
akira.kei
さんが
前の日曜日の22:31
に
編集
をしました。
(メッセージ: 初版)
ログインしてコメントを投稿する