micro:bitのポートコントロールとSPIで128x32RGBLEDパネルを動かしてみた
micro:bitではArduino IDEを使っていろいろとやってみています。→ micro:bitのポートコントロールでRGBフルカラーLEDテープを動かしてみた→ micro:bitで動かす64X32RGBディスプレイの画像を表計算ソフトで作ってみたまたSeeduino XIAO ではSPIとポートコントロールで128x32RGBLEDパネルが動かせたので,micro:bitでも試してみました。やってみると7色(黒を入れると8色)の静止画ならちらつき無く表示する事ができました。画像のデザインのセンスのなさは置いておいて(^^;;;;; 16x128バイトのデータのダイナミック表示は間に合っていて,1画面の表示は大体12ms間隔で行われていました。画面表示のラインカウンターの1画面ごとのリセット信号パルスです。1.機器の構成 上記のSeeeduino XIAOでの構成と同様に,シフトレジスタSN74HC164,バイナリカウンタTC74HC590とHUB75規格の128X32RGBフルカラーLEDパネルです。2.プログラム例と注意する点 プログラムで最も注意が必要なのがポートコントロールのPin指定でした。Arduino IDEはmicro:bitのPinをdigitalWrite()などのためには定義できていますが,ポートコントロールでは直接MCUのPin番号を指定しないといけないようです。 そのためPinの指定は #defineで2種類の定義をしています。Pinの定義とメモ帳からコピーした画像のテキストデータの一部です。setup()はひたすらPinの出力定義と設定です(^^;;;;;;。SPIは8MHzぐらいまでは安全そうでしたので,8MHz, MSBから送信,モード0,の初期設定です。データ出力部はrgbデータにあえてSPIを使い,行アドレスの指定にはカウンタを使ったのでシンプルに読みやすくなりました(^^)。1行分(128byte)のデータを送っては行を変えて表示していくHUB75の規格のままです。これで1画面の表示にかかる時間は約12mSです。digitalWrite()でPinをHIGH,LOWするよりはぐっと速くなっています。micro:bitはSeeeduino-XIAOとは違ってI2Cとボタンの担当を除いてもPin数を確保できます。パラレルに接続してポートコントロールする事も可能なPin数なのでもっと速くできる気もします。何はともあれチラつかない60Hz以上の表示ができたので,クリスマスに向けての最大の課題はデザインですね(^^;;;;;;;;;;。データを表計算ソフトで作っていて,実際のLEDと色味が随分と違うのに慣れないといけませんね。今回の元データ画面です。下の方で何やら画策していますが,,まだまだ途中です(^^;;;;;;;ちなみに表計算ソフトを使ってデザインする時に私はつい画像の一部を「移動」させて良くハマります(^^;;;;;一部をコピペするのは参照するセルの相対関係を新たに計算し直してくれますが,「移動」は相対関係を変化させずにそのままの参照セル名を持ったままで動いて行くソフトが多いと思います。そのためデザイン画面の「セルの移動」操作はデザイン画面と連動しているデータ計算式の入ったセルを動かすことになり,デザインとその結果が入るセルの位置がずれてしまいます。見た目と集計結果のデータが違ってLEDに表示されるまで分からない,,,という悲劇が起こるのです。はい(^^;;;;;;;;;。うむ,次のステップは動きですか,,,,。単純な縦横スクロールや星のまたたきぐらいならそうは問題ないと思いますが,キャラを動かすとなるとかなり理詰めにしないと頭が混乱しそうですね(^^;;;;;;;;音は,,いざとなれば後ろにスピーカーを置いてPCからでも鳴らせば,サブスクもあるので何とでもなりますかねV(^^)。