CÁCH SỬ DỤNG 74HC595

     
Trong bài viết này, tôi sẽ nói về thanh ghi dịch (Shift Register), một trong những IC thanh ghi dịch phổ biến đó là 74HC595 và cuối cùng là cách sử dụng IC thanh ghi dịch 74HC595 với Arduino và những lợi ích của giao tiếp này.

Bạn đang xem: Cách sử dụng 74hc595

Bạn đang xem: Cách sử dụng 74hc595

Giới thiệu

Thông thường, đối với một ứng dụng nhỏ chẳng hạn như bạn muốn điều khiển 8 đèn LED với sự trợ giúp của Arduino (hoặc bất kỳ vi điều khiển nào). Ứng dụng này, mặc dù rất cơ bản và đơn giản, sẽ yêu cầu bạn sử dụng 8 trong số các chân Input / Output có sẵn trên board Arduino: mỗi chân cho một đèn LED.

Bây giờ hãy xem xét một ứng dụng phức tạp hơn, với yêu cầu điều khiển 8 đèn LED giống nhau, đồng thời làm các công việc khác như hiển thị thông báo hoặc bất kỳ thông tin nào trên màn hình LCD 16 × 2 hoặc giao tiếp với một thiết bị Bluetooth để điều khiển đèn LED thông qua điện thoại thông minh !!!

Loại ứng dụng lớn hơn này sẽ tiêu thụ rất nhiều chân I / O của bạn trên board Arduino và có thể không còn đủ chân để giao tiếp các thiết bị bổ sung.

Trên thực tế chúng ta có IC thanh ghi dịch để giải quyết tình huống này.

Thanh ghi dịch là gì?

Thanh ghi dịch (Shift Register) về cơ bản là một vi mạch chuyển đổi nối tiếp song song. Về cơ bản nó nhận dữ liều đầu vào nối tiếp thông qua một chân (về mặt kỹ thuật bạn cần ít nhất 3 chân, tôi sẽ nói vấn đề này sau) và chuyển đổi dữ liệu vào nối tiếp thành đầu ra song song 8 bit, do đó làm giảm số chân giao diện giữa vi điều khiển và các thiết bị đầu ra.

Có nhiều loại thanh ghi dịch như vào nối tiếp ra song song, vào nối tiếp ra nối tiếp, vào song song ra nối tiếp và vào song song ra song song.

Trong bài hướng dẫn này, tôi sẽ sử dụng một IC thanh ghi dịch VÀO nối tiếp RA song song gọi là 74HC595.

Giới thiệu IC ghi dịch 74HC595

IC này thường dùng trong các mạch quét led 7, led ma trận …để tiết kiệm số chân cho vi điều khiển. Có thể mở rộng số chân vi điều khiển bao nhiêu tùy thích mà không IC nào có thể làm được bằng cách mắc nối tiếp ngõ vào dữ liệu các IC với nhau.

Xem thêm: Người Có Từng Đi Qua Từng Góc Phố Cũ Còn Anh, Lời Bài Hát Phố Cũ Còn Anh

Sơ đồ chân IC


*

Ta đặt dữ liệu vào chân DS, và tạo một xung SHCP thì dữ liệu tại chân DS sẽ được dịch vào thanh ghi 8-STAGE SHIFT REGISTER.

Lần lượt làm như trên 8 lần (dịch bit cao trước), thì ta được 8 bit trong thanh ghi 8-STAGE SHIFT REGISTER.

Sau đó ta tạo một xung STCP thì 8 bit trong thanh ghi 8-STAGE SHIFT REGISTER sẽ được sao chép sang thanh ghi 8-BIT STORAGE REGISTER. Lúc này nếu chân OE ở mức thấp thì ngõ ra sẽ bằng với giá trị thanh ghi 8-BIT STORAGE REGISTER, còn nếu chân OE ở mức cao thì ngõ ra ở trạng thái tổng trở cao (Hi-Z).

Chú ý:

Khi dịch dữ liệu vào thanh ghi 8-STAGE SHIFT REGISTER, và chưa tạo xung STCP thì thanh ghi 8-BIT STORAGE REGISTER sẽ giữ nguyên trạng thái và ngõ ra cũng giữ nguyên trạng thái.Khi chân MR ở mức 0 thì dữ liệu trên thanh ghi 8-STAGE SHIFT REGISTER sẽ bị xóa, còn thanh ghi 8-BIT STORAGE REGISTER sẽ giữ nguyên trạng thái và ngõ ra cũng giữ nguyên trạng thái.

Chuẩn bị

Phần cứng

Tên linh kiệnSố lượng
Arduino Uno1
IC 74HC5951
Điện trở 220 Ω8
LED8
Breadboard1
Dây cắm breadboard

Phần mềm: Arduino IDE

Sơ đồ mạch 1

Hình ảnh sau đây cho thấy sơ đồ mạch giao tiếp IC ghi dịch 74HC595 với Arduino UNO.


*

Chương trình

#define DATA 5

#define LATCH 6

#define CLOCK 7

#define HC595_count 2

void setup()

{

pinMode(LATCH, OUTPUT);

pinMode(CLOCK, OUTPUT);

pinMode(DATA, OUTPUT);

}

void loop()

{

char* temp;

unsigned int i;

temp = (char*) &i;

for( i = 1 ; i

{

digitalWrite(LATCH, LOW);

for (int j = 0; j

{

shiftOut(DATA, CLOCK, LSBFIRST, *(temp + j));

}

digitalWrite(LATCH, HIGH);

delay(1000);

}

digitalWrite(LATCH, LOW);

for (int j = 0; j

{

shiftOut(DATA, CLOCK, LSBFIRST, *(temp + j));

}

digitalWrite(LATCH, HIGH);

delay(1000);

}

Giải thích

HC595_count chính là số lượng IC 74HC595 đang dùng.

Xem thêm: Cách Làm Gạo Lứt Giảm Cân Thơm Ngon Ít Người Biết, Bí Quyết Tự Làm Gạo Lứt Rang Ăn Liền Thơm Ngon

Hàm shiftOut() chỉ có thể dịch 1 lần 8bit mà thôi. Ở đây ta đang dùng đến 16 bit, tức là một biến 2 byte, nên ở đây tôi dùng unsigned int là một biến 2 byte không dấu. Khi i đạt đến giá trị 16 384 – 0100 0000 0000 0000 thì thoát vòng lặp, nên bạn để ý bên dưới tôi tiếp tục dịch i qua trái thêm một lần nữa để có giá trị là 32 768 – 1000 0000 0000 0000, để có thể hiển thị đèn LED cuối cùng.