วิธีการเชื่อมต่อ LED Matrix เข้ากับ Arduino โดยใช้ MAX 7219?


9

ฉันมี:

ถาม:ฉันแค่สงสัยว่าฉันจะเชื่อมต่อกับArduino Duemilanove ได้อย่างไร

ฉัน googling แล้ว แต่หาไม่ออก


@Bruno - คุณลบลิงค์ดังนั้นฉันคิดว่ามันตาย แต่มันก็ใช้ได้และคุณไม่ได้อธิบายว่าทำไมคุณจึงลบดังนั้นฉันจึงย้อนกลับ หากคุณมีเหตุผลที่ดีในการลบลิงค์โปรดทิ้งไว้ในช่องแสดงความคิดเห็น
stevenvh

@stevenvh ขออภัยฉันทดสอบก่อนหน้านี้และมันไม่ทำงาน บางทีฉันอาจมีปัญหาการเชื่อมต่ออินเทอร์เน็ต แต่ตอนนี้มันใช้งานได้ คุณย้อนกลับการแก้ไขของฉันได้ดี
Bruno Ferreira

คำตอบ:


11

Bryan Chung ยังมีบทช่วยสอนที่ยังคงมีอยู่ในInternet Archiveเกี่ยวกับวิธีการเชื่อมต่อ LED Matrix กับ Arduino โดยใช้ MAX7219:

นี่คือการทดลองกับเมทริกซ์ LED 8 × 8 ซึ่งขับเคลื่อนด้วย MAX7219 IC ควบคุมผ่านบอร์ดไมโครคอนโทรลเลอร์ Arduino Tan สร้างขึ้นเองโดย PCB จาก DinoTech เพื่อจัดเก็บสายไฟทั้งหมดที่เชื่อมต่อเมทริกซ์ LED และ IC มันมาพร้อมกับแหล่งจ่ายไฟ 12V แยกต่างหากเพื่อไม่ให้ระบายทุกอย่างออกจากบอร์ด Arduino

จำเป็นต้องใช้สายไฟเพียง 4 เส้นในการควบคุม IC ไดรเวอร์ MAX7219 พวกเขาคือ

Data Clock Latch / Ground Ground

ข้อมูลและหมุดนาฬิกาควรตรงกับคำสั่ง shiftOut () ใน Arduino สลักแลตจะให้พัลส์ LOW to HIGH หลังจากคำสั่ง shiftOut ฉันได้เขียนโปรแกรมต้นฉบับสำหรับ Javelin Stamp เนื่องจาก Arduino สามารถเปลี่ยนข้อมูลได้เพียง 8 บิตฉันจึงต้องใช้ 2 คำสั่งแยกกันเพื่อเลื่อนทั้งบนและล่างเป็น MAX7219 ซึ่งต้องการการควบคุม 2 ไบต์สำหรับแต่ละคำสั่ง

สำหรับโครงสร้างข้อมูลของเมทริกซ์ LED 8 × 8 ฉันใช้อาร์เรย์ไบต์ - เมทริกซ์ความยาว 8 แต่ละแถวในเมทริกซ์สอดคล้องกับมิติ Y แต่ละบิตในแถวสอดคล้องกับมิติ X Digit 1 เปิดอยู่; 0 ถูกปิด ทิศทาง X จะกลับด้านและยังมีการเลื่อน 1 บิต ฟังก์ชั่น updateLED () เหมาะสำหรับสิ่งนี้

โปรแกรมแรกคือภาพเคลื่อนไหวของการเคลื่อนไหวบรรทัดเดียว

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

2

ขออภัยถ้ามันสายไปหน่อย แต่ฉันเพิ่งเขียนบทความเกี่ยวกับการใช้ MAX7219กับเมทริกซ์ LED และจอแสดงผล LED 7 ส่วน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.