Сопряжение AVR-микроконтроллеров и ЖКИ
Татьяна Кривченко,
24 января 1999
1. Архитектура и система команд контроллера ЖКИ
Многие фирмы (Optrex Corporation, Powertip, Seiko Instruments, Batron и др.)
выпускают жидкокристаллические индикаторы со встроенными контроллерами, облегчающими реализацию интерфейса ЖКИ и микропроцессора. В данной статье рассматриваются вопросы аппаратного и программного сопряжения микроконтроллеров AVR и символьных ЖКИ, построенных на базе контроллера HD44780.
Рассматриваемый ЖКИ при помощи стандартного 14-контактного разъема (табл. 1) обменивается информацией с управляющим микроконтроллером (в нашем случае с AVR). AVR-микроконтроллер посылает в ЖКИ команды (табл. 2), управляющие режимами его работы, и ASCII-коды выводимых символов. В свою очередь, ЖКИ может посылать AVRмикроконтроллеру по его запросу информацию о своем состоянии и данные из своих внутренних блоков памяти.
Таблица 1: Описание выводов стандартного разъема ЖКИ на базе HD44780
N |
Название |
|
вывода |
1
VSS
2
VDD
3
V0
4
RS
5
R/W
6
E
7 
DB0
8 
DB1
9 
DB2
1
0 DB3
1 
DB4
Описание
(-) Питание. 0 V.
(+) Питание.+5V.
Напряжение смещения, управляющее контрастностью
Вход. Высокий уровень - Данные; Низкий - Команды
Вход. Высокий-Чтение, Низкий-Запись
Вход. Строб, сопровождающий сигналы на шине "команды/данные"

Шина "команды/данные"

1
1
2 DB5
1
3 DB6
1
4 DB7
Три вывода 14-контактного разъема предназначены для подачи питающего напряжения и напряжения смещения, которое управляет контрастностью дисплея. На рис. 1 показана рекомендуемая схема подключения этих выводов.
Рис. 1: Возможная схема питания ЖКИ
Из оставшихся 11 выводов 8 (DB0 - DB7) используются для организации мультиплексированной шины "команды / данные", и на 3 вывода (RS, R/W, E) AVRмикроконтроллер выставляет управляющие сигналы. На рис. 2 изображены временные диаграммы этих сигналов при записи команд / данных в контроллер ЖКИ.
При помощи сигнала на линии RS микропроцессор сообщает контроллеру индикатора о том, что именно передается по шине: команда или данные. Cигнал на линии Е является стробом, сопровождающим сигналы на шине "команды / данные". Запись информации в ЖКИ происходит по спаду этого сигнала. Потенциал на управляющем выводе R/W задает направление передачи данных: запись в RAM индикатора (R/W=0) или считывание оттуда
(R/W=1).
Для случая, когда микроконтроллер имеет ограниченное количество линий ввода / вывода, предусмотрен второй вариант подключения ЖКИ с использованием 4-х разрядной шины "команды / данные". При этом каждый байт данных передается по линиям DB4 - DB7 последовательно двумя тетрадами, начиная со старшей.
Контроллер ЖКИ после приема байта команды или байта данных требует некоторого времени (табл. 2) для обработки полученной информации, в течение которого AVRмикроконтроллер не должен выполнять новых передач.
Рис. 2: Запись данных в ЖКИ
Для того, чтобы определить, когда контроллер ЖКИ закончит свои внутренние операции, AVR может опрашивать BUSY-флаг индикатора (команда "чтение busy-флага"), который сбросится только тогда, когда контроллер ЖКИ освободится. Второй, более простой способ заключается в том, что управляющий микроконтроллер, зная, сколько времени требуется ЖКИ на обработку той или иной команды, просто выполняет временную задержку после каждой передачи информации.
Если во время цикла записи AVR-микроконтроллер передает в контроллер индикатора код команды, то этот код записывается в регистр команд контроллера ЖКИ, и команда сразу же начинает выполняться. Если AVR-микроконтроллер передает в контроллер ЖКИ данные, которые представляют собой ASCII-коды отображаемых символов, то они записываются в буфер данных (DDRAM), который обычно содержит 80 ячеек (рис. 3). При записи или считывании буфера данных обращение осуществляется к ячейке, на которую в данный момент указывает курсор.
Таблица 2: Система команд контроллера НD4478 |
|
Код |
Время |
|
испол |
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
|
D |
D |
D |
D |
D |
D |
D |
D |
Описание команды |
ния |
|
R |
R/ |
коман |
||||||||||
B |
B |
B |
B |
B |
B |
B |
B |
|
||||
S W |
|
ы |
||||||||||
|
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
(fosc= |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
250кГ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Очистить дисплей и установить курсор в нулевую позицию |
82мкс |
|
(адрес 0) |
до |
|||||||||||
|
|
|
|
|
|
|
|
|
|
1.64мс |
||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
* |
Установить курсор в нулевую позицию (адрес 0). Установить дисплей относительно буфера DDRAM в начальную позицию. Содержимое DDRAM при этом не меняется.
40мкс до 1.6
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
I/ |
|
S |
|
Установить направление сдвига курсора вправо (I/D=1) или |
|
40мкс |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
D |
|
|
|
влево (I/D=0) при записи/чтении очередного кода в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DDRAM. Разрешить (S=1) сдвиг дисплея вместе со сдвигом курсора.
0 |
0 |
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
|
0 |
0 |
0 |
0 |
0 |
1 |
S/ |
R/ |
* |
* |
|
|
|
|
|
|
|
C |
L |
|
|
|
0 |
0 |
0 |
0 |
1 |
D |
N |
F |
* |
* |
|
L |
||||||||||
|
|
|
|
|
|
|
|
|
||
0 |
0 |
0 |
1 |
ACG |
|
|
|
|
||
0 |
0 |
1 |
ADD |
|
|
|
|
|
||
0 |
1 |
B |
AC |
|
|
|
|
|
|
|
F |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||
1 |
0 |
Данные |
|
|
|
|
|
|||
1 |
1 |
Данные |
|
|
|
|
|
|||
Включить(D=1)/выключить(D=0) дисплей. Зажечь(C=1)/погасить(C=0) курсор. Изображение курсора сделать мигающим (B=1).
Переместить курсор (S/C=0) или сдвинуть дисплей (S/C=1) вправо (R/L=1) или влево(R/L=0).
Установить разрядность шины данных 4 бита (DL=0) или 8 бит (DL=1), количество строк дисплея - одна (N=0) или две (N=1), шрифт - 5х7 точек (F=0) или 5х10 точек (F=1).
Установка адреса CGRAM. После этой команды данные будут записываться/считываться в/из CGRAM.
Установка адреса DDRAM. После этой команды данные будут записываться/считываться в/из DDRAM.
Чтение состояния busy-флага (BF) и счетчика адреса.
Запись данных в DDRAM или CGRAM.
Чтение данных из DDRAM или CGRAM.
40мкс
40мкс
40мкс
40мкс
40мкс
1мкс
40мкс
40мкс
Примечание:
DDRAMDisplay data RAM - ОЗУ ASCII-кодов, отображаемых символов
CGRAM-Сharacter generator RAM - ОЗУ знакогенератора
Рис. 3: Отображение на дисплее символов, ASCII-коды которых записаны в DDRAM (а - однострочный ЖКИ, б - двустрочный ЖКИ)
Буфер данных имеет больше ячеек, чем число знакомест дисплея. Смещая окно индикатора относительно буфера данных (см. систему команд), можно отображать на дисплее различные области буфера. У двустрочных индикаторов первые 40 ячеек буфера данных, обычно, отображаются на верхней строке дисплея, а вторые 40 ячеек - на нижней строке. Сдвиг окна дисплея относительно буфера данных для верхней и нижней строк происходит синхронно. Курсор будет виден на индикаторе только в том случае, если он попал в зону видимости дисплея (и если предварительно была подана команда отображать курсор).
Кроме DDRAM, контроллер ЖКИ содержит еще один блок памяти - знакогенератор. Его
"прошивка", то есть соответствие ASCII-кодов начертанию символов, обычно имеется в описании индикатора. Пример такой "прошивки" представлен в таблице 3. Знакогенератор состоит из двух частей. Основная его часть представляет собой ПЗУ (CGROM) и ее, следовательно, нельзя изменить. Вторая часть, в которой задаются начертания символов для первых 16-ти кодов таблицы знакогенератора, представляет собой перепрограммируемое ОЗУ(CGRAM). Имеется возможность задать начертание 8 символов, соответствующих кодам 0(8), 1(9), 2(10) ... 7(15). Для каждого из восьми перепрограммируемых символов в CGRAM отводится по 8 ячеек памяти, каждая из которых соответствует одной строке точек в изображении символа. Таким образом, перепрограммируемая часть знакогенератора содержит 64 байта памяти (8х8). Пример кодирования CGRAM для одной буквы приведен на рис. 4.
Рис. 4: Пример кодирования символа
Таблица 3: Кодовая таблица для русифицированного индикатора PC 1202-A
2. Интерфейс ЖКИ с AVR-микроконтроллером
На рис. 5 и рис. 7 приведены две возможные схемы сопряжения ЖКИ и AVRмикроконтроллера. В первой схеме (рис. 5) ЖКИ подключается к AVR как блок внешней памяти данных.
Узел формирования стробирующего сигнала E здесь выполнен так же, как и на фирменных платах STK200, STK300 и использует сигнал записи WR AVRмикроконтроллера и старший разряд адреса A15. Таким образом, информация на индикатор поступает при выполнении AVR-микроконтроллером команды записи данных во внешнюю память с любым адресом, имеющим A15=1.
На рис. 6 представлена временная диаграмма записи данных во внешнюю память AVRмикроконтроллера.