前回の投稿では、周波数変換器MSGEQ7とマイクの動作確認をしました
今回はシフトレジスタを使って、複数のLED制御をしていきます
まずは今回作成したシフトレジスタによるLED制御をご覧ください
実物を写真で撮りましたが、ジャンプワイヤで見づらくなってしまいました。。。(またか!)
回路図
回路図は水魚堂の回路図エディタで作成しました
Arduinoの回路図は居酒屋ガレージ日記様より拝借しました、ありがとうございます
僕はArduinoでスペアナを作成しようとしていますが、Arduinoは出力ピンが少ないために
大量のLEDを制御することができません
そこで登場するのがシフトレジスタ
シフトレジスタの解説はこちらのQiitaサイトがわかりやすいです
いろいろ調べてみて、分からないことが2つ
<疑問1> どんな波形信号を入れればよいのか
<疑問2> 複数のシフトレジスタを連動させるためにはどうすればよいか
TEXAS instrumentsのサイトからデータシートを見てもイマイチ波形信号がわからない…
試行錯誤して疑問を解決できましたので、これらについて記載します
<疑問1> どんな波形信号を入れればよいのか?
1. 14番ピンのシリアル信号(SER)でON/OFFを決定
2. 11番ピンのシフトレジスタクロック(SRCLK)で、次のアドレスへデータを移動
3. 1→2を繰り返し、全8個の命令を入れる
4. 12番ピンのラッチクロック(RCLK)をONして、8個の命令を一斉に出力
<疑問2> 複数のシフトレジスタを連動させるためにはどうすればよいか?
シフトレジスタ1個の場合は、8個のON/OFF信号を順番に命令し、12番ピンのラッチクロック(RCLK)をONすることで並列に出力することができます
一方、シフトレジスタが2個の場合は、Arduinoにつながっているシフトレジスタのシリアル信号を、次のシフトレジスタの14番ピン(SER)につなげるだけでした
16個のON/OFF信号を順番に命令し、ラッチクロックをONすることで16個の命令が並列に出力されます
今回でシフトレジスタの使い方を学習することができたので、
これからはスペアナ用の7個のシフトレジスタの制御を目指します!
関連記事
・【電子工作】Arduinoでスペアナ作成物語① ~周波数変換器の動作確認~
・【電子工作】Arduinoでスペアナ作成物語③ ~完成偏~
・【電子工作】3x3x3 LEDキューブ作成
<使用部品>
参考としてArduinoのプログラムを載せておきます
//シフトレジスタ
#define SRCLK 5
#define RCLK 6
#define SER 7
void setup() {
pinMode(SRCLK, OUTPUT);
pinMode(RCLK, OUTPUT);
pinMode(SER, OUTPUT);
}
void loop() {
//led1 命令
digitalWrite(SER, HIGH);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led2 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led3 命令
digitalWrite(SER, HIGH);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led4 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led5 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led6 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led7 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led8 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led9 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led10 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led11 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led12 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led13 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led14 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led15 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led16 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led1 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led2 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led3 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led4 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led5 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led6 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led7 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led8 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led9 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led10 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led11 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led12 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led13 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led14 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led15 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led16 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led1 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led2 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led3 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led4 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led5 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led6 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led7 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led8 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led9 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led10 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led11 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led12 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led13 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led14 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led15 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led16 命令
digitalWrite(SER, HIGH);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led1 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led2 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led3 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led4 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led5 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led6 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led7 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led8 命令
digitalWrite(SER, HIGH);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//出力
digitalWrite(RCLK, LOW);
digitalWrite(RCLK, HIGH);
delay(5000);
//led1 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led2 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led3 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led4 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led5 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led6 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led7 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led8 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led9 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led10 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led11 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led12 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led13 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led14 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led15 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led16 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led1 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led2 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led3 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led4 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led5 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led6 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led7 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led8 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led9 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led10 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led11 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led12 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led13 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led14 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led15 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led16 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led1 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led2 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led3 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led4 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led5 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led6 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led7 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led8 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led9 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led10 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led11 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led12 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led13 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led14 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led15 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led16 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led1 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led2 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led3 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led4 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led5 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led6 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led7 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//led8 命令
digitalWrite(SER, LOW);
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
//出力
digitalWrite(RCLK, LOW);
digitalWrite(RCLK, HIGH);
delay(5000);
}