【電子工作】Arduinoでスペアナ作成物語② ~シフトレジスタの動作確認~


前回の投稿では、周波数変換器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 UNO

シフトレジスタ

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);
    }

返信を残す

メールアドレスが公開されることはありません。