Làm cách nào để kết nối LED Matrix với Arduino bằng MAX 7219?


9

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.


@Bruno - Bạn đã xóa liên kết, vì vậy tôi nghĩ rằng nó đã chết. Nhưng nó ổn, và bạn đã không giải thích lý do tại sao bạn xóa, vì vậy tôi quay lại. Nếu bạn có một lý do chính đáng để xóa liên kết, vui lòng để lại nó trong trường bình luận.
stevenvh

@stevenvh Xin lỗi, tôi đã thử nó trước đây và nó không hoạt động. Có thể tôi đã gặp một số vấn đề về kết nối Internet nhưng giờ nó đã hoạt động. Bạn đã làm tốt việc quay trở lại chỉnh sửa của tôi.
Bruno Ferreira

Câu trả lời:


11

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];
  }
}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.