Объяснение в любви. Подключаем LCD к микроконтроллеру по 4-х


AT90S2313 - не лучший мк, к которому нужно подключать такие дисплеи т.к. он имеет мало EEPROM и RAM, но для небольших проектов вполне сойдет. Например, прибор для измерения количества оборотов модельного воздушного винта. Да и портов ввода/вывода явно маловато, поэтому подключать его будем к порту D по параллельному 4-х битному интерфейсу. Зато у мк ATMEL сохраняется совместимость с более старшими моделями, поэтому код для подключения к старшим моделям мк практически не изменится, а при подключении по 8-ми битной шине даже упростится.
Для удобства подключения рекомендую впаять панельку со штырьками. Боясь перегреть дорожки я решил использовать флюс. Припаялось идеально. Но не перестарайтесь. Флюс очищает площадки, растворяя медь и если его вовремя не убрать, то может растворить до конца.

Принципиальная схема
(щелкните по ней для увеличения). Железная часть
Схема собрана на микроконтроллере AT90S2313.
Напряжение питания - 5 вольт от стабилизированного источника. Питание подсветки расчитано на 4 вольта, но при подключении по основной, так сказать, шине на пути своём имеет токоограничивающий резистор. При превышении напряжения сгорит резистор, а не подсветка. Своеобразная защита... Контроллер, установленный в индикаторе аналогичен HD44780 фирмы Hitachi, что позволяет заменять импортные индикаторы на отечественный аналог. Правда, по этой причине есть одно ограничение, связанное с набором русских символов. Поэтому, если удобное использование русских символов жизненно необходимо, то изучайте дисплеи с контроллерами Epson. В остальном, кодовая таблица контроллера Hitachi соответствует ASCII (Латиница и специальные символы). Есть возможность запрограммировать свои собственные 8 символов, что продемонтрированно в коде прошивки. При отладке очень пригодились светодиоды на порту B, оставшиеся от светодиодной мигалки.




Мягкая часть
Исходные коды.
Приблизительный список команд инициализации дисплея:
включить питание (ждать 30 мкс) установить разрядность интерфейса (восьмибитный режим)(0b00000011)(ждать 40 мкс) установить разрядность интерфейса (восьмибитный режим)(0b00000011)(ждать 40 мкс) установить разрядность интерфейса (восьмибитный режим)(0b00000011)(ждать 40 мкс) установить разрядность интерфейса* (восьмибитный режим, здесь происходит переход в четырехбитный режим)(0b00000010)(ждать 40 мкс) установить разрядность интерфейса (четырехбитный режим)(0b00000010,0b00001000)(ждать 40 мкс) выключить дисплей (0b00000000,0b00001000)(ждать 40 мкс) установить направление сдвига курсора и разрешить сдвиг дисплея (0b00000000,0b00000110)(ждать 40 мкс) включить индикатор и разрешить курсор, установить его тип* (0b00000000,0b00001111)(ждать 40 мкс) очистить индикатор, курсор домой (0b00000000,0b00000001)(ждать 1500 мкс) После команд установки разрядности в 4-х битном режиме флаг занятости дисплея проверять нельзя, после всех остальных можно :)
Небольшое пояснение: Первые три команды установки типа интерфейса нужны для ГАРАНТИРОВАННОГО перевода ЖК индикатора в 8-ми битный режим, независимо от его состояния (при включении питания индикатор может оказаться как в 8-ми, так и в 4-х битном режиме). Четвёртой командой индикатор или переводится в 4-х битный режим, или устанавливаются правильные параметры в 8-ми битном режиме. В 4-х битном режиме индикатор начинает правильно работать с 5-й команды, которой и устанавливаются параметры.
Формат посылки: 0b00000000=0bx,A0,R/W,E,DB7,DB6,DB5,DB4.
Передача байта начинается установкой битов db7-db4,A0,R/W. Минимальное время предустановки 40 нс. При тактовой частоте 10МГц это занимает один такт. Далее появляется сигнал E. Минимальное время выдержки 230нс. Примерно 4 такта. Длительность цикла м/у фронтами E - 500нс. Итого, ещё 270нс выдерживается до следующего импульса E. Время удержания данных состовляет 10нс. Время выполнения команды смотрите в документации. В среднем выполнение команды занимает 40мкс, кроме команды "очистка, курсор домой" (1500мкс). А вот так это выглядит на картинке:

Описание команд модуля можно найти в датащите на странице 7, но для ленивых:

Биты C и B в команде "Display ON/OFF control"*:
C=0,B=0 - курсора нет, ничего не мигает; C=0,B=1 - курсора нет, мигает весь символ в позиции курсора; C=1,B=0 - курсор есть (подчёркивание), ничего не мигает; C=1,B=1 - курсор есть (подчёркивание) и только он и мигает.
Рекомендации, если ничего не работает В текстовых ЖКИ "МЭЛТ" есть фича: при любом изменении состояния сигналов A0 или R/W внутренний счётчик полубайтов сбрасывается в состояние приёма старшего полубайта. Поэтому можно дёрнуть любым из этих сигналов (на >100нс), подать команду 28h (если индикатор был в 8-ми разрядном режиме, то пройдут команды 2Fh и 8Fh, что тоже устраивает), (в этот момент индикатор гарантированно будет находиться в 4-х разрядном режиме), потом снова дёрнуть сигналом A0 или R/W (для гарантированного переключения внутреннего счётчика на приём старшего полубайта), после этого подать команду включения индикатора (0Ch) - на экране должно появиться хоть что-нибудь (мусор после включения питания). По крайней мере, должна пойти развёртка - это заметно по изменению контрастности видимого поля по отношению к остальному полю ЖК индикатора.
Если развертка не появилась то, возможно, Вам придется 3 ногу завести на землю. Это управление контрастностью. Хоть в датащите и написано, что переменный резистор управления контрастностью можно не устанавливать, но мой дисплей отказался показывать что-либо без этой манипуляции. Если м/у ногами питания поставить построечный резистор 10-50кОм, а среднюю ногу завести на 3-ю дисплея, то можно регулировать контрастность.
Заглючение Достаточно функциональный дисплей, хорошо юзабельный, хорошего качества. Сайт производителя: http://melt.aha.ru Группа поддержки работает хорошо, поддерживают оперативно. Спасибо тов. Петухову (наверно из группы поддержки) за оперативную помощь в поиске багов. И конечно же спасибо Сереге за помощь в написании прошивки и (а)моральную поддержку :) *в датащите на момент написания статьи есть маленькая неточность by Pa5ha...






Рекомендуемый контент




Copyright © 2010-2018 housea.ru. Контакты: info@housea.ru При использовании материалов веб-сайта Домашнее Радио, гиперссылка на источник обязательна.