シフトレジスタ (74HC595) のカスケード接続
前回の記事「シフトレジスタ (74HC595) と Arduino を使って複数の LED を制御する方法」では、 シフトレジスタの基本的な説明をしました。そこでは 74HC595 をひとつ用いて LED 8 個を、Arduino から ON/OFF する方法を説明しました。
ここでは 74HC595 を2個使います。
シフトレジスタ 74HC595 を2個カスケード接続することによって、今回は 16 個の LED を ON/OFF する方法について説明します。
74HC595 のピン配置などは「シフトレジスタ (74HC595) と Arduino を使って複数の LED を制御する方法」に記載していますので、 そちらの記事も参考にしてください。
シフトレジスタのカスケード接続
シフトレジスタ 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);
はじめにバイトデータ b2 を LSBFIRST のビット順で入力しています。 引き続き、バイトデータ b1 を入力しています。
このため、先に入力された b2 のデータ 00110011 がふつ目 (右側) のシフトレジスタにセットされるはずです。 また、後に入力した b1 のデータ 11010001がひとつ目のシフトレジスタにセットされるはずです。
LSBFIRST のビット順なので、コードに記載した 11010001 00110011 がそのまま、 LED の ON (1 が ON)、OFF (0 が OFF) となります。
見比べてみると、確かにその通り ON/OFF がセットされていることが分かりますね。
以上、ここではシフトレジスタ 74HC595 をカスケード接続する方法を説明しました。また実際に、Arduino と接続して 16個の LED を制御しました。