Tôi có:
- 2 ma trận LED 8 x 8 , và
- Chip MAX7219.
Q: Tôi chỉ tự hỏi làm thế nào tôi có thể kết nối nó với Arduino Duemilanove ?
Tôi đã googling nhưng tôi không thể tìm ra làm thế nào.
Tôi có:
Q: Tôi chỉ tự hỏi làm thế nào tôi có thể kết nối nó với Arduino Duemilanove ?
Tôi đã googling nhưng tôi không thể tìm ra làm thế nào.
Câu trả lời:
Bryan Chung đã có một hướng dẫn vẫn có sẵn trên Internet Archive về cách kết nối Ma trận LED với Arduino bằng MAX7219:
Dưới đây là một thử nghiệm với ma trận LED 8 × 8, được điều khiển bởi IC MAX7219, được điều khiển thông qua bảng điều khiển vi Arduino. Một PCB tùy chỉnh đã được Tan tạo ra từ DinoTech để thu dọn tất cả các dây kết nối ma trận LED và IC. Nó đi kèm với một nguồn cung cấp điện 12V riêng biệt, để không làm cạn kiệt mọi thứ từ bo mạch Arduino.
Chỉ cần 4 dây để điều khiển IC trình điều khiển MAX7219. Họ là
Đồng hồ dữ liệu chốt / tải mặt đất
Dữ liệu và chân đồng hồ phải khớp với các lệnh cho shiftOut () trong Arduino. Chốt chốt sẽ cho xung từ THẤP đến CAO sau lệnh shiftOut. Tôi đã viết chương trình gốc cho Javelin Stamp. Vì Arduino chỉ có thể dịch chuyển 8 bit dữ liệu, tôi phải sử dụng 2 lệnh riêng biệt để chuyển cả byte trên và byte dưới sang MAX7219, cần điều khiển 2 byte cho mỗi lệnh.
Đối với cấu trúc dữ liệu của ma trận LED 8 × 8, tôi sử dụng một mảng byte - ma trận có độ dài 8. Mỗi hàng trong ma trận tương ứng với kích thước Y. Mỗi bit trong một hàng tương ứng với kích thước X. Chữ số 1 được bật; 0 là tắt. Hướng X được đảo ngược và cũng có sự dịch chuyển 1 bit. Hàm updateLED () phục vụ cho việc này.
Chương trình đầu tiên là một hình ảnh động của một chuyển động dòng đơn.
int CLOCK = 12;
int LATCH = 13;
int DATA = 11;
byte matrix[8];
int idx = 0;
void setup() {
pinMode(CLOCK, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(DATA, OUTPUT);
digitalWrite(CLOCK, LOW);
digitalWrite(LATCH, LOW);
digitalWrite(DATA, LOW);
initLED();
clearLED();
}
void loop() {
for (int j=0;j<8;j++) {
updateLED(idx, j, true);
}
refreshLED();
delay(200);
for (int j=0;j<8;j++) {
updateLED(idx, j, false);
}
refreshLED();
delay(100);
idx++;
idx %= 8;
}
void ledOut(int n) {
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, (n>>8));
shiftOut(DATA, CLOCK, MSBFIRST, (n));
digitalWrite(LATCH, HIGH);
delay(1);
digitalWrite(LATCH, LOW);
}
void initLED() {
ledOut(0x0B07);
ledOut(0x0A0C);
ledOut(0x0900);
ledOut(0x0C01);
}
void clearLED() {
for (int i=0;i<8;i++) {
matrix[i] = 0x00;
}
refreshLED();
}
void refreshLED() {
int n1, n2, n3;
for (int i=0;i<8;i++) {
n1 = i+1;
n2 = matrix[i];
n3 = (n1<<8)+n2;
ledOut(n3);
}
}
void updateLED(int i, int j, boolean b) {
int t = 1;
int n = 0;
int m = 0;
if (j==0) {
m = 7;
}
else {
m = j-1;
}
n = t<<m;
if (b) {
matrix[i] = n | matrix[i];
}
else {
n = ~n;
matrix[i] = n & matrix[i];
}
}
Xin lỗi nếu điều đó hơi muộn với bạn, nhưng tôi vừa viết một bài về việc sử dụng MAX7219 với ma trận LED và Màn hình LED 7 đoạn.