- Đăng vào
Arduino: điều khiển nhiều LED dùng IC 74HC595
Giới thiệu
Với số lượng chân ra vi điều khiển ít, VD muốn điều khiển 16 led ta có thể dung 8 chân VĐK, bằng cách quét hàng quét cột ta có thể truy cập tới từng vị trí con led cần điều khiển, tương tự với 64 led thì cần với 16 chân VĐK. Vd với việc chân VĐK chỉ có tối đa 16 chân đi, việc điều khiển với số lượng led lớn hơn 64 thì không thể thực hiện bằng cách quét hàng, cột được. Vậy thì ta làm thế nào? Câu trả lời là ta chỉ cần 3 chân Digital bạn có thể điều khiển được rất nhiều led thông qua IC 74GC595.
IC 74HC595
Pin | Name | Description |
---|---|---|
PINS 1-7, 15 | Q0 đến Q7 | các chân xuất tín hiệu, giống như các chân Digital được cài đặt là OUTPUT |
PIN 8 | GND | Ground, Cực âm |
PIN 9 | Q7 | Chân xuất ra tín hiệu Serial |
PIN 10 | MR | Master Reclear, nối cực dương để bật IC hoạt động |
PIN 11 | SH_CP | Shift register clock pin |
PIN 12 | ST_CP | Storage register clock pin (latch pin) |
PIN 13 | OE | Output enable, nối cực âm để các đèn LED có thể sáng được |
PIN 14 | DS | Serial data input |
PIN 16 | Vcc | Cấp nguồn cho IC và LED. |
Sơ đồ đấu dây
Dùng 1 IC 74HC595
Hình mô phỏng Proteus
Hình thưc tế
Dùng 3 IC 74HC595
Điều khiển 3 IC tướng ứng 24 led
Vậy cách hoạt động của IC này như thế nào?
- IC74HC595 sẽ nhận lệnh ShiftOut của Arduino và một lần nhận của ic đúng 1byte(8 bit, vd : 0b10101010). 1 byte tương ứng quản lí được 8 led.
- Nếu sử dụng >=2 IC thì việc nhận sẽ diễn ra theo thứ tự là việc truyền tín hiệu sẽ qua nhanh IC 1, xong sẽ qua IC 2, tiếp tới IC cuối cùng, tín hiệu truyền liên tục liên tục, ghi đè lên.
- Pin 14 là chân chứa dữ liệu từ vđk chuyển qua. Pin 11 để chuyển dữ liệu từ Pin 14 đến thanh ghi dịch. Pin 12 là để chốt dữ liệu trên thanh ghi dịch, phải có Pin này dữ liệu mới dịch được ra ngoài.
Code mẫu
Khi dùng 1 IC 74HC595
int latchpin = 8;
int clockpin = 12;
int datapin = 11;
byte data;
void setup() {
pinMode(latchpin , OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(datapin, OUTPUT);
}
void loop() {
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, MSBFIRST, 0b00000001);
digitalWrite(latchpin, HIGH);
delay(2000);
}
- Chân datapin là chân truyền dữ liệu.
- Clockpin chân tạo xung nhịp.
- Chân latchpin là chân chốt dữ liệu, khi chuyển từ trạng thái Low sang High,.
- Ob00000001 : đây là dữ liệu cần truyền, đúng 1 byte, tướng ứng 0 là tắt, 1 sáng.
- MSBFIRST (LSBFIRST): với MSBFIRST(hướng phải) thì led ở chân Q0 sẽ sáng, ngược lại với LSBFIRST(hướng trái) thì led Q7 sẽ sáng. Giống như đảo vị trí Q0-Q7, hay Q7-Q0.
Khi dùng 3 IC 74HC595
int latchpin = 8;
int clockpin = 12;
int datapin = 11;
byte data;
void setup() {
pinMode(latchpin , OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(datapin, OUTPUT);
}
void loop() {
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, MSBFIRST, 0b00000001);
digitalWrite(latchpin, HIGH);
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, MSBFIRST, 0b00000010);
digitalWrite(latchpin, HIGH);
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, MSBFIRST, 0b00000100);
digitalWrite(latchpin, HIGH);
delay(2000);
}
Cũng giống như trên nhưng dữ liệu đầu tiên vào sẽ đi xuống dưới nằm dưới cùng, VD có 2 dữ liệu, trên code là A B, khi hiển thị A sẽ được truyền trước, và tiếp đó là B Pin 9 là được nối qua chân data, dữ liệu truyền được lấy từ thanh ghi dịch.