Использование графического индикатора кардинально меняет внешний вид вашего проекта. Он предоставляет больше свободы при отображении данных, чем символьный ЖК индикатор на базе контроллера HD44780. В статье мы рассмотрим как подключить графический индикатор на контроллере KS0108 (или совместимом) к микроконтроллеру PIC производства компании Microchip. Статья разделена на несколько частей, в которых мы последовательно рассмотрим аппаратную и программную части проекта.
Выбор микроконтроллера PIC16F887 связан с тем, что приложения с графическим ЖКИ требуют достаточно много ресурсов микроконтроллера (линии ввода/вывода, встроенная память) и данный микроконтроллер имеет 36 линий ввода/вывода и 14 КБайт Flash-памяти.
Графический ЖКИ, который используется в нашем проекте – это модуль WDG0151-TMI монохромного индикатора производства компании Winstar с разрешением 128×64 точки. Он выполнен на базе двух контроллеров NT7108C и NT7107C, которые совместимы с контроллерами Samsung KS0108B и KS0107B.
KS0108B – это 64 канальный точечный драйвер ЖК сегментов. Модуль WDG0151-TMI содержит два таких контроллера, чтобы обеспечить управление 128 сегментами. С другой стороны контроллер KS0107B (NT7107C) – это 64 канальный драйвер общих линий индикатора, который генерирует временные сигналы для управления двумя сегментными драйверами. Это очень распространенные и хорошо зарекомендовавшие себя контроллеры, которые применяются и в индикаторах других производителей.
Блок-схема модуля Winstar WDG0151-TMI
Контроллер NT7107C управляет 64 общими линиями дисплея (COM1 – COM64). Первый контроллер NT7108C управляет левой половиной сегментов (SEG1 – SEG64) дисплея, второй NT7108C – правой половиной сегментов (SEG65 – SEG128). Доступ к двум половинам дисплея осуществляется индивидуально посредством сигнальных линий Chip Select (CS1, CS2). Каждая половина дисплея представлена 7 горизонтальными страницами памяти, каждая высотой 8 бит (1 Байт).
Начиная с 0 страницы в левoй половине (/CS1=0), если вы передадите 1 байт данных, они будут отображены в первом столбце страницы 0. Если повторить данный процесс 64 раза и затем переключиться на вторую половину дисплея и повторить операции, пока не будет достигнута 128 позиция, мы получим отображение первых 8 линий на дисплее. Для отображения следующих 8 линий необходимо повторить эти операции, но сменив адрес страницы памяти. Общее количество байт, необходимое для отображения одного кадра (128×64 точки), в нашем случае равно 2×64×8 = 1024.
Модуль дисплея Winstar WDG0151-TMI GLCD имеет встроенный генератор отрицательного напряжения для управления контрастностью. Потенциометр регулировки контрастности (обычно 10 кОм) подключается между выводами VEE и VCC. Расположение линий ввода/вывода индикатора не стандартизировано, поэтому необходимо обратиться к технической документации на дисплей при подключении его к микроконтроллеру.
В общем случае количество выводов у графического индикатора 20. Первые два вывода – выбор контроллера левой или правой части индикатора, активный уровень – низкий, однако существуют индикаторы с высоким активным уровнем (поэтому и понадобится еще раз техническое описание используемого индикатора от производителя). С помощью вывода 6 индикатора D/I (Data/Instruction) пользователь указывает, что поступает на шину данных индикатора: данные или команды (инструкции). Управляющие сигналы R/W и E имеют такое же назначение, как и в символьных индикаторах на контроллере HD44780.
Назначение выводов модуля ЖКИ WDG0151-TMI
Номер
вывода |
Обозначение
|
Уровень
|
Описание
|
1
|
/CS1
|
Низкий
|
Выбор сегментов 1 – 64
|
2
|
/CS2
|
Низкий
|
Выбор сегментов 65 – 128
|
3
|
Vss
|
0 В
|
Общий («земля»)
|
4
|
VDD
|
5.0 В
|
Напряжение питания
|
5
|
Vo
|
переменный
|
Подстройка контрастности
|
6
|
D/I или RS
|
Низкий/Высокий
|
Высокий: данные;
Низкий: инструкции |
7
|
R/W
|
Низкий/Высокий
|
Высокий: чтение данных;
Низкий: запись данных; |
8
|
E
|
Высокий
|
Разрешение записи/чтения
|
9 – 16
|
D0 – D7
|
Низкий/Высокий
|
Шина данных
|
17
|
RST
|
Низкий
|
Сброс модуля ЖКИ
|
18
|
VEE
|
Выход отрицательного
напряжения |
|
19
|
A
|
Анод подсветки дисплея
|
|
20
|
K
|
Катод подсветки дисплея
|
Контроллеры KS0107B и KS0108B не имеют своего знакогенератора, поэтому его функции будет выполнять программа микроконтроллера. Сам ЖКИ поддерживает ряд инструкций, которые приведены ниже в таблице. Необходимо помнить, что вывод RS (D/I) должен быть в высоком состоянии при операциях чтения/записи данных и оставаться в низком состоянии, когда передаются инструкции.
Команда
|
RS
|
R/W
|
DB7
|
DB6
|
DB5
|
DB4
|
DB3
|
DB2
|
DB1
|
DB0
|
Назначение
|
Дисплей
ВКЛ/ВЫКЛ |
L
|
L
|
L
|
L
|
H
|
H
|
H
|
H
|
H
|
L/H
|
Управляет вкл/выкл отображения.
Не влияет на внутреннее состояние и данные ОЗУ изображения. L: ВЫКЛ H: ВКЛ |
Установить
адрес |
L
|
L
|
L
|
H
|
Адрес Y (0 ~ 63)
|
Заносит адрес Y в счетчик адреса Y
|
|||||
Установить
страницу (адрес Х) |
L
|
L
|
H
|
L
|
H
|
H
|
H
|
Страница (0 ~ 7)
|
Заносит адрес X в регистр адреса X
|
||
Начальная
строка отображения |
L
|
L
|
H
|
H
|
Начальная строка
отображения (0 ~ 63) |
Указывает данные ОЗУ изображения
отображаемые вверху экрана |
|||||
Чтение
состояния |
L
|
H
|
BUSY
|
L
|
ON/OFF
|
RESET
|
L
|
L
|
L
|
L
|
Чтение состояния.
BUSY L: Готовность H: Выполняется команда ON/OFF
L: Отображение ВКЛ H: Отображение ВЫКЛ RESET L: Нормальный режим H: Сброс |
Запись
данных изображения |
H
|
L
|
Данные для записи
|
Записывает данные (DB0:7) в ОЗУ
данных изображения. После записи инструкции, адрес Y увеличивается на 1 автоматически. |
|||||||
Чтение
данных изображения |
H
|
H
|
Данные для чтения
|
Читает данные (DB0:7) из ОЗУ данных
изображения на шину данных |
Часть 2 - Схема, программа микроконтроллера для инициализации индикатора