LESSON 016
シフトレジスタ(74HC595)でLEDを制御する。
ArduinoでLEDを点灯させるには LED 1個に対してGPIO 1ポートが必要になります。LED を 8個必要ならGPIO は8ポートが必要になります。
14ポート中 8ポートが使われるため残り6ポートになり、この6ポートでセンサ等を使用しなければなりません。そこで、シフトレジスタ(74HC595)のICを用いる事でGPIO 3ポートでLEDを8個以上コントロール出来ます。
74HC595 のICは シリアル信号からパラレル信号に変換され、QA ~ QHに出力されます。
今回は SRCLRはシフトレジスタ内の情報を保持のため HIGH にする
OE は 出力を有効にするため LOW にする
になります。
○ シリアル信号 パラレル信号 の違い
信号の送り方としてシリアル信号とパラレル信号があります。
シリアル信号 1本の信号線で直列に信号を送ります。
利点 回路がシンプルに作れる
パラレル信号 複数本の信号線で並列に信号を送ります。
利点 複数の信号を一度に送れる
シリアル信号からパラレル信号はこの様になります。
○ シリアル信号 パラレル信号 の違い
信号の送り方としてシリアル信号とパラレル信号があります。
シリアル信号 1本の信号線で直列に信号を送ります。
利点 回路がシンプルに作れる
パラレル信号 複数本の信号線で並列に信号を送ります。
利点 複数の信号を一度に送れる
シリアル信号からパラレル信号はこの様になります。
const int SER = 8;
const int RCLK = 9;
const int SRCLK = 10;
void setup() {
pinMode(SRCLK, OUTPUT);
pinMode(RCLK, OUTPUT);
pinMode(SER, OUTPUT);
}
void loop() {
digitalWrite(SER, HIGH);
for (int i=0; i<8; i++) {
digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
digitalWrite(RCLK, LOW);
digitalWrite(RCLK, HIGH);
delay(1000);
digitalWrite(SER, LOW);
}
}
リンク
解説
LEDの点灯の場所が移動していく。
- void loop()
digitalWrite(SER, HIGH);
2進(0000 0001)2の値をシリアルデータでレジスタ ① に書き込むとパラレルデータ ② に変換されます。digitalWrite(SRCLK, LOW);
digitalWrite(SRCLK, HIGH);
レジスタのデータはSRCLKポートにLOWの信号を入れてからHIGHの信号を送るとレジスタのデータをシフトさせることが出来ます
digitalWrite(RCLK, LOW);
digitalWrite(RCLK, HIGH);
RCLKポートにLOWの信号を入れてからHIGHの信号を送るとレジスタのデータをQA ~ QHに出力します。③digitalWrite(SER, LOW);
LOOP後、レジスタにシリアルデータが加わるためここでシリアルデータを0にする必要がある。この命令をを無くすとシフトするたびにLEDの点灯が増えて最後には全て点灯してしまいます。
○ Arduinoでシフトレジスタ(74HC595)でLEDを制御する場合は、GPIO 3ピンで8つの信号(LED)を制御出来ます。また、シフトレジスタを連結する事も可能でシフトレジスタの連結数 × 8 の信号が制御出来ます。
○ Arduino を 学ぶ上で書籍やWebpageを参考に作っていますが、私なりに噛み砕いて書いているつもりですが、判らない点がありましたら連絡下さい。