Рассмотрим светодиодный матричный модуль на базе чипа MAX7219 и способ подключения её к Arduino UNO R3.

Данный модуль удобен тем, что для управления используется всего 3 контакта, помимо питания. Можно объединять несколько таких модулей в большой дисплей, но с ростом количества бодулей бут падать скорость отрисовки.

 

Оборудование

 

Соединение

  • Arduino pin8 с выводом DIN модуля
  • Arduino pin9 с выводом CS модуля
  • Arduino pin10 с выводом CLK модуля
  • Питание 5В с выводом VCC модуля (если несколько матричных модулей, то питание от Arduino будет не хватать и прийдется модули запитывать от внешнего источника питания)
  • Земля питания с выводом GND модуля (земля модуля и земля Arduino должны быть соединены)

Соединение светодиодного матричного модуля (MAX7219) с Arduino

 

Скетч

Будет рисоваться символ сердца, затем все светодиоды последовательно зажгем и затем последовательно все погасим. И так по кругу бесконечно. 

unsigned char i;
unsigned char j;

int Max7219_pinCLK = 10;
int Max7219_pinCS = 9;
int Max7219_pinDIN = 8;

unsigned char disp1[33][8] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // рисунок сердца
  0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x40, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x60, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x60, 0x90, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x60, 0x90, 0x88, 0x40, 0x40, 0x00, 0x00, 0x00,
  0x60, 0x90, 0x88, 0x44, 0x40, 0x00, 0x00, 0x00,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x00, 0x00, 0x00,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x00, 0x00,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x00,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x20,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x60,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x90, 0x60,
  0x60, 0x90, 0x88, 0x44, 0x44, 0x88, 0x90, 0x60 // рисунок сердца
};

void Write_Max7219_byte(unsigned char DATA) {
  unsigned char i;
  digitalWrite(Max7219_pinCS, LOW);
  for (i = 8; i >= 1; i--) {
    digitalWrite(Max7219_pinCLK, LOW);
    digitalWrite(Max7219_pinDIN, DATA & 0x80);
    DATA = DATA << 1;
    digitalWrite(Max7219_pinCLK, HIGH);
  }
}

void Write_Max7219(unsigned char address, unsigned char dat) {
  digitalWrite(Max7219_pinCS, LOW);
  Write_Max7219_byte(address);
  Write_Max7219_byte(dat);
  digitalWrite(Max7219_pinCS, HIGH);
}

void Init_MAX7219(void) {
  Write_Max7219(0x09, 0x00);
  Write_Max7219(0x0a, 0x03);
  Write_Max7219(0x0b, 0x07);
  Write_Max7219(0x0c, 0x01);
  Write_Max7219(0x0f, 0x00);
}

void setup() {
  pinMode(Max7219_pinCLK, OUTPUT);
  pinMode(Max7219_pinCS, OUTPUT);
  pinMode(Max7219_pinDIN, OUTPUT);
  delay(50);
  Init_MAX7219();
}

void loop() {
  //рисуем сердце
  for (j = 0; j < 17; j++) {
    for (i = 1; i < 9; i++)
      Write_Max7219(i, disp1[j][i - 1]);
    delay(100);
  }
  //все закрашиваем
  for (i = 1; i < 9; i++) {
    Write_Max7219(i, 0xFF);
    delay(100);
  }
  //все стираем
  for (i = 1; i < 9; i++) {
    Write_Max7219(i, 0x00);
    delay(100);
  }
  //пауза
  delay(800);
}

 

Видео

Комментарии   

0 # Sergey Prokofiev 29.04.2016 15:41
Здравствуйте,не могли бы вы дополнить этот код дополнительными комментариями,а именно,что делает код в столбиках:
void Write_Max7219_byte
void Write_Max7219
void Init_MAX7219(void)
Спасибо,я ниразу не программист:) :lol:
Ответить | Ответить с цитатой | Цитировать
0 # Илья 30.05.2016 16:50
Походу Write_Max7219_byte - отправляет одно байтовое значение. CLK выключается, посылает в DIN битовое значение, CLK выключает. Походу такой принцип посыла сообщения. Write_Max7219 уже отправляет два байта: индекс строки диодов и битовую маску, определяющую какие диоды в строчке зажигать. Вопрос лишь в инициализации. Что за параметры настройки и какие там варианты?
Ответить | Ответить с цитатой | Цитировать
0 # Николай 15.09.2016 10:25
А я купил блок из 4-х таких матриц ... с этим скетчем получился сдвиг и я его немного дополнил. Так что я теперь 1 раз программист :) Только относительно разъёма сердца лежат на боку и непонятно откуда тут число 33 - unsigned char disp1[33][8] . А дополнил так:

1. Третья строка:

unsigned char n;

2. Добавил цикл на количество матриц:

void Write_Max7219(unsigned char address, unsigned char dat) {
digitalWrite(Max7219_pinCS, LOW);
for (n = 1; n < 5; n++) { //повторяем для 4-х матричных модулей
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
}
digitalWrite(Max7219_pinCS, HIGH);
}
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий


Защитный код
Обновить