Arduino Uno có khá ít chân do đó bị hạn chế nếu làm việc với nhiều linh kiện, ví dụ như 2 LED matrix 8x8.
Số chân cần thiết là (8 + 8) x 2 = 32 chân, vậy để điều khiển được LED cần sử dụng IC 74HC595 để "nới thêm chân".
IC này có khả năng dịch bit và lưu lại trạng thái của 8-bit, ngoài ra còn có thể đẩy các bit bị tràn ra ngoài, sử dụng các bit tràn này để truyền vào 1 IC khác tạo ra không gian rộng rãi hơn.
Giới thiệu IC 74HC595
![IC-74HC595](https://resources.stdio.vn/content/article/5ef62bca5ef9e26f89a5c4d3/resources/res-1596987948-1596987948732.jpg)
Ý nghĩa của các chân
![IC 74HC595](https://resources.stdio.vn/content/article/5ef62bca5ef9e26f89a5c4d3/resources/res-1596990096-1596990096631.png)
- VCC: chân để dòng điện đi vào, nối với cực dương.
- GND: chân để dòng điện đi ra, nối với cực âm.
- DS Serial Data Input: dữ liệu sẽ được truyền vào IC thông qua cổng này.
- OE Output Enable: chân này dùng để bật/tắt IC, IC được phép chạy khi ở trạng thái LOW.
- ST_CP Storage register clock pin: hay còn gọi là chân LATCH, khi chân này từ trạng thái LOW chuyển sang HIGH thì data trong IC sẽ được xuất ra các chân Q1 → Q7.
- SH_CP Shift register clock pin: còn gọi là chân CLOCK, khi từ trạng thái LOW → HIGH tức là một xung, dữ liệu sẽ được dịch vào một bit theo trạng thái hiện tại của của chân DS.
- MR Master Reclear : khi ở trạng thái HIGH , bộ nhớ trong IC sẽ được xóa hoàn toàn.
- Q1 → Q7 : tượng trưng cho 8 bit trong vùng nhớ IC.
Mạch điện với 1 IC 74HC595N
Chuẩn bị
- 2 breadboard
- 1 Arduino Uno
- 1 IC 74HC595N
- 8 bóng đèn tùy màu
- 8 điện trở 560Ω
- Wire số lượng nhiều
Sơ đồ mạch
![Arduino và IC 74HC595 và 8 LED.](https://resources.stdio.vn/content/article/5ef62bca5ef9e26f89a5c4d3/resources/res-1596988004-1596988004142.png)
Nguồn điện 5V được nối từ dây màu đỏ qua các con trở và tới cực dương của đèn LED. Các chân 8, 11, 12 lần lượt điều khiển các chân LATCH, CLOCK, INPUT.
- OE (Enable) được nối vào chân GND vậy nó mang giá trị LOW.
- MR nối với cực dương có hiệu điện thế 5v nên mang giá trị HIGH.
- Các chân từ Q0 → Q7 lần lượt nối với các cực dương của bóng đèn thông qua trở.
Code
int latchPin = 8; int clockPin = 12; int dataPin = 11; void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { // đếm từ 1 -> 255 for (int numberToDisplay = 1; numberToDisplay < 256; numberToDisplay = numberToDisplay << 1)
{ // giữ trạng thái chân LATCH LOW digitalWrite(latchPin, LOW); // dịch bit shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); // chuyển trạng thái chân LATCH sang HIGH digitalWrite(latchPin, HIGH); // delay 0.5s cho lần chạy kế tiếp delay(500); } }
Giải thích
setup()
: sử dụng pin 8, 11, 12 để điều khiển lần lượt 3 chân của LATCH, CLOCK, INPUT của IC 74HC595.loop()
: tạo vòng lặp có giá trị từ 1 → 255, bước nhảy của vòng lặp này là dịch qua một bit.- Mỗi một vòng lặp bắt đầu bằng việc cài đặt cho chân LATCH có trạng thái LOW.
- Hàm
shiftOut
có các tham số lần lượt là:- Chân INPUT.
- Chân CLOCK.
- LSBFIRST dịch bit theo thứ tự hiện có của data trong IC.
- MSBFIRST dịch bit theo chiểu ngược lại.
Kết quả
![Kết quả sử dụng 74HC595](https://resources.stdio.vn/content/article/5ef62bca5ef9e26f89a5c4d3/resources/res-1596990580-1596990580396.gif)
Mạch điện với 2 IC 74HC595
Sơ đồ mạch
![so_do_mach_x2_74hc595_arduino_va_8_led](https://resources.stdio.vn/content/article/5ef62bca5ef9e26f89a5c4d3/resources/res-1596990688-1596990688664.png)
Code
int latchPin = 8; int clockPin = 12; int dataPin = 11; #define HC595_count 2 void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { char* temp; unsigned short i; temp = (char*) &i; for( i = 1 ; i < 32768 ; i = i << 1) { digitalWrite(latchPin, LOW); for (int j = 0; j < HC595_count; j++) { shiftOut(dataPin, clockPin, LSBFIRST, temp[j]); } digitalWrite(latchPin, HIGH); delay(500); } digitalWrite(latchPin, LOW); for (int j = 0; j < HC595_count; j++) { shiftOut(dataPin, clockPin, LSBFIRST, temp[j]); } digitalWrite(latchPin, HIGH); delay(500); }
Giải thích
Trong sơ đồ mạch với 2 IC, chân Q7' sẽ xuất dữ liệu sang cho chân DS (INPUT) của IC thứ 2. Vẫn phải giữ cho chân CLOCK và chân LATCH của IC 2 có giá trị tương đương với IC 1.
Ở mạch 1 IC một lần dịch bit dịch tối đa 8 bit và hàm shiftOut
cũng vậy, nên trong trường hợp này dịch bit theo số lượng IC tức là với 2 IC, một lần dịch sẽ là 8 x 2= 16 bit.
Khi biến i
đạt đến giá trị 16 384 tương đương 0100 0000
0000 0000
thì vòng lặp sẽ thoát, nên phía dưới tôi tiếp tục dịch thêm một lần nữa để làm sáng đèn cuối cùng và giá trị đó là 32768 - 1000 0000
0000 0000
.
Kết quả
![Kết quả sử dụng 2 IC 74HC595](https://resources.stdio.vn/content/article/5ef62bca5ef9e26f89a5c4d3/resources/res-1596990641-1596990641277.gif)