Adafruitの16×8 LED matrix driver module(HT16K33 breakout)を使おうとして落とし穴にハマった。
メモとして記録しておく。
Adafruit 16×8 LED Matrix Driver Backpack – HT16K33 Breakout(Amazon)
自分はだいぶ前に秋月電子でチップLEDのまとめ売り品と一緒に注文して購入した。
この品物だ。→ 16x8LEDマトリクスドライバーモジュール(HT16K33 Breakout) 組立キット 秋月電子通商-電子部品・ネット通販
これを簡易AR HMDなメガネみたいなものを自作するのに使っている。
最近、このドライバモジュールを2個使ってLEDマトリクスを倍に増やす改造の電子工作をしていて落とし穴にハマった。
2つ目の新しく買ったLEDドライバが動作しないというトラブルだ。(今回も秋月から買った)
まず、2つのLEDドライバを1つのI2Cバスに接続する場合には、基板上のA0~A2という半田JPを設定してデバイスのアドレスを異なった値にする必要がある。
このあたりはわりと常識なので、ちゃんと設定した(A0をHighにした)のだが、設定したアドレスにアクセスしてもデバイスが見つからないのである。
もともと使っていた1つめのLEDドライバには普通にアクセスしてLEDを点灯させることができていて、半田JPの設定を変更して、そのアドレスでも動くのは確認できた。しかし、新しく追加したほうのLEDドライバの方だけは、A0をLowに設定してもA0をHighにしても動かない。
ここで、動作電圧が大丈夫か疑ったのと、不良品の可能性を疑った。
—
このLEDドライバに使われているICはHT16K33という品物で、動作電圧は4.5Vから動作ということになっている。
自分は3Vの回路に繋いで動かしていた。
なので、規格を守っていないので、それで動かないのではないか。いままで動いていた方の1つ目のICは個体差とかたまたまなのではないかと思った。
ただ、公式のAdafruitのサイトではHT16K33が3Vでも動いてしまうということが書かれていたりする。
→ 0.8 8×8 Matrix Adafruit LED Backpacks Adafruit Learning System
5Vなら確実に動くはずだと思ったので、検証のため5VのI2C制御をするためのシステムに繋いでテストしてみた。
しかし、やはり動作しなかった。
不良品という疑惑が強まった。
—
たまたまなのだが、I2Cのアドレス設定のA0からA2のシルク表示が間違っているのではないかと思い、A0=Low、A2=Highという設定を仮定して動かしてみた。
1つ目のLEDドライバの基板と2つ目の基板は一緒だし、1つ目の基板はA0の設定がちゃんとできているので、普通に考えたらありえない仮定だが。
しかし、その設定で2つめのLEDドライバが動作し、LEDを点灯させることができた。
どうやら不良品っぽい。
原因として考えられるのは、3つ可能性がある。(他にもあるかもしれないが)
・2つ目に買った方が偶然初期ロットとかで設計がA0とA2が入れ替わっているバグ入り基板という可能性
・基板の製造不良でA2という信号がどこかで短絡していて、本来は半田JPで設定しなければLowになるはずのA2がHighになってしまっている可能性
・HT16K33というICの不良品という可能性
とりあえず動く設定ができていて、深く検証する時間が無いので現時点では原因はこれ以上は調べていない。
あとで何か分かったら追記したい。