電子工作
led
HUB75

LEDドットマトリクスパネル HUB75規格について調べてみた

More than 1 year has passed since last update.

どうも、予定が一杯でリア充のかちおです(違

諸事情で秋葉原のピカリ館でHUB75型の32x32のLED Matrix Panelを購入し、いじろうと思ったのでメモ。調べても日本語情報全然出てこなかった。

どうやら通常はライブラリを使うらしいが、公式にはArduinoしか対応しておらず、なんとか汎用IOで操作したいため、データシートとにらめっこした。

公式のリファレンスとかデータシートとかサンプルコードを翻訳しながら書いていく。

画面構成

合計1024個のLED(とRGB)をすべて同時に光らせることは現実的ではないので、全16セクションに分けるとのこと。

32のLED、横に32列ある。
全部で32列。
1セクションは一番上の1列目と真ん中の17列目、2セクションは2と18列目…らしい。

余談ですが、32x16のパネルは1と9、2と10…って組み合わせらしい。まあそれが妥当。

セクション
1 1と17
2 2と18
3 3と19
16 16と32

1セクションは 32LED x 2列 で64LED。さらにRGBがあるので3を掛けて192。
なのでセクションごとにこの192bitを送ってあげればいいらしい。

人間の目からしたら残像だけど、実際には同時に1セクション(64LED)しか光らないらしい。
まあそうだよね。

セクション(192個のLED)の光らせ方

まず接続端子にR1、G1、B1、R2、G2、B2、っていうピンがあると思う。もしかしたら1と2じゃなくて0と1の組み合わせかもしれない。ぼくの場合はそうだった。

ブルース展開でいうと{R,G,B}{1,2}か{R,G,B}{0,1}ですね。
とりあえず1と2で行きます。

これによって、同時に2つのLEDの状態を制御できます。RGB2つ分ですね。
で、セクションの上の列と下の列のLEDをそれぞれ同時に光らせることができます。

なので、一回のデータ送信で、セクションの上の列と下の列の一番左のLEDを光らせられるとのこと。これを32回繰り返します。

なので、たとえば1列目を白色に交互に点灯、17列目を赤青緑交互に光らせたい場合は以下のようになります。
ちなみに送信するごとにのクロックは、接続端子CLKから送るようです。これもSLCKとか色々呼び方があるようす。
あと、送信データは逆の値(負論理)、つまり光らせたかったらLOW、消したかったらHIGHらしいです。

送信 1 2 3 4 5 6 7 32
R1 0 1 0 1 0 1 0 1
G1 0 1 0 1 0 1 0 1
B1 0 1 0 1 0 1 0 1
上の色
R2 0 1 1 0 1 1 0 0
G2 1 0 1 1 0 1 1 1
B2 1 1 0 1 1 0 1 1
下の色

セクションの選び方

これで同時に離れた2列を表示できるようになりました。次はセクションを選ぶ必要があります。
接続端子にABC(D)があると思うのですが、これがセクションを選ぶ4ビットになります。
2進数で、0000から1111です。これで1セクションから16セクションまでを選択するとのこと。

最終的なピンの操作順序

1. 全ピンをLOWにする。(最初だけ)


2. R1 G1 B1 R2 G2 B2をそれぞれ上に書いたようにLOWかHIGHにする。
3. CLKをHIGHにする。
4. CLKをLOWにする。これでLED2個分が書き込まれた。

5. これと同じように、2~4をあと31回繰り返す。これで1セクションのデータ分書き込み終わる。

6. ABCDの4bit使って送り込みたいセクションを決める。最初は0000とか。
7. OEをHIGHにする。画面表示有効のフラグらしい。
8. LAT(STB)をHIGHにする。これでLEDが光る。
9. LAT(STB)をLOWにする。
10. OEをLOWにする。

11. 以上、2~10をセクションを変えながら8回分繰り返す。これを高速で繰り返すことで画面を全部表示できる。ちなみに止めたらその瞬間消える(たぶん)

参考

https://hima-tubusi.blogspot.jp/2017/05/hub75_30.html
https://gist.github.com/CLCL/4509360739cccfca8f64
https://www.thingiverse.com/thing:1508087
https://cdn-learn.adafruit.com/downloads/pdf/32x16-32x32-rgb-led-matrix.pdf