Arduinoで作ろう(55) 74HC595のカスケード接続
74HC595を2個, カスケード接続 (多段接続) してLED16個の制御をやってみました。
上図の左側,1個めの74HC595の9ピン(カスケード用シリアル出力) と右の2個めの74HC595の14ピン(シリアルデータ入力) をつないでやります。
そうすると,1個めに入力されたデータが9ピンから出て,2個めの14ピンに流れていくわけです。74HC595をこうやってどんどんカスケード接続していけば,大量のLEDが制御できるっていう仕掛け。おもしろいですなあ。
fritzingの図では省略してありますが,LEDの電流制限抵抗はちゃんとつけてあります。LEDの足を短く切って,抵抗をハンダづけしてあります。上の写真を見ると分かりますよね。
// 74HC595のカスケード接続 16個のLED 順送り点灯
#define SDI 8
#define LAT 9
#define CLK 10
int bitmap[] = {
0b0000000000000000,
0b1000000000000000,
0b1100000000000000,
0b1110000000000000,
0b1111000000000000,
0b1111100000000000,
0b0111110000000000,
0b0011111000000000,
0b0001111100000000,
0b0000111110000000,
0b0000011111000000,
0b0000001111100000,
0b0000000111110000,
0b0000000011111000,
0b0000000001111100,
0b0000000000111110,
0b0000000000011111,
0b0000000000001111,
0b0000000000000111,
0b0000000000000011,
0b0000000000000001,
};
void setup() {
pinMode( SDI, OUTPUT );
pinMode( LAT, OUTPUT );
pinMode( CLK, OUTPUT );
}
void loop() {
for ( int i=0; i<sizeof(bitmap)/sizeof(int); i++ ) {
digitalWrite( LAT, LOW );
shiftOut( SDI, CLK, LSBFIRST, bitmap[i] );
shiftOut( SDI, CLK, LSBFIRST, bitmap[i]>>8 );
digitalWrite( LAT, HIGH );
delay(100);
}
}
16個のLEDの点滅データですから 1行分のデータは16ビットですが,shiftOut関数は1回で8ビットのデータしか送出できません。
そこで,1回目で下8桁のデータを送出し,2回目はデータを8ビット分右シフトしてから上8桁のデータを送出してやります。
shiftOut( SDI, CLK, LSBFIRST, bitmap[i] );
shiftOut( SDI, CLK, LSBFIRST, bitmap[i]>>8 );
これで,16ビットの点滅データを16個のLEDに反映させることができます。
| 固定リンク | 0
「Arduino」カテゴリの記事
- 大型7セグLEDを4個使った表示装置(2022.01.23)
- Arduinoで作ろう(61) Digisparkで7セグLED温度計(2022.01.16)
- Arduinoで作ろう(60) Digisparkでデジタル時計(2022.01.10)
- Arduinoで作ろう(59) DigisparkのP5を使えるようにした(2022.01.08)
- Arduinoで作ろう(58) DigisparkとLM35で温度計(2022.01.02)