📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
ページの作成:「== 概要 == シフトレジスタを使用すると、少ない出力ピンで多くの出力を制御することが可能になる。<br> ここでは、シフトレ…」 |
|||
| 155行目: | 155行目: | ||
} | } | ||
} | } | ||
</source> | |||
<br><br> | |||
== シフトレジスタ(74HC595)のカスケード接続 == | |||
このセクションでは、2個の74HC595をカスケード接続することにより、16個のLEDをオン / オフする方法を記載する。<br> | |||
<br> | |||
74HC595のカスケード接続には、9番ピン(カスケード用シリアル出力)を使用する。<br> | |||
前段の74HC595の9番ピン(カスケード用シリアル出力)を、後段の74HC595の14番ピン(シリアルデータ入力)に接続する。<br> | |||
これにより、前段の74HC595のSER(シリアル入力)から入力されたデータが、カスケード接続された後段の74HC595に次々と伝達される。<br> | |||
<br><br> | |||
== 2個のシフトレジスタ(74HC595)をカスケード接続して、16個のLEDを制御する == | |||
2個の74HC595を使用して、16個のLEDをオン / オフする場合、下図のように接続する。<br> | |||
[[ファイル:Arduino 74HC595 6.png|フレームなし|中央]] | |||
<br> | |||
その他の接続は、上記セクションの場合と同様である。<br> | |||
この場合も、Arduinoからの出力で必要になるのは、データ、ラッチ、クロックの3つの出力だけである。<br> | |||
<br> | |||
Arduinoのプログラムを以下のように記述する。<br> | |||
<source lang="c++"> | |||
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() | |||
{ | |||
} | |||
</source> | |||
<br> | |||
下図左が前段のシフトレジスタ(74HC595)で、下図右が後段のシフトレジスタ(74HC595)である。<br> | |||
前段のシフトレジスタ(74HC595)はArduinoからシリアルデータ入力されて、後段のシフトレジスタ(74HC595)の入力は前段のシフトレジスタのカスケード用シリアル出力に接続している。<br> | |||
また、LEDの配置はQ<sub>A</sub>からQ<sub>H</sub>が左から右に並ぶように配線している。<br> | |||
[[ファイル:Arduino 74HC595 7.png|フレームなし|中央]] | |||
<br> | |||
プログラムのデータ書き込み部分を見ると、最初に1バイトのデータ変数<code>b2</code>を<code>LSBFIRST</code>のビット順で入力している。<br> | |||
続いて、1バイトのデータ変数<code>b1</code>を入力している。<br> | |||
このため、先に入力された変数<code>b2</code>のデータ<code>B00110011</code>が、後段のシフトレジスタにセットされる。<br> | |||
また、後に入力した変数<code>b1</code>のデータ<code>B11010001</code>が前段のシフトレジスタにセットされる。<br> | |||
<br> | |||
LSBFIRSTのビット順なので、プログラムに記載したB11010001とB00110011がそのままLEDのオン(1がON)、オフ(0がOFF)となる。<br> | |||
<source lang="c++"> | |||
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); | |||
</source> | </source> | ||
<br><br> | <br><br> | ||