Разнообразие дисплеев: какие типы матриц используются в самодельных электронных проектах?
Меня очень радует, что в современном мире, где казалось бы все полезные гаджеты уже изобретены, становится всё больше людей, которые любят делать свои собственные устройства. В большинстве девайсов есть необходимость отображать какую-либо информацию и большинство новичков часто теряется в типах дисплеев, их шинах и программных протоколах. В сегодняшней статье мы с вами без воды и по факту узнаем о том, какие матрицы можно использовать в DIY-самоделках!
Предисловие
Начать пожалуй стоит с того, какой тип информации вам необходимо выводить на дисплей вашего устройства. Помимо графических ЖК и OLED-матриц существуют также узкоспециализированные знакогенераторные и сегментные дисплеи. В знакогенераторных дисплеях все символы и псевдографика уже заранее зашиты в ПЗУ контроллера и микроконтроллеру обычно ничего не нужно делать помимо управления регистрами позиции курсора и записи в видеопамять желаемых знаков, что значительно разгружает МК для другой работы.
Сегментные дисплеи обычно подходят для вывода простого текста и цифр. Однако управлять ими чуточку сложнее — по своей сути, реализация контроллера сегментного дисплея в какой-то степени похожа на контроллер графической матрицы — просто количество управляемых сегментов значительно меньше.

Однако в этой статье речь пойдет именно о графических дисплеях, поскольку в последние 10 лет TFT-матрицы очень сильно подешевели и стали доступными благодаря различным shield’ам. Добавьте к этому то, что в утиле можно бесплатно раздобыть дисплей от портативного навигатора или планшета — которые также можно использовать в своём проекте!
TTL RGB
Начнём пожалуй с самых легкодоступных и распространенных «бесплатных» дисплеев с последовательным RGB-протоколом. Такие матрицы можно встретить в самой разной электронике нулевых и десятых годов: автомобильные мультимедийные системы (40/50pin), GPS-навигаторы (40pin), планшеты и ультра-дешевые ноутбуки (50pin) и т.д. Несколько типов подобных дисплеев были унифицированы и поэтому свободно взаимозаменяемы: точно взаимозаменяемы матрицы 4″ с разрешением 480×232 и 7″ с разрешением 800×480.

Особенностью таких дисплеев является то, что у них нет собственной памяти (или фреймбуфера) — иными словами, хост-процессор должен формировать и отправлять картинку в реальном времени самостоятельно. Протокол для общения с такими дисплеями простой и напоминает VGA, только цифровой:
-
Включаем режим передачи данных устанавливая пин Data Enable в низкий уровень.
-
Устанавливаем биты цветовых компонент следующего пикселя (пины R0..8, G0..8, B0..8, допускается использовать не все биты каждой компоненты — например RGB565 или RGB332).
-
«Выводим» пиксель в текущем столбце на экран дёргая строб DCLK. Тайминги строба всегда указаны в даташите. По факту это просто запись цвета пикселя в «сдвиговый регистр» контроллера, фактически пиксель пока не выводится!
-
По достижению горизонтального разрешения дисплея дёргаем строб HSYNC, который инкрементирует строку и установит столбец обратно в нулевую позицию.
-
Когда столбцы заполнены — дёргаем строб VSYNC, который наконец-то выведет картинку на дисплей

Основная проблема таких дисплеев в том, что с микроконтроллеров ими «рулить» довольно сложно из-за большого количества пинов, отсутствия собственной памяти и необходимости точного соблюдения таймингов стробов. Если упустить тайминг — получим белый дисплей или тиринг.
Однако такие дисплеи можно легко использовать с внешними скалерами с поддержкой TTL-матриц:

А также с одноплатниками, где в SoC обычно сразу есть поддержка подобных дисплеев. Например, Broadcom’ы в Raspberry Pi «из коробки» поддерживают такие дисплеи (можно взять с GPIO-гребенки необходимые пины), а в некоторых одноплатниках на AllWinner разъем сразу распаян на плате:

Бонусом можно считать то, что с такими дисплеями часто идет резистивный тачскрин 🙂
LVDS
Со вторым типом дисплеев некоторые читатели возможно знакомы не понаслышке — LVDS-матрицы и родственные им eDP. Такие дисплеи имеют дифференциальную шину, что «не позволяет» управлять ими с обычных микроконтроллеров, а найти их можно в большинстве ноутбуков, телевизоров и некоторых планшетах. У LVDS-матриц есть своя собственная видеопамять и набор регистров для управления различными параметрами изображения, а ещё они сами формируют подсветку!

LVDS-матрицы отличаются относительной стандартизированностью и совместимостью: если устройство не зависит от EDID-дисплея и в нём столько же дифференциальных линий, сколько и в дисплее — матрица скорее всего заработает в штатном режиме. Управлять LVDS-дисплеями «ручками» нецелесообразно поскольку эта задача обычно возложена на сопроцессоры в SoC или на GPU. В некоторых современных одноплатниках есть поддержка таких матриц (хотя-бы на уровне чипсета), однако чаще всего подключает HDMI к LVDS-скалеру:

MIPI DSI
Почти всё, что было сказано о LVDS справедливо и о MIPI DSI — похожем дифференциальном интерфейсе, который используется в современных планшетах и смартфонах. Однако у него есть главное отличие — каждый дисплей требует свою собственную инициализацию или иными словами — init sequence, без которого мы увидим лишь белый экран. Регистры DSI частично стандартизированы, но для включения дисплея требуется сконфигурировать вендорские регистры которые отличаются от производителя к производителю.

Аппаратная поддержка DSI есть почти во всех современных SoC и одноплатниках, в Raspberry Pi для этого даже отдельный коннектор есть. Если вам хочется подключить DSI-дисплей к своему одноплатнику, то init-sequence можно поискать в драйвере дисплея в коде ядра устройства с которого вы берете дисплей. Например, вот для дисплея Galaxy S4.
Учтите что DSI-дисплеи не стандартизируют способ формирования напряжения подсветки, им требуется внешнее BIAS-напряжение и более того, OLED-матрицы запитываются совсем иным способом, поэтому использовать их в своих проектах скорее всего не выйдет.
MIPI DBI
А вот дисплеи с протоколом DBI — совершенно другой вопрос! Большинство дисплеев-shield’ов для Arduino, ESP32 и других микроконтроллеров представляют из себя именно матрицы с DBI-контроллерами. Дисплеи с таким протоколом могут работать на нескольких шинах: 8080 8-битная, 8080 16-битная и SPI.

DBI берёт корни от дисплеев для мобильных телефонов и MP3-плееров из нулевых. В начале 2000х-годов, когда цветные дисплеи только-только появились, для управления матрицами было множество разных вендорских протоколов: чего стоят только дисплеи от Сименсов или от Motorola C350 которые часто использовали в самоделках. DBI был призван чтобы частично стандартизировать их — однако проблема характерная для DSI сохранилась: каждому дисплею нужен свой собственный init sequence!

В зависимости от используемой шины, управлять DBI-дисплеями легко: устанавливаем пин D/C (Данные/Команда) в высокий уровень дабы выбрать регистр для записи, записываем номер регистра (например, 0x29 включит дисплей), переводим D/C обратно в низкий уровень и записываем нужные нам данные. Если нам нужно вывести картинку — мы просто непрерывно её пишем в видеопамять выбирая регистр 0x22 — контроллер сам позаботится о инкрементах.
Заключение
Вот такая небольшая и подробная статья у нас с вами сегодня получилась. Надеюсь, вам было интересно! Материал был написан дабы продолжить тему с исследованием типов дисплеев, которые можно найти бесплатно в утиле или на барахолках и я очень надеюсь что статья была кому-то полезной!
Nvidia сама формировала спрос на видеокарты? После отставки Дженсена Хуанга раскрылась неудобная правда о дефиците ускорителей
Оператор раскрыл характеристики Honor 700 Pro, Honor 700 и Honor 700S: 9000 мА·ч, 80 Вт и 200 Мп
SpaceX получила лицензию на исторический 15-й полёт Starship за 3 часа 45 минут до запуска
Начались продажи премиального флагмана Samsung W27
[Перевод] USB-C хаб за 40 евро превратился в док-станцию для Switch 2 благодаря 540 байтам прошивки питания и 108 байтам для HDR
Vivo X300 Ultra получил OriginOS 7: камеру улучшили, а автономность увеличили
Данные 46 тысяч сотрудников TSMC продают за 3 биткоина
Атака за пределами GitHub: хакеры нацелились на 8000 репозиториев в поисках ключей OpenAI, Anthropic и облачных сервисов