Як підключити світлодіодну матрицю до Arduino за допомогою MAX 7219?


9

Я маю:

З: Мені просто цікаво, як я можу це з'єднати з Arduino Duemilanove ?

Я гугла, але не могла дізнатися, як.


@Bruno - Ви видалили посилання, тому я подумав, що він мертвий. Але це нормально, і ви не пояснили, чому ви видалили, тому я відкотився назад. Якщо у вас є вагомі причини видалити посилання, залиште його в полі для коментарів.
stevenvh

@stevenvh Вибачте, я тестував його раніше, і він не працював. Можливо, у мене виникли деякі проблеми з підключенням до Інтернету, але він працює зараз. Ви добре відскакували мою редакцію.
Бруно Феррейра

Відповіді:


11

Брайан Чунг мав підручник, який ще доступний в Інтернет-архіві про те, як підключити світлодіодну матрицю до Arduino за допомогою MAX7219:

Ось експеримент із світлодіодною матрицею 8 × 8, керованою ІС MAX7219, керованою через плату мікроконтролера Arduino. Tan від DinoTech зробив спеціальну друковану плату, щоб привести в порядок всі дроти, що з'єднують світлодіодну матрицю та ІС. Він постачається з окремим джерелом живлення 12 В, щоб не злити все з плати Arduino.

Для управління MAX7219 драйвером необхідні лише 4 дроти. Вони є

Фіксація / завантаження наземних годин

Дані та тактові дані повинні відповідати тим, які використовуються для команди shiftOut () в Arduino. Шпилька засувки дасть імпульс НИЗЬКИЙ ВИСОКИЙ після команди shiftOut. Я написав оригінальну програму для Javelin Stamp. Оскільки Arduino може перенести лише 8 біт даних, я повинен використовувати 2 окремі команди для переміщення як верхнього, так і нижнього байтів на MAX7219, для якого потрібен 2-байтний контроль для кожної команди.

Для структури даних матриці 8 × 8 світлодіодів я використовую байтовий масив - матрицю довжиною 8. Кожен рядок у матриці відповідає розміру Y. Кожен біт підряд відповідає розміру X. Увімкнено цифру 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 зі світлодіодними матрицями та 7-сегментними світлодіодними дисплеями.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.