Работа микроконтроллера AVR с алфавитно-цифровым ЖКИ на базе контроллера HD44780 и совместимых (KS0066U, ST7066, SPLC780 и т. п.) В этом примере мы рассмотрим драйвер для микроконтроллеров семейства AVR фирмы Atmel, обеспечивающий работу с символьными ЖКИ на базе контроллера HD44780 и совместимых с ним. В настоящее время такие ЖКИ производит большое число фирм, например EASTTOP, Electronic Assembly, Fordata, Winstar, Raystar и др. Электрические характеристики ЖКИ (кратко) Контроллер ЖКИ имеет встроенный тактовый генератор и не требует никаких внешних компонентов. Стандартная разводка выводов | 1 | GND | Общий провод | 2 | Vcc | Питание, +5 В | 3 | Vo | Питание драйверов ЖК-панели | 4 | RS | Выбор регистра | 5 | R/W' | Чтение/запись' | 6 | E | Строб записи, в модулях 40*4 строб первого контроллера | 7 .. 14 | DB0 .. DB7 | Данные 0 .. 7 | 15 | | Анод подсветки/E (не всегда имеется и не всегда подключен, в модулях 40*4 строб второго контроллера) | При работе на прием порт данных контроллера представляет собой КМОП вход с Р-МОП «подвеской» к Vcc, при передаче КМОП выход, при Enable = 0 переходит в Z-состояние. Линии управления RS (выбор регистра данные/команды') и R/W' (чтение/запись') представляют собой КМОП входы с Р-МОП «подвеской» к Vcc. Линия управления Enable (разрешение) представляют собой КМОП вход. Входные уровни сигналов ТТЛ, нагрузочная способность порта данных 2 ТТЛШ входа. Потребление по цепи питания контроллера (+5В) около 0.6 мА (макс.). ЖКИ, рассчитанные на работу в расширенном температурном диапазоне (от -20 до +70 °С) требуют отрицательного напряжения питания для драйверов индикатора (вывод N3). При его отсутствии (вывод N3 соединен с N1) либо будет отсутствовать изображение, либо оно будет недостаточно контрастным. Для формирования отрицательного напряжения питания можно использовать микросхему конвертера, например, типа 7660, и 2 навесных конденсатора. Этой же микросхемой можно воспользоваться для совмещения ЖКИ с устройствами, работающими при напряжении питания 3.3 В. Пользователи устройств AT STK200/300 могут получить отрицательное напряжение после небольшой доработки своей платы. Для этого необходимо выпаять потенциометр регулировки контрастности; перерезать печатный проводник, соединяющий с «общим» проводом ближний левый вывод потенциометра, если смотреть на STK200 (схема) со стороны разъема для ЖКИ; запаять потенциометр на место и соединить освободивщийся вывод с 6-м выводом микросхемы формирователя RS232 (MAX202CPE). В результате напряжение на выводе Vo будет меняться от +5 до -8 В. Потребление по цепи питания драйверов (при -2 В) 0.5 мА (измерено на одном образце PC1602LRS-LEH-H). Дальнейшие подробности смотрите в фирменной технической документации на контроллеры (Hitachi, HD44780 и др.). В пределе, монопольного управления требует только линия Enable. Это видно, например, из фирменной документации на модули размером 40*4, где выводы RS, R/W' и DB0..DB7 двух контроллеров (каждому контроллеру по 2 строки в 20 символов) соединены параллельно на разъеме модуля. То есть, при низком уровне на линии E, можно производить обмен с другими устройствами, имеющими вход разрешения (перевода выводов в Z-состояние) и подключенными параллельно DB, R/W' и RS. Например, к портам А и С микроконтроллера ATmega128, ATmega162 или AT90USB128x можно параллельно подключить ЖКИ и NAND-Flash и отобразить их на адресное пространство внешнего ОЗУ. Некоторые программные особенности контроллеров ЖКИ С точки зрения программиста контроллер представляет собой: Регистр управления: при чтении содержит флаг готовности контроллера к выполнению новой команды и значение счетчика адреса, при записи принимает команды; Регистр данных: для чтения/записи ОЗУ знакогенератора и видеопамяти. Информация, записанная в регистр команд, определяет режимы работы контроллера, записанная в регистр данных, перемещается в ОЗУ знакогенератора или видеопамять в соответствии с текущим режимом работы контроллера. Видеопамять организована как 2 строки по 40 символов, причем адрес начала 2-й строки не $27, а $40 (при последовательном заполнении видеопамяти с автоинкрементом счетчика адреса правильный перевод производится автоматически). В «окне» дисплея отображается часть видеопамяти соответствующего размера, поэтому, на мой взгляд, есть несколько наиболее удобных в обращении размеров модулей. Имеется ввиду возможность заполнить видеопамять несколькими сообщениями и показывать требуемое с помощью прокрутки дисплея относительно видеопамяти. Эти размеры 8*2 и 16*1 (5 сообщений по 16 символов), 20*1 (4 сообщения по 20 символов), 20*2 и 40*1 (2 сообщения по 40 символов). При этом нобходимо учитывать, что в модулях размера 16*1 первые 8 отображаемых символов принадлежат первой строке видеопамяти, а следующие 8 второй. Дальнейшие подробности смотрите в фирменной технической документации на контроллеры. Возможные способы связи микроконтроллеров с ЖКИ ОТОБРАЖЕНИЕ НА АДРЕСНОЕ ПРОСТРАНСТВО ОЗУ Данный способ связи микроконтроллеров с ЖКИ, примененный в устройствах ATSTK 200/300 (схема), имеет одно достоинство простоту программной реализации обмена данными (с точки зрения объема исполняемого кода). Его недостатки: - Работа с невысокой тактовой частотой контроллера
(при использовании цикла доступа к ОЗУ с 1-м тактом ожидания около 4 МГц макс., при уменьшении длительности строба ЖКИ до минимально возможного около 5.5 МГц макс. с 1-м тактом ожидания и около 2 МГц без него); - Уменьшение скорости обмена с внешним ОЗУ (при использовании тактов ожидания);
- Часть адресного пространства внешнего ОЗУ перекрывается внутренним
(в практической конструкции для предотвращения этого может быть использован инвертор на линии ADR15); - Возможность работы только с микроконтроллерами, допускающими использование внешнего ОЗУ.
Карта ОЗУ в данном случае (ATSTK 200/300) имеет вид (шестнадцатеричные адреса): В диапазоне адресов от 0000 до RAMEND расположено внутреннее ОЗУ, включающее в себя: - Регистры общего назначения (0000 001F),
- Регистры портов ввода/вывода (0020 005F),
- Собственно внутреннее ОЗУ (0060 RAMEND).
В диапазоне адресов от RAMEND+1 до 7FFF расположено внешнее ОЗУ 32К*8 (диапазон адресов внешнего ОЗУ от 0000 до RAMEND перекрыт внутренним ОЗУ); В диапазоне адресов от 8000 до ВFFF расположен регистр команд контроллера ЖКИ (для записи регистр команд, для чтения регистр состояния); В диапазоне адресов от С000 до FFFF расположен регистр данных контроллера ЖКИ. Временные диаграммы обмена данными имеют следующий вид:
_____ _____ _____ _____
СLK _/ \_____/ \_____/ \_____/ \_____/
T1 T2 T3 T4
ADR15 __________________________________________________
(выбор ОЗУ'/ЖКИ) _______________/ \___
ADR14 (выбор _______________ _______________________________ __
команды'/данные) _______________Х_______________________________Х__
_____________
Enable ____________________/ \_______________
(строб ЖКИ) | |
|______t______|
WR' ___________________ ____________
(строб записи ОЗУ) \_________________/
_________ ______________________
PORTA ------<_________Х______________________>----------
(записываемые данные) мл. адрес запись
RD' _________________ ______________
(строб чтения ОЗУ) \_________________/
PORTA _________ ____________
(считываемые данные) ------<_________>-----<____________>--------------
мл. адрес чтение
В устройствах ATSTK 200/300 длительность сигнала Enable (t) составляет около 360 нС (минимально допустимая длительность 230 нС). ПОДКЛЮЧЕНИЕ К ПОРТАМ ВВОДА/ВЫВОДА МИКРОКОНТРОЛЛЕРА Данный способ связи микроконтроллеров с ЖКИ имеет следующие достоинства: Возможность работы с любыми микроконтроллерами на произвольной тактовой частоте. Для работы постоянно используются только 3 линии порта ввода/вывода (порт данных контроллера ЖКИ при отсутствии обмена с ЖКИ находится в Z-состоянии и порт управляющего микроконтроллера, через который осуществляется обмен данными, в это время может быть использован по вашему усмотрению). Его недостатки: Больший объем исполняемого кода (может быть уменьшен при использовании внешней схемы, формирующей необходимые временные диаграммы обмена). Описание тестовой программы Программы (драйверы) служат примерами работы с ЖКИ, подключенными к портам ввода/вывода DIS.ASM (листинг) и отображенными на адресное пространство внешнего ОЗУ RAM_DIS.ASM (листинг) и написаны на ассемблере. Программы осуществляют инициализацию контроллера ЖКИ, вывод сообщений и прокрутку экрана. Для продвижения по программам (только для демонстрации) используется внешнее прерывание N1 (вывод 3 порта D), для завершения работы внешнее прерывание N0 (вывод 2 порта D). Подпрограммы и блоки данных, расположенные во включаемых файлах DISPLAY.INC (листинг) и RAM_DIS.INC (листинг), рассчитаны на 2-х строчные ЖКИ (на них обеспечивается наилучшая связность выводимой информации). P. S. Данный пример написан с оглядкой на структуру языков высокого уровня и получился несколько усложненным. Если разбить код на несколько подпрограмм, то он может быть более компактным (особенно, если не использовать чтение из ЖКИ и работать по тайм-аутам вместо вызова «bf»). Следите за изменениями. Литература: Автор: Станислав Лещинский aka «Точка Опоры» ООО «МФК Точка Опоры», Москва, www.fulcrum.ru 04.02.2002 |