Arduino工作講座 74HC595 8ビットシフトレジスタ を使ってみよう

Arduino工作講座

Arduino Unoを利用した電子工作を学習する講座シリーズ。Arduino工作講座の第15弾。この講座では、74HC595という8ビットシフトレジスタを使って、8個のLEDを光らせようと思います。ロジックICである74HC595を使って、シフトレジスタの使い方を学ぶことができます。

Arduino工作講座 74HC595 8ビットシフトレジスタ を使ってみよう

このレッスンはELEGOO社のArduino基本セットのチュートリアルのレッスン16のサンプルプログラムを参考にさせていただいています。

この講座をクリアするとシフトレジスタの使い方を学ぶことができるようになります。外部端子を節約して、たくさんのLEDを光らせることができるようになります。モーターやセンサーなどをたくさん接続すると外部端子が足らなくなってしまいます。そこで、外部端子を拡張するためのものが、このシフトレジスタです。3つの外部端子を使って8個のものを制御することができるようになります。

今回は、LEDを8個制御しようと思います。3個の外部端子で8個制御できるようになるので、5個増やせます。

このICは、シリアルの信号をパラレルの信号に変換してくれます。

シリアル信号とは、一つずつ、順番に処理をするための信号なので、一つずつ信号を送っていきます。

パラレル信号は、まとめて、信号が届きます。今回は、8つの信号が一度に届きます。

シリアル信号を8個受け取って、8個まとめたものを一度に送ってくれる形にしてくれるのが8ビットシフトレジスタです。

最初に初期化が行われて、データが格納されるところがLOWになります。Dataが10110011と一つずつ流れてきたら、Clockのタイミングで、一つずつ8個ある格納庫に入れられていきます。8個すべて入れられたら、Latchがパラレルに変わったので、出していいと指示を出します。

すると、8つのアウトプット、今回は8つのLEDが信号を見てLEDを点灯します。

この74HC595 8ビットシフトレジスタは、信号をシリアルからパラレルに変換するところと、それを一時保管するストレージレジスタ、3ステートバッファの3つが一つになっています。

一時保管するところを用意して、変換途中の信号を垂れ流さないような仕組みがされています。しかし、今回は、LEDの点灯という事で、人間の目には早すぎて垂れ流された信号を人間が認識できないので、その機能を利用していません。

わからないもののために、外部端子を一つ使うのはもったいないからです。なので、常に出力して大丈夫という信号を与えています。その信号はLOWならば、出力OKになるため、端子のOEをGNDに接続しています。

3ステートバッファについては、まだ理解していません。もう少し、勉強したら更新していきますね。

必要となる部品

  • Arduino Uno
  • 74HC595 8ビットシフトレジスタ
  • LED 緑色、赤色、黄色、青色
  • 抵抗 220Ω
  • ジャンパー線 赤色と黒色と青色とその他の色(もちろん、色は何でもOKです)

Clockのタイミングで、Dataを一つずつ、ストレージレジスタに入れていき、8個格納したら、Latchが指示を出します。8個たまったので、Outputにストレージレジスタの内容を8ビットまとめて発信します。

今回は、LED8個ですが、もちろん、それ以外の部品やセンサーでも大丈夫です。しかし、電源については注意してください。Arduinoからの供給では電源が足らなくなることがあります。モーターなどを使う場合には別途、外部電源を用意して供給するようにしてください。あくまでも、制御する信号の発信にとどまると思ってください。

回路と回路図

このサンプルプログラムでは、端から一つずつLEDがついていきます。常に一つだけ光る感じで、1234567812345678というように、順番に光っていきます。

プログラムコード 74HC595 8ビットシフトレジスタ

 //www.elegoo.com
//2016.12.9 

int tDelay = 100;
int latchPin = 11;      // (11) ST_CP [RCK] on 74HC595
int clockPin = 9;      // (9) SH_CP [SCK] on 74HC595
int dataPin = 12;     // (12) DS [S1] on 74HC595

byte leds = 0;

void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}

void loop() 
{
  leds = 0;
  updateShiftRegister();
  delay(tDelay);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(tDelay);
  }
}

こちらのサイトがとても分かりやすく、まとめられていました。私のブログでは、カバーできない部分もこちらならわかるかもしれません。

今回、シフトレジスタを利用しました。シリアルから、パラレルへの変換についてもわかったと思います。また、次のArduino工作講座で会いましょう。では。

コメント

タイトルとURLをコピーしました