今回は、LEDマトリックスが届いたので、シフトレジスタも買って LED 光らせたので、そのご報告でございます。
シフトレジスタ
今回買ったのは 74HC595 です。74HC595 を選んだ理由は、チュートリアルで使わていたからです。
というわけで、チュートリアルを見ながら制御してみました。
特につまずくところはありませんでした。
チュートリアルの通りに配線して、サンプルのコードをコピペですぐにできました。
(写真は撮り忘れたので割愛)
//Pin connected to ST_CP of 74HC595 int latchPin = 8; //Pin connected to SH_CP of 74HC595 int clockPin = 12; ////Pin connected to DS of 74HC595 int dataPin = 11; void setup() { //set pins to output so you can control the shift register pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { // count from 0 to 255 and display the number // on the LEDs for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) { // take the latchPin low so // the LEDs don't change while you're sending in bits: digitalWrite(latchPin, LOW); // shift out the bits: shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); //take the latch pin high so the LEDs will light up: digitalWrite(latchPin, HIGH); // pause before next value: delay(500); } }
LED マトリックス点灯式
マトリックスの資料を見たら 5V って書いてあったので、大丈夫だろとぶっ刺しました。(前回の反省が活かされていませんね…ゾクゾクしますね…)
アノード側にシフトレジスタからの出力をつなぎます。
とりあえず全部点灯でいいのでカソード側を GND に繋ぎました。
点いた\(^o^)/
ダイナミック点灯
さて、このままでは1行/1列ずつしか LED を制御できません。一個一個の LED を制御するためにダイナミック点灯制御を行います。
ダイナミック点灯は、1つ(1列)ずつ点灯・消灯の操作をものすごく速いスピードでやることで、
人間の目にはすべての LED が同時に制御されているかのように見せる方法です。
シフトレジスタで 1bit ずつ出力するようにずらしながら、(制御ラインの選択)
もう一方の線で LED の ON/OFF を制御します。
int latchPin = 8; // 74HC595のST_CPへ int clockPin = 12; // 74HC595のSH_CPへ int dataPin = 11; // 74HC595のDSへ int ledPin = 13; void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(ledPin, OUTPUT); } void loop() { // LED1からLED8までを順に光らせます for (int j = 0; j < 16; j++) { // 送信中のlatchPinはグランド(LOW)レベル digitalWrite(latchPin, LOW); // シフト演算を使って点灯するLEDを選択しています shiftOut(dataPin, clockPin, LSBFIRST, (1<<j)>>8); shiftOut(dataPin, clockPin, LSBFIRST, 1<<j); if( j % 2 == 0 ) { digitalWrite(ledPin, LOW); } else { digitalWrite(ledPin, HIGH); } // 送信終了後latchPinをHIGHにする digitalWrite(latchPin, HIGH); delay(100); } }
1行だけですが、飛び飛びに LED を光らせることに成功しました~
デイジーチェーン
シフトレジスタ(74HC595) を複数つなげることで、少ないピンでよりたくさんの LED を制御できるようになります。74HC595 の Serial Out ピンからの出力をつなげるもう1つの 74HC595 の Serial data input ピンにつなげてやります。
詳しくは、チュートリアルの Exsample2 を参照してください。
これにより、3本の制御線で 16個、24個、32個... の LED を制御できるようになります。
すごいですねぇ~
今回の LEDマトリックスは 48ピンですので、シフトレジスタが 6個必要になります。
アノード制御と赤色/緑色LED の制御にそれぞれ 16ピンずつ使い、それぞれ独立して制御しようと思っているので、
シフトレジスタを2個ずつ、デイジーチェーンでつなげました。
これで、単純計算で 6 x 3 の 18本必要だった線が、3 x 3 の 9本で済みました。
次回
次は TLC5940 を使って調光をできるようにしたいなぁと思っていたのですが、時間があまりないので全部シフトレジスタで制御するようにして、
実コードを書いていきたいと思います。
では。
0 件のコメント:
コメントを投稿