Предложена простая схема, которая позволяет подключать любые ЖК-индикаторы на базе контроллера HD44780 с параллельной шиной управления в 4- и 8-битовых режимах. Семисегментные и знакосинтезирующие производства ООО «МЭЛТ» и любые зарубежные LCD160x подключаются одинаково. Вместо чтения сигнала готовности используется временная задержка для выполнения индикатором операции записи во внутренние регистры.

Знакосинтезирующий ЖК-дисплей на контроллере HD44780

Технические решения, положенные в основу разработки, защищены патентами РФ №2390048, №2547217 на изобретение, они будут рассмотрены подробно. Подразумевается, что читатель представляет себе принципы управления ЖКИ и последовательной передачи данных.

Схема подключения ЖК-дисплея

Выбор команды или данных при записи в регистр индикатора осуществляется логическим уровнем, подаваемым на сигнальный вход A0. При «0» информационное слово на шине данных интерпретируется контроллером как команда, при «1» — как данные. В предлагаемой схеме этот выбор производится установкой/сбросом линии последовательных данных SD интерфейса сразу после окончания записи в сдвиговый регистр. Этим завершается подготовка на шине индикатора управляющего слова.

Остается, согласно техдокументации на прибор, подать импульс на вход разрешения записи (E), который формирует цепь VD1, R2, C2. Любой импульс на линии CLK заряжает конденсатор C2. Таким образом, с началом записи в сдвиговый регистр, устанавливается высокий уровень на входе разрешения индикатора (в согласии с документацией) и поддерживается в течение всего цикла. По завершению последнего тактового импульса, в текущем обращении, конденсатор начинает разряжаться через R2. При достижении напряжением половины напряжения питания, информация защелкивается в регистре драйвера индикатора (не соответствует документации на индикатор, но в согласии с физикой работы полупроводниковых приборов). Маленький нюанс…

Протокол управления ЖК-дисплея

Этот алгоритм надежно работает, когда высокий уровень на входе разрешения установлен до начала изменения данных на шине индикатора. Поэтому логика программы формирует тактовых импульсов на один больше, чем требуется (только для знакосинтезирующих дисплеев). Самый первый из них информационно пуст, но именно он «взводит» разрешение. Учитывая минимальное время выполнения операции логикой индикатора с контроллером HD44780 (40мкС), время разряда конденсатора до порогового уровня (~14-20мкС) не сильно уменьшает общее быстродействие.

Для примера, время опроса 4-х кнопок и записи байта в 8-и битовом режиме, при тактовой частоте МК 8МГц, составляет всего 34мкС. Байт, в 4-битовом режиме, пишется за 88мкС. Это время включает и сканирование. Для семисегментных MT-10T7/8/9 программная часть чуть проще, сканирование кнопок и вывод 10-и знаков на индикатор занимает около 600uS (тактовая частота МК 8МГц).

Предлагаемое решение имеет существенный недостаток. Поскольку временной интервал записи в регистры ЖКИ формируется с помощью (аналоговой) цепи (R2, C2), схема становится критичной к частоте тактирования управляющего контроллера. Компенсация этой зависимости предусмотрена для индикаторов типа MT-10. В программе необходимо выбрать константу Dly_wr, соответствующую диапазону частоты.

Работоспособность схемы не проверялась на частотах ниже 4-х и выше 20MHz, однако на низких частотах, теоретически, не существует ограничений. Знакосинтезирующие индикаторы MT проверялись на частоте микроконтроллера 8МГц. Другие частоты потребуют коррекции программных задержек. Все испытания проводились с микроконтроллерами ATTINY (13, 24, 25, 261).

Кроме управления индикаторным модулем, описываемое схемное решение позволяет генерировать звуковые сигналы, правда с некоторыми ограничениями. Канал звука содержит n-канальный MOSFET транзистор и пьезоизлучатель. Обновление данных в индикаторе и звуковые сигналы близки по спектру, поэтому для каждого конкретного устройства, где планируется применить это решение, требуется выбрать номинал конденсатора C4 для максимального подавления сигнала с частотой передачи данных по шине, но слабые щелчки в моменты обращения к индикатору все же слышны. Учитывая небольшие затраты на канал звука и преимущества, которые он предоставляет в информационном плане, с этими недостатками можно мириться.

В состав модуля дополнительно включена схема сканирования матрицы кнопок. Подпрограмма опроса организует «бегущую единицу» на выходах регистра сдвига, которая поочередно открывает ключи аналогового коммутатора, к которым, в свою очередь, подключены кнопки. Состояние шины SD интерфейса, во время логической «1» на шине CLK, считывается микроконтроллером. Емкость шины SD, заряженная до 5В при подготовке опроса, разряжается, если кнопка нажата. Нажимать можно по одной и группами, логика программы формирует позиционный код независимо для каждой кнопки. Демонстрационная программа для индикаторов МТ-10 выводит скан-код в первую позицию, сопровождая любое нажатие коротким звуковым сигналом. При необходимости, количество кнопок можно удвоить, если добавить второй коммутатор.

Еще одним недостатком является необходимость обновления индикатора при сканировании кнопок. Завершение опроса формирует импульс записи в индикатор и может испортить записанные ранее данные. Хотя этот вопрос до конца пока не исследован (неизвестно, как ведет себя адресный счетчик МТ-10 при переполнении), все же рекомендуется так строить программу, чтобы обойти этот момент. В демонстрационной программе период опроса и обновления содержимого памяти индикатора выбран порядка 300 мС и неудобств в пользовании кнопками нет.

Демонстрационные программы для семисегментных индикаторов MT-10T7/8/9 и знакосинтезирующих MT-XX при работе в 4-х и 8-и битовых режимах написаны на языке ассемблера для микроконтроллеров фирмы ATMEL серии TINY и компилировались конкретно для tiny2313. Демки демонстрируют только возможности управления индикаторами, сервис кнопок и звукового канала по последовательному двухпроводному интерфейсу. Автор предпочитает называть его DDI — The interface of distant devices (интерфейс удаленных устройств).

Исходный текст легко перекомпилировать на любой микроконтроллер ATMEL, т.к. таймеры, прерывания и специальные возможности не используются. Достаточно «голого» микроконтроллера, к двум портам которого подключена схема сопряжения. Объем кода, отвечающий непосредственно за обслуживание индикатора получился чрезвычайно компактным и не будет помехой даже при реализации на МК с малой памятью. Вот, что записано в комментариях к самой первой рабочей программе для знакосинтезирующих (она была, сами понимаете, без излишеств): init+service+dly  (24+38+14)=76byte. С тех пор код маленько вырос, но в две сотни байт, даже со звуком, уложится. Прошивка демы «тянет» 250 байт для MT-10Tx, а там перекодировка, в отличие от MT-16. Правда, у последних свои особенности.

Осциллограмма работы с ЖК-дисплеем ЖКИ МТ-10Т

Несколько комментарий к осцилограммам. Первая осциллограмма иллюстрирует процесс с ЖКИ MT-10T. Первые четыре фронта CLK это запись 1 в младший разряд сдвигового регистра («бегущая 1»). Следующие четыре импульса CLK это сдвиг единицы и чтение состояния кнопок. Обратите внимание на спад вершин импульсов шины SD, они скошены. Это порт микроконтроллера переключен на вход. Кнопки отпущены, читается их инверсное значение. Код нажатия 0000. Потом переход к программе записи информации и занесение нулевого адреса в адресный регистр (SD=A0). Далее (CLK=0) формируется спадающий фронт разрешения записи. Центральная вертикальная линия на половине напряжения питания. Момент фиксации. Следом идет запись первого полубайта в регистр данных индикатора.

Осциллограмма обновления данных в дисплее

На второй картинке полный цикл обновления данных. 20 полубайт с SD=1 (A0). Состояние кнопок в регистре (sc_key), индикатор обновлен.

Осциллограмма передачи данных на ЖК-дисплей в байтовом режиме

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

Интересное наблюдение (см. последняя осциллограмма)… Разрешение записи на индикатор подано, на A0 (SD) и шине данных изменяется информация, т.к. идет непрерывная запись в сдвиговый регистр, а на экран будет выведен нужный символ, код которого содержится в последних 8 битах, записанных в регистр. Это указывает, что драйвер индикатора не имеет в составе счетчика бит. Информация в индикаторе сохранится только та, которая находится на шине индикатора в момент спада импульса разрешения. Такая организация контроллера ЖКИ позволяет делать то, что описано в данной статье, напоминая нам известную притчу про гланды. Кстати, это было рабочее название статьи, а пациент жив и доволен.

Скачать исходник и прошивку

Литература:

  1. Радиолоцман №12, 2016
  2. http://vbb.su/?p=66

Автор: Бабанин Валерий Борисович, Красноярский край, mcru@mail.ru

Просмотров всего: 10 100, сегодня: 2

Напишите комментарий