Osoyoo Arduino 74HC595 シフトレジスターを使って、直列入力並列出力(シリパラ)プロジェクト

Prev:16×2 I2C LCD プロジェクト

今回の題名はめっちゃ長いです。

まー、様はシリアルでデータ送信して、パラレルでデータを出力する訳ですが、これはよくLEDの点灯とかで使われてます。(一般的にシリパラって言います、反対はパラシリですね)

LED300個とか使う場合、パラレルで線引き回すと300本のケーブルをその長さ分だけ引き回す事になるので、電流的にもキツイけど、邪魔で仕方ないですよねwww

パチンコやパチスロではみんなこのタイプ(実際にはアミューズメント用で一般流通しないIC)使ってます。

今回使う、シリパラのICは74シリーズのロジックIC74HC595です。

ピン配はこんな感じ。

大まかな流れはSCKに入るクロックに同期してSIにシリアルデータが入ります。

すると内部で8個のフリップフロップ(FF)に格納されRCKの入力によりラッチされ、QA~QHに出力されます。

タイミング図はこんなん

これで判らない人はググって調べましょう!

では、接続図。

今回は配線がわしゃわしゃしてます。

/* Serial to Parallel Shifting-Out with a 74HC595
   Copyright John Yu
   https://osoyoo.com/?p=189
 */
int latch = 8;
int clock = 12;
int data_out = 11;
 
byte leds = 0;
 
void setup()
{
  pinMode(latch, OUTPUT);
  pinMode(data_out, OUTPUT);
  pinMode(clock, OUTPUT);
}
 
void loop()
{
  leds = 1;
  sendDataToUC595(latch,data_out,clock,leds);
  delay(500);
  for (int i = 0; i < 7; i++)
  { 
    leds *=2;
  sendDataToUC595(latch,data_out,clock,leds);
    delay(400);
  }
}
 
void sendDataToUC595(int latch,int data_out,int clock,byte out_value)
{
  digitalWrite(latch, LOW);
  shiftOut(data_out, clock, LSBFIRST, out_value);//sent leds value to UC595
  digitalWrite(latch, HIGH);
}

上記をArduinoに転送します。

このサンプルプログラムはLEDを一つづつ点灯させていますが、データを変える事により色々と点灯させる事が出来ます。

Arduinoのポートに8個LEDを接続して光らせるのと変わりありません。

そう、最初に書きましたが、Arduinoと74HC595の間は8本ではなく、2本なのです。

これはLEDだけじゃなくて、74HC595の出力にモータドライバICを接続するとモータの制御も行えます。

実際ロボットとかはこの方法を使って制御してます。

Next:LEDデジタル表示管で4桁の数字を表示する

シェアする

  • このエントリーをはてなブックマークに追加

フォローする