CSTroN — самодельный монитор на винтажной CSTN-матрице с VGA-входом и платой управления на ПЛИС

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!



Что если бы TFT никогда не изобрели? ЖК-монитор с CSTN-матрицей

Вступление


Когда ЭЛТ-мониторы преобладали, в их пользу выдвигали следующий аргумент: несмотря на все усовершенствования, ЖК-дисплеи никогда не превзойдут по качеству изображения трубочные. Они, как и прежде, будут находить применение лишь там, где требуются энергоэффективность и малая толщина [1]. Прошли десятилетия, и теперь мы знаем, правы ли были сторонники этого аргумента. Но сегодня интересно взглянуть на ЖКИ того времени: действительно ли они настолько некачественные? Каково это — смотреть на CSTN-матрицу в 2019 году?



Слева TFT, справа CSTN, оба дисплея из девяностых

ЖКИ в прошлом веке


До перехода на TFT в портативных компьютерах находили применение самые разные дисплейные технологии. Поначалу применяли такие же ЭЛТ-мониторы, как в настольных компьютерах, только поменьше. Например, в Compaq Portable (1983), IBM 5155 (1984) или Commodore SX-64 (также 1984).



IBM 5155, автор: Soupmeister, лицензия: CC-BY-SA-2.0, отсюда

Таскать такой ПК с собой повсюду было тяжело, совсем другое дело — ноутбук с TN-ЖКИ (twist nematic), например, IBM 5140 (1986), Toshiba T1000 (1987). У этих дисплеев малы контрастность и угол обзора.



Toshiba T1100 с монохромным TN-дисплеем, автор: Johann H. Addicks, лицензия: GFDL, отсюда, ссылка битая, в оригинале тоже

Некоторые производители экспериментировали с газоразрядными матрицами, так увидели свет ноутбуки Toshiba T3200 (1987) и IBM PS/2 P70 (1991). Они обеспечивали высокую контрастность и несколько градаций яркости красно-оранжевого света, но стоили довольно дорого. Наконец, были разработаны STN-ЖКИ (supertwist nematic), как, например, в Электронике МС1504 и его прототипе Toshiba T1100. Контраст получался значительно лучше — от 1:5 до 1:50, а нескольких градаций яркости было достаточно для деловых применений (использовать ноутбук в быту было пока слишком дорого). Но что если пользователь хочет цветное изображение? На этот случай ему предложили две технологии: TFT и CSTN (color supertwist nematic). Первый ноутбук с TFT — NEC PC9801NC — был представлен в 1990 году, качество изображения для тех лет было выше всех похвал, но стоила «такая игрушка» значительно дороже других и так недешёвых портативных компьютеров. Ну а CSTN-дисплей — это просто STN-дисплей, на который наложен светофильтр. Довольно долго в ноутбуках применяли матрицы обоих типов. А в вагонах нью-йоркского метро CSTN-мониторы работают до сих пор.



Один из них, источник: Transit +PLUS

CSTroN


Автору захотелось посмотреть на CSTN-дисплей. Как? Для начала — просто купить старый ноутбук с ним и попользоваться. В нём оказался процессор AMD 5x86-P133. То есть, самое динамичное, что на нём можно запустить — это DOS-игры (да ладно, он и MPEG1 потянет в программе QV — переводчик). Конечно, играть в них здорово, но захотелось посмотреть, как на таком дисплее выглядит, к примеру, YouTube или современная игра — но это невозможно.

Или?

В общем, надо как-нибудь добавить к нему VGA- или HDMI-вход — и можно подавать сигнал с чего-нибудь современного. TFT-экраны от ноутбуков так переделывают в мониторы довольно часто. Просто покупают плату, подходящую к матрице — и готово. А можно сделать и свою приставку на ПЛИС, преобразующую VGA- или HDMI-сигнал в поток данных о пикселях.

Когда-то выпускались и платы для превращения в VGA-мониторы CSTN-матриц, но такую уже не найти. Но можно приспособить для этого отладочную плату на ПЛИС ML505.



Готовый результат. Довольно непривычно наблюдать такое на CSTN-дисплее: 16 ГБ ОЗУ.

Управление матрицей


Начнём с азов. Подобно любым матричным дисплеям, CSTN-дисплей имеет строки и стобцы. Вы светодиодной матрицей от микроконтроллера когда-нибудь управляли? Здесь то же самое, но напряжения — переменные. Нужно подать определённые сигналы как на выбранные, так и на невыбранные строки и столбцы — и пиксель на пересечении выбранных строки и столбца покажет то, что нужно. Форма сигналов получается весьма сложной, значение имеют и среднеквадратическое значение напряжения, и сдвиг фаз между напряжениями на строке и столбце, и смещение… И вот так, пиксель за пикселем, формируется изображение.

К счастью, от ПЛИС не требуется вырабатывать все эти сигналы, да ещё и на таком огромном количестве линий. Всё это проделывает модуль, встроенный в дисплей. Там импульсный преобразователь повышает постоянное напряжение, оно проходит через делитель и повторитель, так получается напряжение смещения. Драйверы строк и столбцов превращают это напряжение в переменное необходимой формы. Всё, что требуется — подать в дисплейный модуль поток данных о состоянии пикселей.

На TFT-ЖКИ с интерфейсом DPI (digital parallel interface) за один такт поступают сразу все данные об одном пикселе. На линии строчной и кадровой синхронизации поступают импульсы после каждых, соответственно, строки и кадра. Пиксели просто непрерывно передаются строка за строкой, кадр за кадром. Если передача полного кадра занимает 1/60 с, значит, частота обновления составляет 60 Гц. Разрядность шины данных равна глубине цвета в битах, обычно 16 (5 бит на красный и синий, 6 на зелёный), 18 (по 6 бит на каждый из цветов), or 24 (по 8 бит на каждый из цветов). LVDS — это то же самое, только биты передаются не параллельно, а последовательно по дифференциальным парам, ну а в MIPI DSI они ещё и объединяются в пакеты. Шина SPI/i80 позволяет передавать контроллеру различные команды, а тот, выполняя их, формирует сигналы для DPI или аналогичного интерфейса. Который, в свою очередь, чем-то напоминает VGA, только данные о яркости каждого из цветов поступают не в аналоговом, а в цифровом виде. Существуют преобразователи VGA в DPI и обратно. Очень удобны платы, позволяющие получать VGA-сигнал от Raspberry Pi, хотя изначально этот компьютер вырабатывает только HDMI и композитное видео.

На дисплейный модуль CSTN-матрицы надо подавать сигналы, очень похожие на подаваемые на TFT-матрицу с интерфейсом DPI. В даташите на SX21V001 [2] показано, как управлять CSTN-дисплеем с разрешением в 640х480:



Тут изображена передача целого кадра. На линию CL1 сигнал поступает после каждой строки, на FLM — после каждого кадра. А ещё там шина данных из 16 линий. Вообще-то, на этом рисунке допущена ошибка: во время передачи первой и второй строк по линиям UD0-UD7 поступают данные Y1 и Y2, а не X1 и X2, а по LD0-LD8 — соответственно, Y241 и Y242. Здесь U и L — это, соответственно, upper и lower, то есть, дисплей состоит из двух матриц разрешением в 640х240, расположенных одна над другой. Вот он, загадочный «dual scan» из старой рекламы ноутбуков, от которого происходит горизонтальная полоса через весь экран. У STN- и CSTN-дисплеев контрастность обратно пропорциональна числу строк, поэтому такое разделение позволяет её увеличить. Но это не единственное, чем они отличаются по способу управления от TFT.



Непонятно, почему горизонтальную ось здесь назвали Y… Но в любом случае, CL2 здесь — линия для подачи тактовых импульсов, переключающих пиксели. Но по шинам UD и LD за один такт передаются не данные об одном многобитном пикселе, как в TFT, а данные сразу о нескольких пикселях по три бита на каждый. Один бит на цвет, три бита на пиксель — всего восемь цветов.



Но как же так? Понятно, что у CSTN-дисплеев количество цветов мало, например, 4096 или 32768, но ведь не 8 же. Оказывается, здесь применяется ШИМ. Светодиодами же так управляют, значит, и пикселями ЖКИ можно. Нужна, например, яркость в 50% — включаем пиксель в чётных кадрах и выключаем в нечётных. Этот способ называют FRC (frame rate control), ну а ШИМом в данном контексте называют управление яркостью пикселей тем же способом, но в пределах не двух или более кадров, а одного. FRC осуществляет внешнее устройство, а ШИМ — микросхемы дисплейного модуля, если там есть поддержка этой функции. Автору неизвестны CSTN-дисплеи с ШИМ, но он предполагает, что таковы матрицы HPA-типа. В любом случае, раз ШИМ недоступен, необходимую глубину цвета можно получить с помощью FRC.



Ценой этого будет мерцание, поэтому в CSTN-дисплеях бывают чудовищные (по сравнению с TFT) частоты кадров. Например, в этом модуле изначально было 120 Гц, а автор разогнал его до 240.

Как это было реализовано


Перед разработчиком возникло сразу несколько трудностей:

— входной сигнал имеет частоту кадров в 60 Гц, её надо удваивать или даже учетверять

— во входном сигнале кадр не делится на верхнюю и нижнюю половины по 640х240 пикселей каждая, а здесь надо разделить

— а ещё нужно реализовать FRC, иначе глубина цвета будет 3 бита на пиксель

Первые два пункта означают, что необходим фреймбуфер, и не простой, а двухпортовый. Ну а третья задача решается при помощи GLDP LUT (grayscale-level display pattern lookup table) [3]. У таблицы поиска два вида входных данных: цвет, который надо отобразить, и состояние счётчика кадров. И один вид выходных данных: те три бита, которые надо подать на субпиксели того или иного пикселя в данный момент. Значит, потребуются следующие узлы:



Первым делом надо заполнить весь экран каким-нибудь цветом. На этой стадии необязательно знать, где находится какой пиксель, достаточно убедиться, что дисплейный модуль подаёт на матрицу сигналы необходимой формы. Код для заливки в ПЛИС — здесь.



Теперь попробуем что-нибудь вывести, и с неполной яркостью в том числе. Нужны такие таблицы поиска для FRC, чтобы минимизировать мерцание. Автор придумал две таблицы, применяемые к пикселям в шахматном порядке. Поэтому каждые два соседних пикселя мерцают несинхронно. Код — здесь.



Итак, показывать изображение мы уже плату «научили», следующее, что потребуется — фреймбуфер. При 640х480 и 5 битах на каждый из цветов его объём составит около 600 килобайт. Немного, но в ПЛИС столько нет. Хорошо, на плате есть ОЗУ типа DDR2 и Xilinx MIG для управления им. Реализованы два FIFO, один на чтение, другой на запись. Арбитр решает, будет ли следующий обмен данными с DDR2 чтением или записью. Буферов два, запись идёт в один, чтение из другого, а при смене кадров они меняются местами. Код арбитра — здесь.

Осталось реализовать видеозахват, в одном из предыдущих проектов автора уже есть похожая наработка, после доработки код преобразователя из VGA в DPI стал таким.

И что же получилось?


Смотрите!


Для автора это третий проект на ПЛИС, было интересно поработать с Xilinx MIG и DDR2, а также с несложным конвейером. Запланирован более качественный FRC с дельта-сигма-модуляцией, а также опыты с более поздними CSTN-панелями, использующими технологию HPA (High Performance Addressing) фирмы Sharp.

Спасибо за внимание!

Источники


1. Li, W., & Guo, Q. (2000). Liquid Crystal Display Application Technology. Beijing: Electrical Industry Press.

2. HITACHI (1999). SX21V001-Z4 Customer’s Acceptance Specifications.

3. Hsueh, Y., & Lee, J. (2008). Image improvement method for LCD frame rate controller. 2008 IEEE International Symposium on Consumer Electronics. doi:10.1109/isce.2008.4559534
Источник: https://habr.com/ru/post/444762/


Интересные статьи

Интересные статьи

Еще одна компактная статься Стюарта Рейнса про то, чем измерять результативность процессов.Оригинал Defining Metrics for Incident Management By Stuart Rance Опублико...
Привет, Хабр! У меня, как и, вероятно, многих других, часто возникает желание внести какие-то изменения в свое рабочее окружение. В этой статье вы найдете мысли насчет одного такого изменения —...
Привет, Хабр! Я экспериментирую с форматом, поэтому решил написать этот дайджест. Не так важно кто ты, самое важное — твой интерес к digital и желание узнать чуть больше про управление продук...
Некоторое время назад передо мной встал выбор инструмента для управления небольшими проектами по SCRUM-методологии. У меня был довольно большой опыт использования различных инструментов включая J...
Как обновить ядро 1С-Битрикс без единой секунды простоя и с гарантией работоспособности платформы? Если вы не можете закрыть сайт на техобслуживание, и не хотите экстренно разворачивать сайт из бэкапа...