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

tsvwuobygirooozzafy1gnmiiua.jpeg

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


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

fmyvrfvnpiqfyih0abovza8tn-m.jpeg

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


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

genbzaejmhqeermw61pdxau4nli.jpeg

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

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

eeu8xrwciq0nl2cl6z8cha0zu5u.jpeg

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-мониторы работают до сих пор.

kkchbdoyuc75xvwabt_3zwmrcp0.jpeg

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


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

Или?

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

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

tsvwuobygirooozzafy1gnmiiua.jpeg

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


Начнём с азов. Подобно любым матричным дисплеям, 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:

gaaufudmnscsyjt2mj89ir2hj-g.png

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

pocu_2wfevtfpev7hbuapasb2va.png

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

urdr6uzrqstflu-gy2r5q-opazy.jpeg

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

2sfvuishe3qnnb9fytk4mmbthju.jpeg

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


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

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

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

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

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

filx4-nrwyepv-5jjdvjd5jvgh0.png

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

_mux-qskx5al8bielsybiavnvba.jpeg

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

f2vln9pc18h0txrwkm632snrlns.jpeg

Итак, показывать изображение мы уже плату «научили», следующее, что потребуется — фреймбуфер. При 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

© Habrahabr.ru