8×8×8 LED CUBE 製作記(17) -- シフトレジスタの使い方
8×8×8 LED CUBE 製作も前回でハード的にほぼ完成した積りでいるけれど、配線は間違えていないかとか、はんだ付けをミスっていないかみたいな点はまだ未確認。
ということで、今回はハードが設計通り出来上がっているのかを確認していきます。
LED群のはんだ付けに関しては、製作途上で何度も確認しながら進めて来たけど、4×4×4CUBE製作の経験から言うと、ある日なんの前触れも無くはんだ付けが外れてるってことも。
なので、制御基板と接続して、LED群の確認を兼ねながら基板の確認をしていこうと思います。ただ、まだキチンと動かせるソフトが完成していないので、取り敢えず簡易的なソフトで確認を。
シフトレジスタの使い方はなんとなく理解した積りではいるけれど、実際にプログラムを組んだことはないので、その具体的な中身はブラックボックス状態。
ブレッドボード上に回路を組み、Arduinoからの信号でLEDの点灯制御を行ってみます。
回路はこんな感じ。LED CUBE の74HC595×8個、LED×512個への橋渡しとして、今回は取り敢えず2個の74HC595で、10個のLED(一部、配線省略)を制御してみようと思います。
プログラムはArduinoのリファレンスで、「shiftOut」に掲載されている例を微妙に変更して使用。
20行目のシフト演算で、i=8以上になると、データは2バイトの大きさ(1 0000 0000 とか)となり、1度には送れません。そこで、23行目、24行目のshiftOut関数にて1バイトずつ送ります。
実際にブレッドボード上に回路を組み上げ、上記プログラムを走らせると無事に動き出しました。静止画なので伝えようがありませんが、LEDの光が右から左へと流れていきます。
プログラムは、先のものをシフトレジスタ8個として改変していきます。
Arduinoのリファレンスの例から私の理解したところで言えば、今度はデータが8バイトとなるので8個の変数を用意し、それを8回のshiftOut関数にて1バイトずつ送ればいいのではないかと。
まあ、もっとスマートな記述方法があるとは思うけど、考え方的にはこれであってるんではないかと。
さて、LEDを制御基板に繋げ、基板の電源も、PCからArduinoへのデータ信号も、今回製作したベースボックスのUSBプラグ経由で行います。
ただし、GNDラインはトランジスタ(2N2222)経由ではなく、制御基板の電源のGNDラインへと直接接続します。そのために、基板にもう一つピンソケットをはんだ付けしました。
「+と-、逆じゃないよな!」とか配線を何度も確認しましたが、それでも初めての電源投入には緊張した。長時間の労力が一瞬で消えてしまったりしないよね、って。
さて、結果は?
動き出しました。Arduinoへのプログラム送信も無事に行えたし、取り敢えず一安心。
10個のLEDを、8個のシフトレジスタからの出力ピンに適当に割り振って接続してますが、どのシフトレジスタもキチンと機能してくれているようです。
ただし問題が。起動時のみ、LEDが意味不明な点滅を繰り返し、それがひと段落すると、何事も無かったかのように(想定通りに)端から順番にLEDが点灯し、消灯していきます。
さて、何が間違っているのでしょうか? 回答は次回のお楽しみ(解決出来るのか不安だけど)。
ということで、今回はハードが設計通り出来上がっているのかを確認していきます。
LED群のはんだ付けに関しては、製作途上で何度も確認しながら進めて来たけど、4×4×4CUBE製作の経験から言うと、ある日なんの前触れも無くはんだ付けが外れてるってことも。
なので、制御基板と接続して、LED群の確認を兼ねながら基板の確認をしていこうと思います。ただ、まだキチンと動かせるソフトが完成していないので、取り敢えず簡易的なソフトで確認を。
ブレッドボード上でシフトレジスタ74HC595の動作確認から
先ずはシフトレジスタ74HC595の動作確認からいこうかな。シフトレジスタの使い方はなんとなく理解した積りではいるけれど、実際にプログラムを組んだことはないので、その具体的な中身はブラックボックス状態。
ブレッドボード上に回路を組み、Arduinoからの信号でLEDの点灯制御を行ってみます。
回路はこんな感じ。LED CUBE の74HC595×8個、LED×512個への橋渡しとして、今回は取り敢えず2個の74HC595で、10個のLED(一部、配線省略)を制御してみようと思います。
プログラムはArduinoのリファレンスで、「shiftOut」に掲載されている例を微妙に変更して使用。
20行目のシフト演算で、i=8以上になると、データは2バイトの大きさ(1 0000 0000 とか)となり、1度には送れません。そこで、23行目、24行目のshiftOut関数にて1バイトずつ送ります。
実際にブレッドボード上に回路を組み上げ、上記プログラムを走らせると無事に動き出しました。静止画なので伝えようがありませんが、LEDの光が右から左へと流れていきます。
今度は制作した制御基板上のシフトレジスタ74HC595を使って
さて、これを踏まえて、今度はLED10個をキューブの制御基板に繋げて、制御基板上のシフトレジスタ経由で動くのかを試してみましょう。プログラムは、先のものをシフトレジスタ8個として改変していきます。
Arduinoのリファレンスの例から私の理解したところで言えば、今度はデータが8バイトとなるので8個の変数を用意し、それを8回のshiftOut関数にて1バイトずつ送ればいいのではないかと。
まあ、もっとスマートな記述方法があるとは思うけど、考え方的にはこれであってるんではないかと。
さて、LEDを制御基板に繋げ、基板の電源も、PCからArduinoへのデータ信号も、今回製作したベースボックスのUSBプラグ経由で行います。
ただし、GNDラインはトランジスタ(2N2222)経由ではなく、制御基板の電源のGNDラインへと直接接続します。そのために、基板にもう一つピンソケットをはんだ付けしました。
「+と-、逆じゃないよな!」とか配線を何度も確認しましたが、それでも初めての電源投入には緊張した。長時間の労力が一瞬で消えてしまったりしないよね、って。
さて、結果は?
動き出しました。Arduinoへのプログラム送信も無事に行えたし、取り敢えず一安心。
10個のLEDを、8個のシフトレジスタからの出力ピンに適当に割り振って接続してますが、どのシフトレジスタもキチンと機能してくれているようです。
ただし問題が。起動時のみ、LEDが意味不明な点滅を繰り返し、それがひと段落すると、何事も無かったかのように(想定通りに)端から順番にLEDが点灯し、消灯していきます。
さて、何が間違っているのでしょうか? 回答は次回のお楽しみ(解決出来るのか不安だけど)。
- 関連記事
-
- 8×8×8 LED CUBE 製作記(18) -- 「柱」と「層」を個別制御
- はんだの煙を吸い取る吸煙実験装置を作ってみた
- 8×8×8 LED CUBE 製作記(17) -- シフトレジスタの使い方
- 8×8×8 LED CUBE 製作記(16) -- カーボン柄シートでお化粧
- 8×8×8 LED CUBE 製作記(15) -- Layerへの接続