8×8×8 LED CUBE 製作記(18) -- 「柱」と「層」を個別制御

8×8×8 LED CUBE の制御基板が正しく出来てるのかを確認するためのプログラムですが、苦労しています。前回の電源投入時のみ発生する挙動不審な動作の原因は未解決のまま。

実は、一旦解決策が見つかったと思った瞬間もあったんです。そのプログラムの修正部分。

プログラム変更後
こっちは、前回のプログラムの18行目から26行目。

プログラム変更前

前回のプログラムとの違いはこの部分だけで、19行目から26行目でシフト演算したデータに「0xff」をビット論理積するという演算処理を加えています。

その意図するところは、シフトされてはみ出た余分なデータ(それがあるのかどうかも私には分からないけど)を削除して(0にして)、出力に必要な8ビットのデータのみを取り出そうというもの。

実際、これで暫くの間は想定通りの動きをしていたんです。

それなのに、時間が経って、電源のオンオフをしてみると、また元の “訳の分からん状態” に逆戻り。但し、前回とは症状が異なっているようだけど。

何となく、ソフト的なものではなくハードに起因してるものかも、なんて疑念も。ま、取り敢えずコレはコレで置いておいて、先に進んでみようと思います。

LEDの+側も-側もArduinoからの出力で制御する

ここまでは、Arduinoからシフトレジスタを経由してLEDのアノード(+側)に信号を出力してLEDを制御していますが、カソード(-側)は直接基板の電源(GND)へと接続していました。

今度は、カソード側もArduinoからの出力で制御してみようと思います。これによって、基板でいうとトランジスタ2N2222回りの配線の確認が行えます。

別の言い方をすると、これまではキューブのColumn側のみにデータ出力していたのを、今度はLayer側にもデータを出力することで、両側の状態でLEDのオンオフが制御されることになります。

実際の配線はこんな感じ。LEDが10個しか用意していないので、+側は適当な間隔で8個のシフトレジスタに割り当て、-側はLED5個ずつ2グループに分け、Layer1とLayer2に接続しています。

基板と接続

で、これに合わせてプログラムを組み直してみました。

基板上のLayer1~8をArduinoのpin5~12に割り当てているので、前回のプログラムをベースにして、pin5~12をOUTPUTにし、Layerを順番にHIGHにしながら、そこにlatchPinのHIGHを組合せて512個のLEDを1個ずつ順番に点灯していきます(実際のLEDは10個だけですが)。


上のプログラムで24行目は、実際(の現時点のハード的)にはLayre1と2にしか接続されていないので、Layer_pinも5と6のみでループするようにしてあります。

トランジスタ側の回路に電気を流すのは初めてなので、今回も最初のスイッチオンは緊張しましたが、取り敢えずは動き出しました。少なくとも回路に大きな間違いはないようで一安心。

が、プログラム的には(もしかしたらハード的?)問題有りのようです。起動直後のLEDの不規則な点灯現象は残ったまま、さらにLEDの点灯順番が狂っていることを発見。

端から順番に点灯、消灯を繰り返していると思っていたら、7番Layerからスタートし、8番Layer、そして1番に戻って2、3となっていました。

これまでは連続ループでLEDの光が流れていたので気がつかなかった。今回、ループとループとの間に待機時間が生じたので、これが表面に現れてきたわけ。

うーむ。回路含めアレコレ検討してみたけど、回答が見つからない。さらに迷宮の奥へと入り込んでいくことになりそうです。



関連記事
コメント:
私もLED CUBEを作ろうと思い、参考にさせてもらっています。
(来月あたりから作り始めようと思っています)
taka14さんのCUBEも立ち姿やケース含めて綺麗に作られていますね。
やはり、点灯していない状態でも綺麗に仕上げたいですね。

で、本題なのですが、私なりにプログラムを見て、何故正常動作しないのかを考えてみました。
回路やプログラムには、思う所が沢山あるのですが、「これは伝えておいた方がいいな」というものが
あったのでコメントします。(外している、或いは気付かれて、既に修正されているかもしれませんのでご了承ください)
端的にいうと
int latchPin = 3;  →4
int clockPin = 4;  →3
なのでは?という事です。
この間違いの場合、本来第1面の1,2,3・・・64の順になる筈が、しばらく(63個移動分)停止してから
第1面の64→第2面の63,62,61・・・と点灯していくことになるようです。(多分)
単純な間違いですが、本来と近い動きになるのでピンの間違いに気が付きにくい=せっかく綺麗に出来た個体がくだらないことで
無駄になってしまう事を危惧しました。本体の更新もなかったので...
[2016/10/21 10:12] | 猛牛ロック #SFo5/nok | [edit]
猛牛ロックさん、コメントありがとうございます。

プログラムを途中から息子に任せていたら、息子が忙しくなって、ついついそのままになってしまっていました。そろそろ再開しないとなって思ってたところなので、ちょうど良い時期にコメントを頂き、ありがとうございます。

int latchPin = 3;  →4
int clockPin = 4;  →3

ってことですね。なるほど。なんて言いながら、すでに記憶が飛んでしまっているので、じっくりと自分のプログラムを見直してみないと、これがどういう意味を持っているのかも、現時点では理解できていません。

でも、何となく、「おー、そうかも」って、私の本能が囁いていますので、さっそく試してみたいと思います。

また、猛牛ロックさんもLED CUBEを作ろうとしてるとのこと、ちょっと楽しみです。完成しましたら、また有用な情報とか頂けると嬉しいです。

「回路やプログラムには、思う所が沢山あるのですが」ってのも、機会ありましたら、是非ともご教授頂ければと思います。
[2016/10/22 21:52] | taka14 #- | [edit]












管理者にだけ表示を許可する
トラックバック:
トラックバック URL:

http://55life555.blog.fc2.com/tb.php/1626-c431c189

<< topページへこのページの先頭へ >>