ELECTRONICS

Матрица 8×8 на MAX7219 и Arduino: подключение, библиотека LedControl, бегущая строка

Светодиодные индикаторыСкетч проверен компиляцией

MAX7219 — драйвер, который берёт на себя 64 светодиода матрицы, а Arduino отдаёт всего три сигнальных провода. Точки зажигаются командой «строка, столбец, вкл», яркость регулируется шестнадцатью ступенями, и ничего не мерцает: развёртку делает микросхема.

Модули соединяются в цепочку: выход одного в вход следующего, и те же три провода управляют четырьмя, восемью, шестнадцатью матрицами. Так делают бегущую строку и большие часы.

Схема подключения

VCCGNDDINCSCLKMAX7219
Наведите на провод или нажмите на него — расскажу, зачем он нужен.

Распиновка

ПроводКуда и зачем
VCC5 В.
GNDЗемля.
DINВход данных.
CS (LOAD)Защёлка.
CLKТакт.
DOUTВыход данных на следующий модуль в цепочке. На пятиконтактной гребёнке справа.

Характеристики

Драйвер
MAX7219, 64 светодиода
Яркость
16 ступеней
Питание
4–5,5 В
Ток
до 330 мА на полной яркости
Интерфейс
SPI-подобный, 3 провода
Цепочка
до 8 модулей на одной библиотеке LedControl

Одна матрица или бегущая строка

Для одной матрицы хватает LedControl: зажечь точку, вывести строку байтов, выставить яркость. Рисунок задаётся восемью байтами — по байту на строку, единица в бите зажигает точку. Удобно рисовать в онлайн-редакторах вроде xantorohara.github.io/led-matrix-editor, они выдают готовый массив.

Для текста и нескольких матриц берут MD_MAX72XX с надстройкой MD_Parola: там шрифты, прокрутка и эффекты. Обратите внимание на тип модуля в её настройках — FC16 для синих квадратных модулей из наборов; при неправильном типе текст выводится зеркально или по столбцам.

Библиотека

LedControlДля одной матрицы. Для текста и цепочек — MD_MAX72XX и MD_Parola.

Готовый скетч

#include <LedControl.h>

// DIN, CLK, CS, число модулей
LedControl lc = LedControl(11, 13, 10, 1);

// Улыбка: восемь строк, единица — горящая точка
const byte SMILE[8] = {
  B00111100,
  B01000010,
  B10100101,
  B10000001,
  B10100101,
  B10011001,
  B01000010,
  B00111100
};

void setup() {
  lc.shutdown(0, false);     // выйти из спящего режима
  lc.setIntensity(0, 4);     // яркость 0..15
  lc.clearDisplay(0);
}

void loop() {
  for (int row = 0; row < 8; row++) {
    lc.setRow(0, row, SMILE[row]);
  }
  delay(2000);
  lc.clearDisplay(0);
  delay(500);
}

Скетч собирается arduino-cli под Arduino UNO

Первым параметром в каждой функции идёт номер модуля в цепочке: 0 — ближайший к Arduino.

Частые ошибки

Матрица не горит вовсе

Драйвер стартует в спящем режиме. Без lc.shutdown(0, false) он не покажет ничего.

Рисунок повёрнут или зеркален

Зависит от того, как впаяна матрица в модуль, а на дешёвых модулях — как попало. Поверните массив байтов в коде или переверните матрицу в панельках: она вставная.

Мерцает, плата перезагружается

Ток. На полной яркости матрица берёт треть ампера. Снизьте яркость setIntensity или дайте отдельное питание 5 В.

Работает первая матрица в цепочке, остальные тёмные

Число модулей в конструкторе LedControl не совпадает с реальным. Или DOUT первой не соединён с DIN второй.

Текст в MD_Parola идёт по столбцам

Неверный тип модуля в настройках библиотеки. Для квадратных синих — FC16_HW, для длинных зелёных — GENERIC_HW или PAROLA_HW.

Что понадобится