Подключение светодиодных матриц на MAX7219

Подключение светодиодных матриц MAX7219
В этой статье я расскажу про вывод символов на светодиодную панель, собранную из нескольких матриц на основе драйвера MAX7219. Ранее, в статье про подключение драйвера, я упоминал готовые модули с матрицами 8×8, которые можно соединять друг с другом, и тем самым получить панель различной длины. Драйверы при этом соединяются каскадно, при загрузке данные смещаются от одного драйвера к другому.

Модули можно заказать тут. Я приобрел 5 модулей в виде конструктора, спаял их и соединил вместе. Также в продаже имеется цельная панель на 4 матрицы. Схема одного модуля представлена на картинке ниже:
Схема матрица MAX7219

Способ вывода данных на матрицы

При каскадном включении, выход DOUT предыдущего драйвера соединяется с входом DIN следующего драйвера, группы выводов CS и CLK соединяются параллельно. При загрузке данных информация сдвигается побитно, сначала загружаются данные предназначенные для последнего драйвера в цепочке, затем остальные по очереди. Для одного драйвера пакет состоит из 2 байт, это адресный байт и байт данных.

Печатная плата модуля спроектирована так, что данные загружаемые в регистры драйвера Digit0-Digit7 отображаются в строках матрицы (горизонтально), ниже приведена поясняющая картинка:
Загрузка данных в матрицу MAX7219

Для вывода символов я решил взять стандартную таблицу со шрифтом 5×7, которую использовал для графического дисплея Nokia 5110. Но в этой таблице байты символов упакованы по-другому, каждый байт предназначен для вертикального отображения в столбец, таким образом, просто передавать байты на драйвер не получится. Можно конечно переписать всю таблицу символов, но это слишком утомительно. В данном случае необходимо переворачивать символы, извлекая данные побитно.

Данные проще записать за один сеанс, предварительно подготовив пакеты байтов для всех матриц, то есть сразу заполнить одну строку на всю длину панели, затем остальные строки в последующих сеансах (всего 8 сток). Для 5-ти матриц за сеанс передается 10 байт данных, для всей панели соответственно получим 80 байт.

Можно конечно использовать пустой регистр No-Op (адрес 0x00), предназначенный для обращения к отдельному драйверу в цепочке, но при этом также придется отправлять байты на всю длину строки. В этом случае только один пакет будет записан в конкретный драйвер, для остальных драйверов данные запишутся в регистры No-Op, не повлияв на их функционирование. Такой способ нельзя назвать рациональным, так как увеличивается количество передаваемых данных, что замедляет процесс вывода информации.

Подключение матриц MAX7219 к микроконтроллеру

Я подключил светодиодную панель из 5 матриц к микроконтроллеру PIC16F628A, схема представлена на следующей картинке:
Схема подключения матриц MAX7219
Часть кода программы приведена ниже (полный код в конце статьи):

В коде программы заложены таблицы, содержащие специальные знаки, цифры, латинский и кириллический алфавит. Каждый символ по ширине занимает 6 столбцов, включая пустой разделительный столбец, соответственно на панель из 5 матриц поместится 6 символов и еще останется 4 столбца. Можно подключить еще одну матрицу, тогда на панель уместится ровно 8 символов.

В программе на этапе первоначальной настройки, в регистр kol_symb необходимо записать число символов помещающихся на панели, а в регистр kol_matr число подключенных матриц. Далее в основной программе с помощью косвенной адресации записать последовательно шесть ASCII символов, которые нужно вывести на панель, начиная с адреса data_symb. В моем примере на панель последовательно с паузой 2 секунды выводятся надписи “Пример”, “+23.6⁰”, “Radio!”.

Для вывода группы символов вызывается подпрограмма vivod, где с помощью косвенной адресации заполняются 5 регистров (начиная с адреса data_viv) составляющих одну строку на панели. Заполнение регистров выполняется побитно, путем извлечения байтов каждого символа из таблиц данных. После заполнения, содержимое регистров передается на драйверы с помощью подпрограммы send, затем также подготавливаются данные для второй строки и т.д. Неиспользованные столбцы в конце панели заполняются нулями. Для тактовой частоты в 4 МГц, вывод данных на панель из 5 матриц занимает 22,5 мс.

В статье про подключение драйвера MAX7219 можно почитать более подробную информацию об этой микросхеме.

MAX7219 макетная плата

На следующем видеоролике можно увидеть отображение символов на светодиодной панели:

Прошивка МК и исходник для подключения светодиодной панели

У этой записи 9 комментариев

  1. Осталось объединить “DS3231 – подключение часов реального времени” и “Подключение светодиодных матриц на MAX7219” и получатся “супер часы”, 😉 Возможно ли сие действо?

  2. Здравствуйте, а как сделать бегущую строку?

    1. Приветствую, для бегущей строки надо дорабатывать прошивку, я пока не занимался этим вопросом.

  3. Нужно перерабатывать подпрограмму vivod?

    1. да, кроме этого надо реализовать кольцевой буфер на определенное количество символов, которые будут перемещаться в виде бегущей строки, еще прикинуть хватит ли скорости микроконтроллера, скорее всего придется увеличивать тактовую частоту.

  4. Приветствую, не подскажите при подаче питания на матрицу загораются сигменты по 9точек (3на3) и какую бы прошивку не пробовал эти сигменты горят постоянно. Что можно сделать?

    1. Здравствуйте, а какую прошивку использовали, матрица только одна?

  5. Здравствуйте.
    Попробуйте перевернуть матрицу на плате на 180гр

  6. Библиотека LedControl library может работать как с 7-ми сегментными светодиодными дисплеями, так и со светодиодными матрицами. В нашем случае будут использоваться методы для работы со светодиодными матрицами.

Имя (обязательно)Email (обязательно)Веб-сайт

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