シフトレジスタ (74HC595) のカスケード接続

前回の記事「シフトレジスタ (74HC595) と Arduino を使って複数の LED を制御する方法」では、 シフトレジスタの基本的な説明をしました。そこでは 74HC595 をひとつ用いて LED 8 個を、Arduino から ON/OFF する方法を説明しました。

ここでは 74HC595 を2個使います。

シフトレジスタ 74HC595 を2個カスケード接続することによって、今回は 16 個の LED を ON/OFF する方法について説明します。

74HC595 のピン配置などは「シフトレジスタ (74HC595) と Arduino を使って複数の LED を制御する方法」に記載していますので、 そちらの記事も参考にしてください。

シフトレジスタのカスケード接続

シフトレジスタ 74HC595 のピン配置は次のようになっています。

74HC595 シフトレジスタ

74HC595 のカスケード接続には 9 番ピン (カスケード用シリアル出力) を使います。

ひとつ目の 74HC595 の 9 番ピン (カスケード用シリアル出力) を、ふたつ目の 74HC595 のシリアルデータ入力に接続します。

これによって、ひとつ目の 74HC595 の SER (シリアル入力) から入力されたデータが、カスケード接続されたシフトレジスタに次々と伝達されて行きます。

74HC595 を2個カスケード接続して LED を 16 個制御する

74HC595 を2個使って、16 個の LED を ON/OFF するならば、次のように接続します。

その他の接続は 74HC595 ひとつの場合と変わりません。この場合も Arduino からの出力で必要になるのは、データ、ラッチ、クロックの3つの出力だけです。

Arduino のコード (スケッチ) を次のようにします。

const int PIN_SER   =  8;
const int PIN_LATCH =  9;
const int PIN_CLK   = 10;

void setup() {
  pinMode( PIN_SER, OUTPUT );
  pinMode( PIN_LATCH, OUTPUT );
  pinMode( PIN_CLK, OUTPUT );

  byte b1 = B11010001;
  byte b2 = B00110011;

  digitalWrite(PIN_LATCH, LOW);
  shiftOut(PIN_SER, PIN_CLK, LSBFIRST, b2);
  shiftOut(PIN_SER, PIN_CLK, LSBFIRST, b1);
  digitalWrite(PIN_LATCH, HIGH);
}

void loop() { 
}

これによって、次のように点灯しました。

意図したように点灯・消灯しているか、確認してみましょう。

向かって左側がひとつめのシフトレジスタで、右側がふたつ目のシフトレジスタです。ひとつ目のシフトレジスタは Arduino からシリアルデータ入力されています。 ふたつ目のシフトレジスタの入力は、ひとつ目のシフトレジスタの「カスケード用シリアル出力」に接続されています。

また、LED の配置は \(Q_A\) から \(Q_H\) が左から右に並ぶように配線されています。

プログラムのデータ書き込み部分を見てみましょう。

  byte b1 = B11010001;
  byte b2 = B00110011;

  digitalWrite(PIN_LATCH, LOW);
  shiftOut(PIN_SER, PIN_CLK, LSBFIRST, b2);
  shiftOut(PIN_SER, PIN_CLK, LSBFIRST, b1);
  digitalWrite(PIN_LATCH, HIGH);

はじめにバイトデータ b2LSBFIRST のビット順で入力しています。 引き続き、バイトデータ b1 を入力しています。

このため、先に入力された b2 のデータ 00110011 がふつ目 (右側) のシフトレジスタにセットされるはずです。 また、後に入力した b1 のデータ 11010001がひとつ目のシフトレジスタにセットされるはずです。

LSBFIRST のビット順なので、コードに記載した 11010001 00110011 がそのまま、 LED の ON (1 が ON)、OFF (0 が OFF) となります。

見比べてみると、確かにその通り ON/OFF がセットされていることが分かりますね。

以上、ここではシフトレジスタ 74HC595 をカスケード接続する方法を説明しました。また実際に、Arduino と接続して 16個の LED を制御しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 基礎からの IoT 入門