Сегодня все чаще для отображения простой символьной информации используют символьные жидкокристаллические индикаторы ЖКИ. О том, как с ними работать мы и поговорим. В этой части статьи, мы детально рассмотрим символьные ЖКИ на базе контроллера HITACHI HD44780 (или совместимым с ним SAMSUNG KS0066). Статья - попытка систематизировать найденную мной информацию при работе с этими ЖКИ.
СОДЕРЖАНИЕ:
1. Символьный ЖКИ с контроллером HD44780 (KS0066). Интерфейс.
2. Набор команд контроллера HD44780.
3. Инициализация ЖКИ.
Символьный ЖКИ с контроллером HD44780 (KS0066). Интерфейс
Символьный ЖКИ есть ничем другим, как матрицей из точек, разделенной на строки и поля символов:
Для управления этой матрицей и вывода собственно символов используется специальный контроллер.
HD44780 (и совместимый с ним KS0066) – есть де-факто стандартом на контроллеры монохромных жидкокристаллических знакосинтезирующих дисплеев с параллельным 4-х или 8-битным интерфейсом. На базе этого контроллера выпускается огромное количество моделей с различным конструктивном и разрешением, начиная с 8x1 (восемь символов в одной строке), и заканчивая 40x4 (содержащих два независимых управляющих чипа). Типичная частота работы контроллера – 270 кГц.
Контролер ЖКИ оперирует 3-мя блоками памяти:
1. Для вывода символа контроллер использует память DDRAM (Display Data RAM), где хранятся ASCII-коды символов, которые мы хотим видеть на ЖКИ. Под нее отведено 80 ячеек памяти. Понятно, что на ЖКИ мы увидим лишь часть символов, которые находятся в DDRAM - если наш ЖКИ 1 или 2-строчный и отображает 8 символов в строке, то так:
Рабочую область дисплея, как видно, можно смещать по ячейкам DDRAM (получается эффект бегущей строки).
2. Шаблоны самих символов контроллер берет из CGROM (Character Generator ROM) – памяти знакогенератора. Таблицу символов можно посмотреть в спецификации на HD44780.
3. Для хранения пользовательских символов (их шаблонов) предусмотрена память CGRAM (Character Generator RAM).
Также, контроллер в зависимости от некоторых условий распределяет пришедшие в него данные в регистр инструкций или регистр данных.
Типичный 14-пиновый интерфейс контроллеров HD44780:
1 |
Земля, общий провод, GND |
2 |
Напряжение питания, Vcc (+5V) |
3 |
Настройка контрастности (Vo) |
4 |
Выбор регистра (R/S для HD44780, A0 для KS0066) |
5 |
Чтение/запись (R/W) |
6 |
Строб по спаду Е (Enable) |
7 |
Bit 0 (младший для 8мибитного интерфейса) |
Линия данных |
|
8 |
DB 1 |
9 |
DB 2 |
10 |
DB 3 |
11 |
DB 4 (младший для 4х битного интерфейса) |
12 |
DB 5 |
13 |
DB 6 |
14 |
DB 7 (старший для 8-х (4х) битного интерфейса) |
Для дисплея с подсветкой |
|
15 |
Питание подсветки для дисплеев с подсветкой (анод) |
16 |
Питание подсветки для дисплеев с подсветкой (катод) |
Нумерацию пинов на конкретном ЖКИ смотрим в datasheet.
Контрастность изображения на ЖКИ можно изменять, подключив дополнительно построечный резистор на 10 кОм по схеме:
Но, следует смотреть в спецификацию на свой контроллер (например у ЖКИ Klsn10294v-0 на чипе KS0066 1-Vcc, а 2-GND). Подача питания подсветки может различаться от модели к модели в зависимости от её типа. Обычно подсветка питается от 5 вольт, токоограничительный резистор (50-100 Ом) обычно не обязателен.
Назначение выводов R/S, R/W, E:
При переходе Е с высокого лог. уровня на низкий данные, которые уже «висят» на выводах DB0..DB7, записываются в память контроллера ЖКИ для последующей обработки.
При высоком лог. уровне на R/S(Register Select) контроллер ЖКИ воспринимает этот набор битов как данные(код символа), а при низком – как инструкцию и направляет их в соответствующий регистр.
R/W определяет направление работы выводов DB0..DB7 – если на R/W «0», то мы можем только писать в порт DB, а если R/W = «1», то можем прочитать с него (например узнать занят контроллер или свободен для приема новых данных). Если мы не будем читать данные из ЖКИ, то можно «посадить» R/W на землю.
Набор команд HD44780
Для того чтобы начать выводить информацию на ЖКИ, его контроллер надо проинициализировать (сообщить ему об интерфейсе, шрифте, смещениях и т.д.). Контроллер может воспринимать всего 11 команд:
Название инструкции |
Состояние выводов |
Прим. |
Время исполнения fраб.=270 кГц |
|||||||||
RS |
R/W |
DB7 |
DB6 |
DB5 |
DB4 |
DB3 |
DB2 |
DB1 |
DB0 |
|||
Clear display |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Очистка Всего ЖКИ установка адреса DDRAM в 0 |
1.52 мс |
Return home |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Х |
Установка текущего адреса DDRAM в 0 (курсор – домой) Данные DDRAM не меняются |
1.52 мс |
Entry mode set |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
I/D |
S |
Установка направления движения курсора (I/D) и смещения дисплея (S) при выводе данных |
37 мкс |
Display on/off control |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
Вкл/выкл. дисплей(D), курсор(C) и его мерцание(B) |
37 мкс |
Cursor or display shift |
0 |
0 |
0 |
0 |
0 |
1 |
S/C |
R/L |
Х |
Х |
Двигает курсор и смещает дисплей по DDRAM |
37 мкс |
Function set |
0 |
0 |
0 |
0 |
1 |
DL |
N |
F |
Х |
Х |
Установка интерфейса(DL), число строк(N) и шрифт символов(F) |
37 мкс |
Set CGRAM address |
0 |
0 |
0 |
1 |
ACG5 |
ACG4 |
ACG3 |
ACG2 |
ACG1 |
ACG0 |
Установка счетчика адреса CGRAM. После этого можно записывать данные в CGRAM |
37 мкс |
Set DDRAM address |
0 |
0 |
1 |
ADD6 |
ADD5 |
ADD4 |
ADD3 |
ADD2 |
ADD1 |
ADD0 |
Установка счетчика адреса DDRAM |
37 мкс |
Read busy flag & address |
0 |
1 |
BF |
AC6 |
AC5 |
AC4 |
AC3 |
AC2 |
AC1 |
AC0 |
Если BF = 1 то контроллер ЖКИ выполняет внутреннюю операцию (занят). АC6-АC0 – текущее значение адреса DDRAM |
0 мкс |
Write data to RAM |
1 |
0 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Запись данных в RAM |
37 мкс |
Read data from RAM |
1 |
1 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Чтение данных из RAM |
37 мкс |
I/D = 1: адрес DDRAM увеличивается I/D = 0: уменьшается
S = 1: сдвиг рабочей области дисплея по DDRAM разрешен
D = 1: дисплей (изображение) включен
C = 1: курсор включен
В = 1: мерцание курсора включено
S/C = 1: сдвинуть дисплей S/C = 0: переместить курсор
R/L = 1: вправо R/L = 0: влево
DL = 1: 8 bit DL = 0: 4 bits
N = 1: 2 lines N = 0: 1 line
F = 1: 5х10 F = 0: 5х8
ACG: CGRAM address
ADD: DDRAM address (адрес курсора)
AC: Address counter DD и CGRAM адресов
Инициализация ЖКИ
Есть 2 способа инициализации контроллера ЖКИ:
1. Через внутреннюю схему сброса.
2. В ручном режиме (через посылку в него ряда команд, которыми мы задаем режим работы ЖКИ)
Внутренняя схема сброса контроллера начинает работать сразу после включения питания. В этом есть один минус – если питание у нас «ползет» до рабочего уровня медленно (медленнее, чем за 10 мс), то самоинициализация контроллера может пройти некорректно. При этом способе инициализации контроллер сам исполняет следующие команды:
1. Display clear
2. Function set:
DL = 1; 8-bit interface data
N = 0; 1-line display
F = 0; 5х8 dot character font
3. Display on/off control:
D = 0; Display off
C = 0; Cursor off
B = 0; Blinking off
4. Entry mode set:
I/D = 1; Increment by 1
S = 0; No shift
Второй способ исключает зависимость схемы от источника питания. Для инициализации контроллера ЖКИ в ручном режиме необходимо исполнить следующий алгоритм:
8-битный параллельный интерфейс.
4-битный параллельный интерфейс.
Как видно, здесь нет ничего сложного: посылаем в ЖКИ команду за командой, учитывая время их исполнения (около 40 мкс) или проверяя флаг занятости контроллера ЖКИ (тогда надо посадить пин RW на лапку микроконтроллера и выставлять его в «1», когда хотим узнать, занят ЖКИ или нет).
Вот, собственно, все, что касается теории работы с символьными ЖКИ. Если что-то пропустил или ошибся, читаем спецификацию на контроллер HD44780 или англ. версию.
Во второй части рассмотрим аппаратную и программную реализацию связи PIC-микроконтроллера с ЖКИ.
Комментарии (5) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Неплохо бы в конце упомянуть, что перед началом работы необходимо включить экран.
А то в процедуре инициализации мы его отключаем.
Не сразу понял почему после инициализации экран молчал...
А в целом хорошо