シフトレジスタとは
シフトレジスタとは、シリアルデータ(直列のデータ)をパラレルデータ(並列のデータ)に変換してくれるICです。
画像で順を追って説明すると以下通りです。
Arduino等からデータを受け取る
まずはシフトレジスタにArduinoからパラレル出力したいシリアルデータをArduino等から受け取ります。
受け取ったデータを並列に並び替える
Arduino等から受け取ったデータをシフトレジスタ内部でシリアルデータからパラレルデータに並び替えます。
パラレルデータが揃ったら同時に出力
パラレルデータが全て揃ったら最後はすべて同時に出力して終わりです。
結構あっさりとした説明ですがシフトレジスタはこんなものです。
配線図
※注意点ですが電源に必ずコンデンサを噛ませてください。コンデンサがない場合動作が不安定になる可能性が高いです。
コード
流れるように光る
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const int clockPin = 12; const int dataPin = 13; void setup() { pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { for (int i = 0; i < 8; i++) { shiftOut(dataPin, clockPin, MSBFIRST, 1L << i); delay(200); } } |
指定したLEDを光らせる
1 2 3 4 5 6 7 8 9 10 11 12 |
const int clockPin = 12; const int dataPin = 13; void setup() { pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); byte data = B11001010; shiftOut(dataPin, clockPin, MSBFIRST, data); } void loop() { } |
※setup関数に書いてあるのでLEDがうまく光らない場合は、Arduino上にあるリセットボタンを使ってリセットしてみてください。(loop関数にshiftOutを書くと全LEDがついてしまうので注意です。)
動作
流れるように光る
右から左に流れるようにLEDが光ります。
指定したLEDを光らせる
変数dataに代入されているビットの1になっている部分が光ります。
最後に
シフトレジスタはこんな感じで動作させることができます。
シフトレジスタを使うことで2本のピンで大量の電子機器を制御することができるので、電子工作をする上では必ず覚えておきたいICの一つですね。
でも正直な話、74hc164を使うくらいなら74hc595を使った方がネット上にも情報がたくさんあっていいと思います…
それではみなさん、良きネットサーフィンライフを!
コメント