Как подключить светодиодную матрицу в Arduino с помощью MAX 7219?


9

Я имею:

Q: Мне просто интересно, как я могу подключить это к Arduino Duemilanove ?

Я гуглил, но не мог понять как.


@Bruno - Вы удалили ссылку, поэтому я подумал, что она мертва. Но все в порядке, и вы не объяснили, почему удалили, поэтому я откатился. Если у вас есть веская причина удалить ссылку, оставьте ее в поле для комментариев.
Стивенвх

@stevenvh Извините, я проверял это раньше, и он не работал. Возможно, у меня были некоторые проблемы с подключением к Интернету, но сейчас это работает. Вы хорошо откатили мою правку.
Бруно Феррейра

Ответы:


11

У Брайана Чанга в Интернет-архиве все еще есть учебное пособие о том, как подключить светодиодную матрицу к Arduino с помощью MAX7219:

Вот эксперимент со светодиодной матрицей 8 × 8, управляемой микросхемой MAX7219, управляемой через плату микроконтроллера Arduino. Тан из DinoTech изготовил специальную печатную плату, чтобы привести в порядок все провода, соединяющие светодиодную матрицу и ИС. Он поставляется с отдельным источником питания 12 В, чтобы не слить все с платы Arduino.

Для управления микросхемой драйвера MAX7219 необходимо всего 4 провода. Они

Data Clock Latch / Load Ground

Данные и контакты синхронизации должны совпадать с выводами для команды shiftOut () в Arduino. Защелка выводит импульс от НИЗКОГО до ВЫСОКОГО после команды shiftOut. Я написал оригинальную программу для Javelin Stamp. Поскольку Arduino может сдвигать только 8 бит данных, мне нужно использовать две отдельные команды, чтобы сдвинуть как верхний, так и нижний байты в MAX7219, который нуждается в 2-байтовом управлении для каждой команды.

Для структуры данных светодиодной матрицы 8 × 8 я использую байтовый массив - матрицу длины 8. Каждая строка в матрице соответствует измерению Y. Каждый бит в строке соответствует измерению X. Цифра 1 включена; 0 выключен. Направление Х меняется на противоположное, также есть сдвиг на 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.