Professional Documents
Culture Documents
SLIDE 2 - 1 - Bai3 MultiLED
SLIDE 2 - 1 - Bai3 MultiLED
Để điều khiển được nhiều không giới hạn số LED, mạch arduino cần kết hợp
với IC 595 hoặc với các IC có đặc tính tương tự.
IC595 là một dạng IC có đặc tính “vào nối tiếp, ra song song”. Người dùng có
thể đưa lần lượt nhiều giá trị logic vào ngõ vào của IC để nó lưu vào bộ nhớ
chờ đến lúc “chốt”. Khi IC được “chốt” thì toàn bộ các bit đã lưu ở bộ nhớ sẽ
được chuyển ra các chân dữ liệu của IC. Giá trị của các chân dữ liệu này sẽ
không bị thay đổi cho đến khi IC được “chốt” lần tiếp theo.
Các chân từ 1 tới 7 và chân 15 là ngõ ra của IC ứng với Q0, Q1, …, Q7.
Chân DS (14) là ngõ vào của IC.
Chân 16 cấp nguồn dương (2-6VDC), chân 8 GND
Chân SHCP (11) là chân đưa xung clock (xung nhịp) vào IC. Khi có cạnh lên
của xung thì IC đưa tín hiệu ở ngõ vào (chân DS) tới bộ nhớ của IC để chờ xử
lý. Xung clock là một chuỗi tín hiệu logic 0 và 1 xen kẽ.
Chân STCP (12) là chân đưa xung latch (xung chốt) vào IC. Khi có cạnh lên
của xung thì IC đưa toàn bộ 8 bit ở bộ nhớ ra ngõ ra của IC (Q0 tới Q7).
Chân MR là chân reset IC. Khi chân này ở mức logic 0 thì toàn bộ bộ nhớ của
IC sẽ bị xoá về 0. Nhưng điện áp ở các chân ngõ ra vẫn giữ nguyên giá trị.
Chân OE là chân Output Enable. Khi chân này ở mức logic 0 thì các chân ngõ
ra mới có thể thay đổi được trạng thái.
Ví dụ:
A = A >> 2; //dịch phải 2
bit A = A << 3; //dịch trái 3
bit Lập trình Arduino
3.1. Lý thuyết liên quan – Câu lệnh liên
quan
shiftOut() có nhiệm vụ chuyển 1 byte (gồm 8 bit) ra ngoài từng bit một. Bit
được chuyển đi có thể được bắt đầu từ bit nằm bên trái nhất (leftmost) hoặc từ
bit nằm bên phải nhất (rightmost). Các bit này được xuất ra tại
chân dataPin sau khi chân clockPin được pulsed (có mức điện thế là HIGH,
sau đó bị đẩy xuống LOW).
Cú pháp: shiftOut(dataPin, clockPin, bitOrder, value);
dataPin: pin sẽ được xuất ra tín hiệu (int)
clockPin: pin dùng để xác nhận việc gửi từng bit của dataPin (int)
bitOrder: một trong hai giá trị MSBFIRST hoặc LSBFIRST.
(Bắt đầu từ bit bên phải nhất hoặc Bắt đầu từ bit bên trái nhất)
Lậpvalue: dữ liệu cần được shiftOut. (byte)
trình Arduino
3.2. Thiết kế sơ đồ nguyên
lý
Sơ đồ
nguyên lý
Sơ
đồ
lắp
mạch
trên
bread
board
(bo mạch test)
Lập trình Arduino
3.3. Biên soạn chương
/*shiftOut với 8 LED bằng 1 IC HC595*/ trình
int latchPin = 8; //chân ST_CP của 74HC595
int clockPin = 12; //chân SH_CP của 74HC595
int dataPin = 11; //Chân DS của 74HC595
const int HC595_COUNT = 2; //Nếu có số IC 74595 nhiều hơn thì thay bằng một số lớn hơn 2.
byte ledStatus[HC595_COUNT]= {0}; //Trạng thái của LED, hay chính là byte mà ta sẽ gửi qua shiftOut
void setup() {
pinMode(latchPin, OUTPUT); //BUỘC PHẢI pinMode các chân này là OUTPUT
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void fillValueToArray(byte value) {
for (int i = 0;i < HC595_COUNT; i += 1) {ledStatus[i] = value;}
}
void shiftOutHC595(int dataPin, int clockPin, byte ledStatus[]) {
digitalWrite(latchPin, LOW);
for (int i = 0; i < HC595_COUNT; i++)
{shiftOut(dataPin,clockPin,LSBFIRST,ledStatus[i]); }
digitalWrite(latchPin, HIGH);
}
Lập trình Arduino
3.3. Biên soạn chương
void loop() { trình
fillValueToArray(0); //Đưa giá trị khởi đầu vào mảng
//Led sáng tuần tự
for (int i = 0; i < HC595_COUNT; i++) {
for (byte j=0;j<8;j++) {
ledStatus[i] = (ledStatus[i] << 1) | 1;
shiftOutHC595(dataPin,clockPin,ledStatus);
delay(100); // Dừng chương trình khoảng 500
mili giây để thấy các hiệu ứng của đèn LED
}
}