Что если бы 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
Комментарии (22)
linux_id
22.03.2019 13:40+2Эта «тормознутость», как выразились выше, самой технологии и матрицы или электронной обвязки?
ns3230
22.03.2019 14:11+1Сама технология. CSTN — это же пассивная матрица, в которой картинка обновляется попиксельно, с последовательной передачей сигнала на каждый из (суб)пикселей по координатам X/Y. Из-за этого времени на обновление картинки надо дичайше много, в сравнение с активными матрицами на транзисторах.
pashka000
22.03.2019 18:49+3Не совсем так. И STN, и TFT матрица обновляется построчно. Столбцовые драйверы имеют сдвиговые регистры, по которым по цепочке загружается информация о всей строке, а затем по строчному такту (CL1 в статье) отображается на выходах. Отличие активной матрицы в том, что активный элемент (емкость + транзистор) запоминает уровень напряжения и помнит его в течение скана кадра. В случае же пассивного пикселя после того как строка просканирована, его состояние больше ничем не поддерживается. Если бы он гас сразу, контрастность изображения при скважности в несколько сотен была бы околонулевой, так как пиксель не светится сам по себе. Поэтому при подборе свойств жидкого кристалла приходится искать баланс между временем отклика, мерцанием панели и контрастом картинки. И «тормознутость» панели — это следствие «тормознутости» жидкого кристалла.
ns3230
22.03.2019 19:08+1Столбцовые драйверы имеют сдвиговые регистры, по которым по цепочке загружается информация о всей строке, а затем по строчному такту (CL1 в статье) отображается на выходах. Отличие активной матрицы в том, что активный элемент (емкость + транзистор) запоминает уровень напряжения и помнит его в течение скана кадра.
То есть, и для активной, и пассивной матрицы, «объем работы» и алгоритм у контроллера примерно одинаковый? Он подает на один ряд субпикселей сигнал со значениями субпикселей в этом ряду, который затем подает свое значение каждому субпикселю в виде наподобие «1=х, 2=у, 3=..., N=m»?
Просто я не спец в области экранов, и был уверен, что пассивные матрицы «обзванивают» массив субпикселей построчно, по алгоритму наподобие «подаем сигнал на 1-ю строку (ость X), задаем 1-й элемент, задействуя 1-й пиксель столбца (ось Y), затем 2-й, затем 3-й, 4… 100500-й, потом сигнал на 2-ю строку по X, „обзваниваем“ каждый ее элемент по Y», и так пока все строки не будут заданы, и соответственно, при величинах в миллион субпикселей требуется много времени на обработку каждого кадра, поэтому нужны слоупочные кристаллы матрицы, которые не «закроются» сразу.tormozedison Автор
22.03.2019 19:34То есть, и для активной, и пассивной матрицы, «объем работы» и алгоритм у контроллера примерно одинаковый?
Получается, так и есть.
pashka000
22.03.2019 23:54+1Да, принцип организации сканирования вообще у всех матричных дисплеев похож. Есть частности, вроде принципов формирования полутонового изображения. Например, в плазменном дисплее информация о субполе «записывается» в саму матрицу точно таким же построчным сканированием, а затем отображается в течение строго заданного времени.
По пассивным ЖК, если интересно, можете глянуть доки например на микросхемы драйверов: SED1600 (столбцовый или сегментный) и SED1630 (строковый или драйвер общих линий)
Focushift
22.03.2019 14:56+1Мне нравится, напоминает о временах, когда я играл на 486м ноутбуке с таким экраном.
juray
22.03.2019 16:22да ладно, он и MPEG2 потянет в программе QV
смотря с каким битрейтомtormozedison Автор
22.03.2019 22:37Только что вспомнил, что на Video CD был не MPEG2, а MPEG1. И именно его я смотрел в DOS программой QV. Спасибо, сейчас поправлю.
mistergrim
23.03.2019 00:35+1P-100 тянул VideoCD с минимальным пропуском кадров даже под Windows (с кодеком Xing или вроде того).
MPEG2 — это, конечно, интересный промежуточный вариант, с учётом того, что MMX166 уже тянул MPEG4 512?384 с периодическими паузами.
FiLunder7
22.03.2019 17:44+2Пользуясь случаем хочу спросить: а почему подложка у монохромных ЖКИ, именно такого «зеленовато-серебристого» цвета? Почему бы не делать её белой? Было бы контрастнее. Или какие-то физические ограничения из-за которых был выбран именно такой вариант подложки?
tormozedison Автор
22.03.2019 19:33Думаю, подложка серебристая, а зелёный цвет придаёт сам индикатор.
juray
22.03.2019 19:35Сама подложка там чисто серебристая, зеленоватый цвет ей придают поляризационные плёнки. Ну, по крайней мере, в тех, что мне доводилось разбирать.
Кстати, вот:
FiLunder7
22.03.2019 19:36Ну а почему просто белым не сделать эту пленку?
tormozedison Автор
22.03.2019 19:46Она не сможет быть поляризационной.
FiLunder7
22.03.2019 19:47Понятно. А как быть с прозрачными индикаторами? Одно время были такие модные домашние часы.
tormozedison Автор
22.03.2019 19:54Там это не так заметно. Свет проходит через каждый из поляризаторов не два раза, как при отражении, а один.
juray
22.03.2019 19:47Какую пленку? Поляризационную?
Поляризаторы вообще должны быть прозрачны для одного из направлений поляризации, независимо от длины волны — но реально из-за несовершенства технологии у дешевых поляризаторов коэффициент пропускания для разных длин волн различен — вот и появляется цветной оттенок.
А серой она будет выглядеть в неполяризованном свете в любом случае, поскольку пропускает не весь свет (отсекает ту часть, которая не совпадает по направлению поляризации).
mistergrim
По видео видно, что основной недостаток STN-экранов даже не цветопередача и контраст, а ужасная тормознутость.
Впрочем, был у меня Dell на VA-матрице, не сильно быстрее работал.
tormozedison Автор
Это точно, в 1999 году в одном интернет-кафе появились супермодные на тот момент TFT-мониторы, показывали они очень даже ничего, но при прокрутке начиналось…