M.C.P.C. (Mamesibori Creation Plus Communication)

印刷屋から五反田のWeb屋に転職したCLのブログです。

ピカリ館の単色LEDマトリクスパネルをArduinoで光らす

akibaLEDピカリ館のLEDマトリクスパネルが2,380円で割とでかいのですが、

www.akiba-led.jp

これをArduinoを使って光らす。

使ったArduinoは、Arduino Duemilanove、Arduino IDE は1.0.6です。うちはArduinoは基本的にあとでATmega328Pで動かせるようにするので割と古いArduino使っています……

ハードウェアについて

注意ですが電源はしっかりアンペアの大きい5Vスイッチング電源を用意して、電源からArduinoの5Vとパネルの5Vに分岐させるように。一応ArduinoをUSBにつないだときの5V端子からパネルにつないでも光るけれども、LEDが最大128個同時に点灯する可能性があり(ダイナミック点灯だから512個全部は点灯しない)、最悪時は数字的に無理をしているのでやめよう。

f:id:C_L:20150809023929p:plain

仮配線には以下があると便利です。

akizukidenshi-ogp-injector.dtpwiki.jp

akizukidenshi-ogp-injector.dtpwiki.jp

ピカリ館単色LEDマトリクスパネル(HUB12規格)について

f:id:C_L:20150825013241p:plainf:id:C_L:20150825013252p:plain

このパネル、コネクタABのラインが汎用ロジックICの(74HC245 を通った後)74HC138(3 to 8 デコーダ)の入力につながり、出力側でソースドライバのFETを駆動するのに利用されています。また、DATラインとCLKLATが74HC595(シフトレジスタ)につながっていて、シンクドライバとして利用されています。DAT仕様書では/DATと書いてある)と負論理になっているのは、74HC595の端子が0Vになった時に、ソースドライバ側との電位差により吸い込みが発生し、LEDが点灯するからなのでした。

Arduinoで3線式シリアル通信(DAT,CLK,GND)をする場合、SPIインタフェースを利用できます。DATMOSI(pin11),CLKSCK(pin13)に接続します。ArduinoのSPIは、1回につき8bitの転送が可能で、それ以上のビット列を送る必要がある場合は、複数記述、またはループで実現します。ビット列が細切れに送信されることになりますが、3線式シリアル通信はSCK(クロック信号)による同期式なので問題はありません。

ソフトウェアについて

gist.github.com

LAT下げておいて、シフトレジスタに8bit値を16回転送してOE下げてLAT上げてOE上げてLAT下げる。

4ライン毎のダイナミック点灯になっているので頑張って切り替えるっつーかんじでした。

シャッタースピード適当だったのでご覧の有様だよですが人間の目レベルの動画では普通に均一に光りました。

当然次に進むのは表示部をタイマ割り込みにしてVDP化するっていうことだと思うけれどもVRAM操作時ちらつかないようにするために裏VRAMとかいう話になるし、回転とかいうとアフィン変換の話になって深みにはまりそう。

なお、お店に行けばWindowsで制御できるコントローラ基板売っているのでそっちの方がArduino買うより安い。まあなあ。

実は、アリババに鬼のように安価でたくさん同じ規格のLEDパネルが出ているのだけれども($5とか)、中国通販で買う手間と時間を考えると、ピカリ館に行ける人はお店で買えばいいし、国内でも通販で買えるので、急にLEDをペカペカしたくなった場合、思い立ったが吉日なのでいいのではないかと思います。中国通販だと、外国の方と英語でクレーム伝えて処理してもらうのけっこう疲れるし、香港で謎の渋滞とかわけわからんしな。