Hướng dẫn sử dụng IC 74HC595

IC 74HC595 là một IC dịch và chốt (Shift Register with Latch) phổ biến trong việc mở rộng số lượng chân đầu ra của vi điều khiển. Nó thường được sử dụng để điều khiển LED, 7 đoạn, hoặc các thiết bị yêu cầu nhiều chân điều khiển.

1. Tổng quan về IC 74HC595

  • Cấu tạo: IC 74HC595 có 16 chân với các chức năng chính như sau:

    • DS (Data Serial): Chân nhận dữ liệu đầu vào.
    • SH_CP (Shift Clock): Xung clock để dịch dữ liệu.
    • ST_CP (Storage Clock): Xung clock để chốt dữ liệu.
    • Q0-Q7: 8 chân đầu ra dữ liệu song song.
    • OE (Output Enable): Kích hoạt đầu ra (mức thấp để bật).
    • MR (Master Reset): Xóa toàn bộ dữ liệu trong IC (mức thấp để xóa).
    • VCC và GND: Nguồn cấp cho IC.
  • Chức năng chính: IC 74HC595 dịch dữ liệu đầu vào dạng nối tiếp và chốt lại để xuất ra song song trên 8 chân Q0-Q7. Điều này giúp tiết kiệm số lượng chân I/O cần sử dụng của vi điều khiển.

2. Sơ đồ chân của IC 74HC595

3. Nguyên lý hoạt động

  • Dịch dữ liệu:

    • Khi một xung SH_CP được kích hoạt, một bit dữ liệu từ chân DS sẽ được dịch vào hàng thanh ghi dịch của IC.
  • Chốt dữ liệu:

    • Sau khi dữ liệu được dịch đầy đủ, một xung ST_CP sẽ lưu dữ liệu hiện tại vào các thanh ghi chốt. Từ đó, dữ liệu được xuất ra các chân Q0-Q7.
  • Kích hoạt đầu ra:

    • Chân OE cần được kéo xuống mức thấp (0) để cho phép dữ liệu xuất ra các chân Q0-Q7.

4. Kết nối cơ bản với vi điều khiển

4.1. Kết nối phần cứng

  • VCC và GND: Kết nối nguồn 5V và đất.
  • DS: Nối với chân dữ liệu của vi điều khiển.
  • SH_CP và ST_CP: Nối với các chân điều khiển xung clock trên vi điều khiển.
  • OE: Kéo xuống GND để kích hoạt đầu ra.
  • MR: Kéo lên mức logic cao (5V) để cho phép hoạt động bình thường.
  • Q0-Q7: Kết nối với tải (LED, 7 đoạn, v.v.).

4.2. Ví dụ sử dụng Arduino

Dưới đây là mã Arduino mẫu để điều khiển LED sử dụng 74HC595:


#define DS_PIN 8     // Chân Data
#define SH_CP_PIN 10  // Chân Shift Clock
#define ST_CP_PIN 9  // Chân Latch Clock

void setup() {
  pinMode(DS_PIN, OUTPUT);
  pinMode(SH_CP_PIN, OUTPUT);
  pinMode(ST_CP_PIN, OUTPUT);
}

void loop() {
  byte data = 0b00000001; // Dữ liệu ban đầu với 1 LED sáng
  
  for (int i = 0; i < 8; i++) { // Dịch qua từng LED
    shiftOut(DS_PIN, SH_CP_PIN, MSBFIRST, data); // Gửi dữ liệu nối tiếp
    digitalWrite(ST_CP_PIN, HIGH);              // Chốt dữ liệu
    digitalWrite(ST_CP_PIN, LOW);
    delay(500);                                 // Dừng 500ms
    data = data << 1; // Dịch dữ liệu sang trái (dịch bit)
  }
}

Giải thích

  1. Dữ liệu khởi đầu (data):

    • Mặc định, chỉ bật LED đầu tiên (0b00000001).
  2. Dịch bit (data = data << 1):

    • Lệnh này sẽ dịch bit sang trái. Ví dụ:
      • Lần 1: 0b00000001 → bật LED 1.
      • Lần 2: 0b00000010 → bật LED 2.
      • Lần 3: 0b00000100 → bật LED 3.
      • Cứ thế cho đến LED cuối cùng.
  3. Xung clock (SH_CPST_CP):

    • Mỗi lần gửi dữ liệu (shiftOut), dữ liệu sẽ được đẩy vào IC.
    • SH_CP: Gửi từng bit theo thứ tự.
    • ST_CP: Chốt dữ liệu để xuất ra chân Q0-Q7.
  4. Dừng thời gian (delay(500)):

    • Tạo hiệu ứng chuyển động giữa các LED.

Mở rộng: Hiệu ứng dịch vòng lặp (circular shift)

Nếu muốn dịch bit theo dạng vòng lặp, bạn có thể sử dụng mã sau:


void loop() {
  byte data = 0b00000001; // Dữ liệu ban đầu với 1 LED sáng
  
  while (true) { // Lặp vô hạn
    shiftOut(DS_PIN, SH_CP_PIN, MSBFIRST, data); // Gửi dữ liệu
    digitalWrite(ST_CP_PIN, HIGH);              // Chốt dữ liệu
    digitalWrite(ST_CP_PIN, LOW);
    delay(500);                                 // Dừng 500ms
    data = (data << 1) | (data >> 7);           // Dịch vòng
  }
}

Trong đoạn mã này:

  • data << 1: Dịch bit sang trái.
  • data >> 7: Lấy bit cao nhất (MSB) đưa xuống vị trí thấp nhất (LSB).

Kết quả: LED sẽ sáng tuần tự từ đầu đến cuối và quay lại LED đầu tiên, tạo hiệu ứng vòng lặp.

5. Ứng dụng thực tế

  • Điều khiển LED và ma trận LED: Điều khiển nhiều LED bằng cách mở rộng số chân I/O.
  • Điều khiển 7 đoạn: Hiển thị số bằng cách kết hợp với 7 đoạn.
  • Điều khiển relay: Bật/tắt các thiết bị thông qua relay

6. Lưu ý khi sử dụng

  • Dòng tải trên mỗi chân Q0-Q7 không nên vượt quá 20mA.
  • Sử dụng điện trở hạn dòng khi kết nối LED để bảo vệ IC và LED.
  • Khi cần điều khiển số lượng lớn đầu ra, có thể kết nối daisy chain nhiều IC 74HC595.

Leave a Reply

Your email address will not be published. Required fields are marked *