Đă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

PinNameDescription
PINS 1-7, 15Q0 đến Q7các chân xuất tín hiệu, giống như các chân Digital được cài đặt là OUTPUT
PIN 8GNDGround, Cực âm
PIN 9Q7Chân xuất ra tín hiệu Serial
PIN 10MRMaster Reclear, nối cực dương để bật IC hoạt động
PIN 11SH_CPShift register clock pin
PIN 12ST_CPStorage register clock pin (latch pin)
PIN 13OEOutput enable, nối cực âm để các đèn LED có thể sáng được
PIN 14DSSerial data input
PIN 16VccCấ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.