Декодирование сигналов мультиплексированного ЖКИ



    В этой статье я расскажу о том, как работает жидкокристаллический индикатор (ЖКИ) с точки зрения сигналов, как эти сигналы декодировать и использовать для своих целей.

    Иногда возникают вопросы, связанные с эксплуатацией ЖКИ. Например, потек экран устройства, а заменить не на что:



    Или экран ЖКИ очень маленький, в темноте его не видно, и стоит задача преобразовать вывод вместо ЖКИ на светодиодный или другой дисплей.

    Встречал еще такую проблему: имеется кондиционер, и для улучшения его эксплуатационных характеристик необходимо включать дополнительный вентилятор при появлении на экране символа «снежинка».



    Таких вопросов, думаю, придумать можно много, и стоит общая задача — научиться декодировать информацию, выводящуюся на ЖКИ, и использовать по своему назначению.

    Жидкокристаллические индикаторы ввиду своих физических особенностей требуют выполнения двух главных требований:

    1. Напряжение между электродами должно быть не менее трех вольт.
    2. На электроды необходимо подавать переменное напряжение без какой-либо постоянной составляющей.

    Если не выполнить первое требование и подать между общим и сегментным электродами напряжение меньше, чем 3 вольта, то сегмент просто не будет виден.

    Если же не выполнить второе требование, то индикатор может довольно быстро деградировать (испортятся жидкие кристаллы). Индикаторы первых выпусков особенно сильно страдали от невыполнения второго требования, и вполне могла возникнуть ситуация, когда у пользователя на индикаторе навсегда оставалось время, когда в часах села батарейка.



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



    Вот фотография индикатора калькулятора, где видны электроды.



    Как я говорил, между сегментным и общими электродами необходимо подавать переменное напряжение. Его частота должна быть более 30 герц. Вместо синусоиды подают либо сигналы специальной формы, либо меандр (меандр — это периодический сигнал прямоугольной формы, в котором длительности импульса и паузы равны), который тоже можно с некоторым допущением считать упрощенной синусоидой.

    Самые простые ЖКИ имеют один общий электрод. Количество выводов в индикаторе равно количеству сегментов плюс общий вывод.

    На общий вывод подается меандр. А на сегментные — тоже меандр. Отличие состоит в том, что если сегмент должен отображаться, то меняются местами импульс и интервал (фаза, относительно сигнала общего электрода). Если сегмент не должен отображаться, то фазы совпадают.



    С точки зрения индикатора, когда совпадают фазы, то между электродами напряжение всегда 0 вольт. А если фазы не совпадают, то между электродами напряжение всегда переменное и равно 3 вольтам.

    Вывод на индикатор с одним общим электродом довольно прост, но если количество сегментов велико, то соответственно увеличиваются затраты как на разводку индикатора, так и на резервирование соответствующего количества выводных портов на контроллере.

    Чтобы уменьшить количество сегментов используют два или более общих электродов. С одной стороны это в разы уменьшает количество сегментных выводов, но с другой стороны усложняет вывод с точки зрения генерации сигналов. Идея в мультиплексировании сигналов заключается в том, что один сегментный вывод отвечает за отображение двух и более сегментов.

    Если в индикаторе с одним общим сигналом один сегмент управляется постоянно, то при мультиплексировании количество интервалов времени, когда управляется один сегмент, делится на количество общих сигналов. То есть сначала управляются (отображаются или гасятся) сегменты с общим сигналом COM1, в следующий интервал времени управляются сегменты, связанные с общим сигналом COM2 и т. д. по количеству общих сигналов.

    Поскольку интервалы времени, когда управляется один сегмент, сокращается, то соответственно сокращается время его отображения, и чем больше общих сигналов, тем меньше контрастность изображения в целом.

    Вместо простого меандра при нескольких общих сигналов необходимо подавать сигналы специальной формы с промежуточными напряжениями. Промежуточные напряжения нужны для того, чтобы выполнялись те два требования, которые я описал выше.

    Я снял небольшое видео, где можно на осциллографе посмотреть осциллограммы с реальных часов с одним общим электродом и калькулятора с тремя общими.




    Это часть схемы микрокалькулятора «Электроника МК-62». В индикаторе используются три общих электрода. На схеме видна разводка общих и сегментных электродов.

    Полная схема доступна по ссылке.



    Для удобства я расцветил область ответственности общих электродов. На схеме общие электроды обозначены как О1, О2 и О3.

    Сегментные я тоже раскрасил, чтобы было удобно видеть, за какие сегменты отвечают сегментные выводы.



    Эпюры формы импульсов сигналов, подаваемые на сегментные и общие выводы, на первый взгляд кажутся жуткими. Но если разобраться, то можно понять, как это работает:



    Первые три эпюры соответствуют общим электродам. Я их расцветил соответственно рисунку индикатора на схеме.



    Нас будут интересовать только раскрашенные «полочки» сигналов, уровни которых находятся на вершинах осциллограмм. Это те моменты, когда управляются (отображаются или гаснут) сегментные выводы.

    В этих эпюрах видно, что сначала внизу «работает» общий О2, затем полочка у О1, потом у О3. После этого полочки так же (только наверху) сначала у О2, затем у О1 и дальше — О3. Так они и чередуются, соблюдая условие переменного напряжения.



    Теперь, когда «расшифрованы» эпюры общих сигналов, можно посмотреть на эпюры сегментных сигналов, которые я тоже раскрасил. Эти эпюры от реального отображения на индикаторе цифры 0. (с точкой) в первом знакоместе.

    Форма импульсов сегментных и общих сигналов выбрана с расчетом выполнения первого требования — напряжение между электродами должно быть равно трем вольтам. Жидкие кристаллы и поляризационные фильтры проектируются с таким расчетом, чтобы отображаться только при трех вольтах, а если напряжение ниже, то сегменты не будут видны.

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

    Теперь — после того, как мы разобрались с принципом отображения сегментов, можно сделать довольно простой декодер.

    Когда я писал, что между электродами необходимо подавать переменное напряжение, это верно и правильно, но только с точки зрения электродов. Воспользуемся открытием великого Эйнштейна, которое гласит: «все относительно», и привяжемся к одному из полюсу сигналов (отрицательному). Все остальные уровни автоматически станут положительными.

    На показанной выше схеме разработчики уже ушли от разнополярного напряжения и сделали сигналы с уровнями 0 и -3 вольта.

    Поскольку логика нашего устройства — положительная, то будем считать, что напряжение, показанное в схеме как -3 вольта, в нашей схеме будет равно нулю, а напряжение 0 вольт — плюс три вольта.

    В нашей схеме, когда приходит нижняя полочка, то это будет 0 вольт (сигнал GND — земля). Когда приходит верхняя полочка — это +3 вольта. А остальные напряжения сделаны для формирования синусоиды, и мы будем их игнорировать.



    Нам необходимо применить два компаратора. Компаратор работает просто: у него есть два входа (положительный и отрицательный) и один выход. Когда напряжение на положительном входе больше, чем на отрицательном, на выходе появляется единица, и наоборот — когда на положительном выходе напряжение меньше, чем на отрицательном, то на выходе — ноль.

    Первый компаратор (зеленая линия) будет отслеживать приход верхней полочки общего сигнала. Второй компаратор (красная линия) будет отслеживать приход сегментного сигнала. Уровень зеленой линии подается на отрицательный вход первого компаратора, а уровень красной линии — на отрицательный вход второго компаратора. На положительные же входы компараторов подаются соответственно общий сигнал и сегментный сигнал. Уровень общего сигнала выбран наверху, а сегментного — в нижней части — для того, чтобы «поймать» момент, когда сегмент отображается (те самые 3 вольта). В других случаях он не отображается. Обратите внимание на самую нижнюю эпюру в схеме калькулятора — те моменты, когда остальные сегменты не горят — там сигналы не доходят ни до верхнего, ни до нижнего уровня.

    В результате в момент желтой вертикальной линии на выходах компараторов мы поймаем три вольта разницы между сигналами, когда сегмент горит, и 0 вольт, когда не горит.

    Итак, мы поймали момент, когда нужный сегмент отображается (или гасится). Теперь этот момент надо зафиксировать. Для фиксирования этого момента будем использовать регистр с защелкой типа 74HC374. На вход регистра подадим сигнал от компаратора № 2, где отследили сегментный сигнал, а на тактовый вход защелки — выход с компаратора № 1, где начнется логическая единица в момент прихода нужного нам общего сигнала.

    После того, как регистр защелкнется по положительному скачку входа CLK, на его выходе сигнал не будет изменяться до нового прихода положительной полочки нужного нам общего сигнала.

    Для отслеживания одного сегмента (пусть это символ снежинки) схема будет выглядеть так:



    Здесь на схеме компаратор U1 отслеживает нижнюю полочку сегментного сигнала, у которого уровень будет ниже, чем установлено на переменном резисторе RP1, и ставит ноль на его выходе. Второй компаратор отслеживает приход верхней полочки общего сигнала и положительным фронтом защелкивает регистр.

    Конденсатор C1 необходим, чтобы немного задержать детектирование общего уровня и сместить момент фиксации не в самом начале общего уровня (в это время сегментный может запоздать или будут какие-то переходные процессы), а немного спустя (на рисунке — желтая линия в середине полочки). На выходе регистра будет логический ноль, когда сегмент отображается, и логическая единица, когда сегмент не отображается.

    Такая схема нужна для детектирования каждого сегмента. Основная сложность такой схемы — для каждого сегментного и общего сигнала необходим отдельный компаратор, и количество выходов регистров равно количеству сегментов. Но с другой стороны все эти компараторы и регистры сейчас стоят копейки.

    Чтобы упростить работу и проверить работоспособность всего, что я написал, я смастерил небольшую платку, на которой развел несколько компараторов и регистров.





    Схема: habrastorage.org/webt/wk/1i/kg/wk1ikgqdavyjnxcqsqlr2174jke.jpeg

    Описание схемы такое же, как и для одного сегмента, только умноженное на 16 сегментных и один-два общих сигнала (количество выбирается перемычкой).

    В плате предусмотрены транзитные входы-выходы питания и уровней компараторов, чтобы сэкономить на деталях и настройке.

    Вот еще одно видео, где описывается работа этой платы и показывается, как работает детектирование:


    Детектирование калькулятора интересно только в академических целях, а для себя на базе этих плат сделал реальное устройство — светодиодные часы на базе советских часов «Электроника 55».








    В часах довольно много сегментов, и пришлось использовать четыре платы.

    Эти платы также позволяют мультиплексировать выходы регистров. То есть выходы каждого регистра можно объединить в одну 8-битовую шину. В платах предусмотрено отключение выходов (нога 1 у каждого регистра). Для отключения на каждый регистр подается логическая единица (например, с микросхемы-мультиплексора типа 74HC137), а на тот регистр, с которого надо снимать данные — логический ноль. Тогда, поочередно выбирая нужный регистр, можно считывать данные с шины ЖКИ, например, другим микроконтроллером, и дальше обрабатывать по своему усмотрению. Причем выборку можно производить асинхронно от схемы декодирования с любой скоростью.

    Вот таким образом можно считывать информацию с LCD и использовать в своих целях. Спасибо за внимание.
    Share post

    Comments 28

      +1
      Отличная статья, пробовал подключать выводы индикатора напрямую к ардуино, но из за небольших сдвигов в одновременности сигналов, было много шума и ложных срабатываний. С компараторами и регистрами должно быть стабильнее. Надо бы еще повозиться.
      З.Ы. Плат лишних не осталось?
        +1
        Надо покопаться :)
          0
          Есть еще платки
          +2
          Программировал недавно железяку из 70х, там очень простой контроллер дисплея в виде микросхемы мультиплексора, поэтому переключать полярность необходимо программно, по даташиту рекомендуется 1 раз на кадр при 30 к/с. Очень страшно было загубить древний ЖК ибо нигде не нашел информации о том, насколько быстро идет деградация, но, вроде бы, кратковременные зависания остаются без последствий. Собственно вопрос, насколько быстро деградируют жк под постоянным напряжением? Хотя бы порядок — это секунды, минуты или часы до появления видимых артефактов?
          Спасибо за статью!
            +2
            Деградирует обычно за много дней. В тех часах батарейка села, резонатор остановился и осталась постоянная составляющая.
              +1
              Спасибо за информацию, значит можно было сильно не переживать.
            +7
            Если же не выполнить второе требование, то индикатор может довольно быстро деградировать (испортятся жидкие кристаллы).

            Если точнее — электроды начнут растворятся за счет электрохимической коррозии. С загрязнением жидких кристаллов продуктами коррозии.
              +2
              чем больше общих сигналов, тем меньше контрастность изображения в целом.

              Теперь понятно почему матричные индикаторы менее контрастны.
                +1
                Сыну купили читалку. Пока объяснял ему принцип работы электронных чернил, у самого возник вопрос — а зачем так заморачиваться? Разве нельзя было использовать жк дисплей с очень редким переключением состояния кристаллов? И тут, как раз, ответ.
                Интересно, нет возможности поддерживать ориентацию кристаллов, например, электретными материалами? Без непосредственного контакта с электродами.
                  0
                  Взять очень легкоплавкий электрет. При необходимости сменить картинку слегка разогреть его до температуры плавления. Переполяризовать в соответствии с картинкой, охладить до возврата в твёрдую фазу.
                  Но сейчас можно обойтись без этого, есть Memory LCD.
                  +1
                  с просторов интернета, попробуйте проверить:
                  «В Электронике 55 есть ещё коррекция! Включается оригинальным способом — из режима секундомера нажать правую верхнюю кнопку (при этом часы переключатся на таймер) и не отпускать её примерно 2 секунды, пока часы не перейдут в режим коррекции. Там можно выставить минуты и секунды, которые будут прибавлены (или отняты) в ноль часов ноль минут. В принципе, зная погрешность кварцевого резонатора, можно вычислить время, на которое часы опаздывают или спешат в расчёте на сутки, ввести это время в коррекцию — и они станут идти максимально точно.»
                  «У 52 ой тоже есть. Включается удержанием правой нижней кнопки. У меня были обе эти модели. Спасибо за обзор. Кстати при закрывании крышки на часах старайтесь не давить нс середину крышки. На ней с обратной стороны нанесено покрытие оно при этом трескается и сигнал у часов становится тише.»
                  — по части тестовой информации при включении, возможно до общего сброса генератор переключает счётчик, если информация всегда постоянная, может быть результаты тестов, те же счётчики, если что-то не пройдёт — то зависнет в определенном коде, но это предположение.
                    +5
                    Об этой коррекции практически все владельцы таких часов знают, о ней в инструкции сказано.
                    На задней крышке не «покрытие», а пьезоэлемент. Он и трескается.
                      0
                      Да, все так, только ход корректируется на в 0 часов, а сразу равномерно. На видео все показано.
                      +1

                      Отличная статья! Я в детстве делал цифровой термостат на основе 572пв5 (которая с выходом на ЖКИ), там было гораздо проще — обошлось логическими элементами XOR.


                      А вы не думали сделать декодер на ПЛИС например. В качестве компараторов можно попробовать использовать LVDS ресиверы, у них дифференциальный порог срабатывания примерно 100mV при допустимом синфазном напряжении до 1.8V. Должно хватить для различения четырех уровней аналогового сигнала.

                        0
                        Я хотел сделать максимально дешево и просто.
                        0
                        Спасибо. У меня два вопроса:
                        1) Насколько строго должны соблюдаться 3В? Например, термометр, который питается от двух ААА, перестает работать только когда батарейки садятся до примерно 1В. Значит, там повышающий DC/DC преобразователь? Есть ли верхний предел? Можно ли питать от Li-ion аккумуляторов?
                        2) В случае с двумя общими выводами результирующий сигнал несимметричен относительно оси Х. Не является ли это наличием постоянной составляющей?
                          0
                          Если стоит один полуторавольтовый элемент, то в схеме применяется удвоитель. Конкретные характеристики — нижняя и верхняя граница зависят от типа ЖКИ.
                          По опыту — в схемах дозиметров ЖКИ вполне себе питаются от 9 вольт.
                          Второй вопрос не понял. Обычно в промышленных схемах сигнал ЖКИ формируется аппаратно, и там нет проблемы с постоянной составляющей.
                          +1
                          Отличная статья! Как раз интересовался подключение ЖК индикаторов к Ардуинкам. Автору большое уважение!!!
                            0
                            А нельзя ли вместо кучи компараторов взять просто один мультиплексор и им подключать единственный компаратор (или аналоговый вход адруины) к выводам ЖКИ?
                              0
                              Конечно можно. Но тогда придется управлять декодированием средствами ардуины, которая будет с нужной скоростью перебирать и анализировать ноги своими силами.
                              В моем варианте это происходит само собой автоматически, и ардуина пользователя может заниматься чем угодно, иногда опрашивая выходы регистров.
                              0
                              По элементной базе не подскажете замену ЖК экрану в «Электронике-85»?
                                0
                                Только от донора, либо остатки складов, но там все повыбирали.
                                0
                                просветите незнающего, — есть ли какой-нибудь недорогой измерительный прибор(вольтметр), чтобы можно было получать численное напряжение в программе (с++ или java)?
                                  0
                                  На каком железе, какое напряжение, как часто?
                                    0
                                    На самом деле буду измерять сопротивление в соляном растворе, которое будет меняться от помешивания. Задержку можно большую, от 0.1 секунды вполне пойдет.
                                      0
                                      железо — ПК
                                        0
                                        Мультиметр типа UNI-T UT61 + вывод в uart это слишком дорого? Хотя оно наверное медленнее работает…
                                        Или совсем просто, диапазона напряжений АЦП ардуинки вам не хватит?
                                          0
                                          3500 р вроде не дорого

                                Only users with full accounts can post comments. Log in, please.