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を接続するとモータの制御も行えます。
実際ロボットとかはこの方法を使って制御してます。