Конечно же, их распространению поспособствовала низкая цена (за счёт китайских производителей) и простота сборки экрана.

Но что если попробовать применить подобные матрицы в своих устройствах на микроконтроллерах? Какой интерфейс обмена и логика вывода у этих матриц?
Попробуем с этим всем разобраться.
Китайцы предлагают как сами матрицы разных размеров и с разным разрешением, так и контроллеры для вывода на них изображений с различными несложными эффектами, а также всю необходимую фурнитуру, соединительные кабели, рамы.
Матрицы встречаются как одноцветные (белые, желтые, красные, зеленые, синие), так и 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-канале, где я ещё много всякой всячины подключаю к микроконтроллерам.
Всем спасибо за внимание!
Комментарии (25)
herr_kaizer
09.05.2016 22:29+1Вопрос не по теме: не ваши табло висят по всей Айской? :) Очень много одинаковых, разве что эффекты различаются.
ElectricFromUfa
09.05.2016 22:33Нее, к светодиодной рекламе я не имею никакого отношения. Просто было интересно, как можно применить такие матрицы в своих устройствах
Andy_Big
09.05.2016 23:04+1А нельзя ли минимизировать время отключения экрана, изменив алгоритм? Пункт 3 выносим в начало, убирая его из времени отключения экрана:
1. Выдаём по SPI данные для сдвиговых регистров.
2. Устанавливаем лог. 0 на ножке nOE.
3. Устанавливаем лог. уровни на ножках A и B в соответствии с обновляемой группой светодиодов (одной из четырёх).
4. Выдаём на ножку SCLK короткий положительный импульс.
5. Устанавливаем лог. 1 на ножке nOE.
И время загрузки новых данных в регистры больше не влияет на время отключения экрана для обновления, можно загружать сколько угодно модулей последовательно, упадет только FPS, но не яркость.ElectricFromUfa
09.05.2016 23:07Точно! Можно! Завтра внесу изменения в код
Andy_Big
09.05.2016 23:08+1Вроде так и работал наш алгоритм, когда мы делали схемы для бегущих строк :)
ElectricFromUfa
10.05.2016 18:30Ну да, это я ступил.
Проверил в железе, поправил статью и исходники. В видео этот косяк, к сожалению, останется.
Спасибо за замечание!
Sun-ami
10.05.2016 00:01Пины C и D — это дополнительные линии адреса группы, они для матриц со сканированием 1/8 и 1/16. R и G — это входы данных сдвиговых регистров для красных и зелёных светодиодов — распиновка разъёма взята с красно-зелёной матрицы со сканированием 1/16.
ElectricFromUfa
10.05.2016 08:17Во! Спасибо за пояснение!
Только не совсем понял, в случае RGB-матрицы, через какой пин будут лететь данные синего цвета?Sun-ami
10.05.2016 09:04+1Распиновка бывает разная. Вот в этой статье: https://learn.adafruit.com/downloads/pdf/32x16-32x32-rgb-led-matrix.pdf — совсем другая распиновка для RGB-матриц
GennPen
10.05.2016 02:27+1Всегда думал, что там стоят обычные светодиоды. Овальные скорее всего для того, чтобы фокусировка была размазана по горизонтальной плоскости, а не строго вперед.
Shadow_Runner
10.05.2016 09:02+4Ничего личного, но подобная реклама одна из причин, по которой хочется Адблок в реальность. Это соревнование на тему «Ярче, дерганее, долой эпилептиков с этого света» ничего хорошего не приносит.
Infthi
10.05.2016 10:46+1Ну и заодно библиотека для ардуино, которую подключаешь, устанавливаешь пины, и всё работает: https://github.com/freetronics/DMD. Несмотря на то, что она позиционируется как библиотека для экранов конкретной конторы, у меня она взлетела с китайской 32х16
ElectricFromUfa
10.05.2016 11:31Ну эта контора как раз покупает в Китае эти модули и продаёт комплектом с arduino и переходником с arduino на 16-пиновый интерфейс матрицы
Dark_Purple
10.05.2016 19:25Отлично, жду статью про эту матрицу.
Z80A
10.05.2016 19:55Всего 12 таких матриц и получится большой ZX Spectrum за 30 тыр.
Уууу, как же я хочу на таком демки посмотреть или в эксолона поиграть…
48х64 см, это будет как 80 см телевизор. Круть!
sumrakssk
Где ты был 7 лет назад… Все было только на китайском… Дома до сих пор пара матриц лежит. Если кому нужно…
ElectricFromUfa
7 лет назад я вроде даже не знал о существовании таких матриц. Да и из Китая делал редкие осторожные заказы)
Z80A
Год назад удалось разжиться такой б/у матрицей за треть цены.

Подключал к ардуино методом тыка, собрал мечту детства — цветомузыку, эх до чего красивая и мощная хрень!
Radan
А можно подробнее про вашу цветомузыку? Цветомузыки на такой матрице я ещё не встречал!
Z80A
Выход с аудио плеера идёт на аналоговый вход к ардуине, программа анализирует уровень сигнала, строит картинку и засылает в панель. Одна матрица вечером освещает всю комнату — можно дискотеки устраивать!
ElectricFromUfa
Да уж, в помещении эти матрицы слепят прилично