Pull to refresh

Как управлять «рекламными» LED-матрицами

Reading time3 min
Views58K
В последние годы получили широкое распространение в наружной рекламе и различных информационных табло светодиодные матрицы. Достаточно яркие, динамичные — они прекрасно привлекают внимание и не слепнут в солнечный день. Каждый из вас видит их на улицах вашего города ежедневно.
Конечно же, их распространению поспособствовала низкая цена (за счёт китайских производителей) и простота сборки экрана.

Но что если попробовать применить подобные матрицы в своих устройствах на микроконтроллерах? Какой интерфейс обмена и логика вывода у этих матриц?
Попробуем с этим всем разобраться.

Китайцы предлагают как сами матрицы разных размеров и с разным разрешением, так и контроллеры для вывода на них изображений с различными несложными эффектами, а также всю необходимую фурнитуру, соединительные кабели, рамы.
Матрицы встречаются как одноцветные (белые, желтые, красные, зеленые, синие), так и 3-цветные (RGB). Обозначение модели матрицы выглядит обычно так Pxx или PHxx, где xx — число, указывающее расстояние между пикселями в миллиметрах. В моём случае это P10. Кроме того, матрицы некоторых типоразмеров бывают не только прямоугольными, но и квадратными.
Возможные варианты типоразмеров матриц


Итак, имеем белую матрицу 32x16 точек с размерами 320x160мм и, соответственно, межпиксельным расстоянием в 10 мм. Давайте рассмотрим её поближе.
Вид спереди:


Вам тоже показалось, что светодиоды какие-то овальные? Вам не показалось…


Над светодиодами сделан небольшой козырёк, который не даёт солнечному свету засвечивать светодиоды.

Вид спереди со снятой пластиковой маской


Переворачиваем матрицу и видим плату:

На плате кучка микросхем логики. Давайте разберёмся, что это за микросхемы:
1. 1 x SM74HC245D — неинвертирующий буфер
2. 1 x SM74HC04 — 6-канальный инвертор
3. 1 x SM74HC138D — 8-битный дешифратор
4. 4 x APM4953 — сборка из 2 P-канальных MOSFET
5. 16 x 74HC595D — сдвиговый регистр с защёлкой
Два 16-пиновых разъёма — интерфейсные, один из них входной (к нему подключается контроллер экрана), а второй — выходной (к нему подключается следующая матрица в цепочке). Стрелка на плате направлена от входного разъёма к выходному.
Питание подаётся на клеммы в центре платы. Напряжение питания — 5В, максимальный ток (когда включены все светодиодны матрицы) — 2А (для белой матрицы).

На сайте удалось найти распиновку разъёма (разъёмов) матрицы:

Также на сайте удалось найти принципиальную схему, которая довольно точно соответствует схеме моей матрицы:


На разъёме:
— Пины 6, 14, 16 (C, G, D) — не используются (возможно они используются в 3-цветных матрицах).
— Пины 2 и 4 (A и B) — задают, какая из 4 групп светодиодов экрана работает в данный момент. Матрицы используют динамическую индикацию, поочерёдно переключая 4 группы светодиодов в зависимости от логических уровней на ножках A и B. На плате эти сигналы приходят на дешифратор D18, который открывает 1 из 4 групп P-канальных полевиков, тем самым подавая +5В на аноды светодиодов выбранной группы.
— Пин 1 (nOE) — разрешает работу матрицы (лог. 0 гасит все матрицы в цепочке). Логика работы этого пина реализована на элементах НЕ в D19 и дешифраторе D18.
— Пины 8 и 12 (CLK и R) — линии клока и данных синхронного последовательного интерфейса. Их подключаем к SCK и MOSI интерфейса SPI микроконтроллера.
— Пин 10 (SCLK) — по переднему фронту защёлкивает переданные в сдвиговые регистры данные на их выходы. Сдвиговые регистры подключены к катодам светодиодов матрицы. По этой причине передаваемые данные нужно инвертировать (светодиод будет гореть при лог. 0).

Все сигналы кроме сигнала R соединены у входного и выходного интерфейсных разъёмов матрицы через буфер. Сигнал R проходит от входного разъёма через буфер к первому сдвиговому регистру матрицы и, пройдя через всю цепочку регистров, выходит на выходной интерфейсный разъём. Таким образом, все сдвиговые регистры всех матриц включены в одну длинную цепочку.

Исходя из этого, логика обновления экрана (точнее четверти экрана) выглядит следующим образом:
1. Выдаём по SPI данные для сдвиговых регистров. Для одной матрицы 32x16 это 16 байт (16 8-битных регистров).
2. Устанавливаем лог. 0 на ножке nOE.
3. Устанавливаем лог. уровни на ножках A и B в соответствии с обновляемой группой светодиодов (одной из четырёх). Это подаёт +5В на аноды светодиодов выбранной группы.
4. Выдаём на ножку SCLK короткий положительный импульс. Это подаёт землю на катоды светодиодов в соответствии с загруженными в регистры байтами.
5. Устанавливаем лог. 1 на ножке nOE. При этом четверть экрана (одна группа светодиодов) загорается и горит до следующего обновления следующей группы светодиодов.
Повторяем пункты 1-5 с постоянным периодом.

Мои реализации этого алгоритма и небольшое демо работы матрицы:
Исходник проекта для AVR ATmega328 (IAR)
Исходник проекта для STM32f103c8t6 (IAR)

Вся изложенная выше информация, а также демонстрация работы матрицы в видео ниже. В нём я с 13:04 по 15:00 говорю про зависимость яркости экрана от кол-ва матриц. Это из-за ошибки в алгоритме. Ошибка исправлена и теперь данные загружаются до отключения экрана.


Также буду рад вас видеть на моём youtube-канале, где я ещё много всякой всячины подключаю к микроконтроллерам.

Всем спасибо за внимание!
Tags:
Hubs:
+23
Comments25

Articles

Change theme settings