Использование графического индикатора кардинально меняет внешний вид вашего проекта. Он предоставляет больше свободы при отображении данных, чем символьный ЖК индикатор на базе контроллера 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) из ОЗУ данных
изображения на шину данных
|
Для подключения графического индикатора Winstar WDG0151-TMI к микроконтроллеру и проведения экспериментов автор использовал отладочную плату компании mikroElektronika UNI-DS6 с микроконтроллером Microchip PIC16F887.
UNI-DS6 – универсальная отладочная плата для изучения микроконтроллеров PIC, AVR, 8051, ARM, PSoCи dsPIC, идеальная для оборудования учебных классов и лабораторий. Хорошо методически проработанная плата включает универсальное посадочное место, в которое может быть установлена одна из плат специализации (mikroBoard).
Плата оснащена большим количеством разнообразных устройств ввода и вывода информации и гибкой системой их коммутации с платой специализации. В качестве устройств ввода предусмотрены кнопки, подключаемые ко всем линиям портов микроконтроллеров, 12-разрядный АЦП, температурный датчик, накопитель MMC/SD. Для отображения данных на плате имеются светодиоды на всех линиях портов микроконтроллера, а также предусмотрены посадочные места со штыревыми разъемами для установки алфавитно-цифрового и графического ЖК дисплеев. Для двунаправленного обмена установлены два USB-UART моста.
Принципиальная схема отладочной платы доступна для скачивания в секции загрузок.
Схема подключения индикатора к микроконтроллеру показана на рисунке ниже. Выводы шины данных подключаются к порту D микроконтроллера, управляющие сигналы поступают с порта B.
Программа микроконтроллера для инициализации индикатора написана в компиляторе mikroC Pro для микроконтроллеров PIC. Несмотря на то, что компилятор предоставляет готовую библиотеку функций для управления графическим индикатором, работу с которой мы рассмотрим в третьей части описания, мы попытаемся написать свой тестовый код для передачи данных от микроконтроллера в индикатор.
Тестовая программа выводит на индикатор 11 горизонтальных строк с точками с интервалами между ними в 6 линий. Исходный код доступен для скачивания в разделе загрузок. При разработке тестовой программы за основу была взята готовка библиотека Osama’s Lab GLCD library, модифицированная для применения в среде mikroC.
Рассмотрим основные функции в программе инициализации индикатора.
- GLCD_ON(): функция включения индикатора. Функция реализует подачу команды 3Fh обоим контроллерам индикатора, следовательно, низкий уровень должен быть на входах /CS1 и /CS2, а также на входе RS, т.к. посылаемый байт это инструкция;
- Set_Start_Line(): функция изменяет номер первой строки, которая будет отображаться вверху экрана. Вы можете установить любое значение из диапазона 0 – 63, функция не вносит каких-либо изменений в ОЗУ данных дисплея, а лишь сдвигает экран вверх или вниз;
- GOTO_COL(): перемещает курсор в указанный столбец (0 – 127);
- GOTO_ROW(): перемещает курсор в указанный ряд или страницу (0 – 7);
- GOTO_XY(): перемещает курсор в указанные координаты столбца и ряда;
- GLCD_Write(): запись байта данных в текущую позицию;
- GLCD_Read(): чтение байта данных с текущей позиции. Если вы посмотрите исходный код то увидите в этой функции две операции чтения. Первая операция чтения вызывает перемещение данных из ОЗУ дисплея в выходной регистр контроллера KS0108B, а при следующей операции чтения микроконтроллер получает актуальные данные из регистра;
- GLCD_Clrln(): функция очищает указанную страницу;
- GLCD_CLR(): полностью очищает дисплей;
- Draw_Point(): функция прорисовки точки в указанной позиции.
В этой части статьи мы уделим внимание встроенной библиотеке mikroC Pro для работы с графическим индикатором, которая значительно упростит вывод данных на экран индикатора.
Встроенная библиотека GLCD в среде mikroC Pro для PIC микроконтроллеров предназначена для управления графическими индикаторами на базе контроллеров Samsung KS0108/KS0107 и совместимых с ними. Функции библиотеки условно можно разделить на два типа: базовые и расширенные. Но перед использованием самой библиотеки необходимо определить в программе как индикатор подключен к микроконтроллеру.
Индикатор мы подключим к микроконтроллеру, как указано во второй части статьи: порт D используется для подключения шины данных, порт B – для управления индикатором.
Определение подключения выводов индикатора к микроконтроллеру в программе показано ниже.
// определение подключения индикатора к портам микроконтроллера
char GLCD_DataPort at PORTD;
sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS at RB2_bit;
sbit GLCD_RW at RB3_bit;
sbit GLCD_EN at RB5_bit;
sbit GLCD_RST at RB4_bit;
sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB5_bit;
sbit GLCD_RST_Direction at TRISB4_bit;
Теперь рассмотрим функции встроенной библиотеки:
Базовые функции:
- Glcd_Init: Инициализация индикатора;
- Glcd_Set_Side: Выбор стороны экрана. Например, обе команды Glcd_Set_Side(0) и Glcd_Set_Side(62) делают активной левую сторону индикатора. Значения от 64 до 127 в команде, например Glcd_Set_Side(67), выбирают правую сторону индикатора;
- Glcd_Set_X: Установка позиции по оси X от левой границы индикатора в пределах выбранной стороны.например, Glcd_Set_X(25);
- Glcd_Set_Page: Выбор страницы графического индикатора;
- Glcd_Read_Data: Чтение одного байта с текущей позиции памяти индикатора и сдвиг на следующую позицию;
- Glcd_Write_Data: Запись одного байта данных в текущую позицию памяти индикатора и сдвиг на следующую позицию.
Расширенные функции:
- Glcd_Fill: Заполнение памяти индикатора одним указанным значением. Если значение в команде равно 0, то эта функция очистит индикатор, если значение FFh, то вся память индикатора будет заполнена 1.
- Glcd_Dot : Прорисовка одной точки на индикаторе с заданными координатами и цветом. Функция используется в виде Glcd_Dot(x, y, color), где x = 0–127, y = 0–63, color = 0–2. Параметр color (который присутствует и в других функциях, связанных с прорисовкой объектов) определяет статус точки: 0 – очистить точку, 1 – установить точку, 2 – инвертировать точку.
- Glcd_Line: Прорисовка линии по двум заданным координатам и статусу (0–2).
- Glcd_V_Line: Прорисовка вертикальной линии по двум координатам с одинаковыми координатами по оси X, также имеется параметр статуса линии.
- Glcd_H_Line: Прорисовка вертикальной линии по двум координатам с одинаковыми координатами по оси Y, также имеется параметр статуса линии.
- Glcd_Rectangle: Прорисовка прямоугольника с заданными координатами верхнего левого и нижнего правого угла.
- Glcd_Box: Прорисовка закрашенного прямоугольника, цвет заполнения определяется цветом прямоугольника.
- Glcd_Circle: Прорисовка окружности с заданными координатами центра и радиуса.
- Glcd_Set_Font: Как было замечено в первой части статьи, контроллер индикатора не имеет своего знакогенератора, поэтому символы и шрифты должны быть прописаны в программе микроконтроллера. Это достаточно трудоемкая задача и для упрощения в компиляторе mikroC Pro предусмотрены демонстрационные шрифты:
- Font_Glcd_System3x5;
- Font_Glcd_System5x7;
- Font_Glcd_5x7;
- Font_Glcd_Character8x7;
Эти шрифты используются в функциях
Glcd_Write_Char и
Glcd_Write_Text для отображения символов и текста. Синтаксис использования функции
Glcd_Set_Font следующий:
Glcd_Set_Font (const char *activeFont, unsigned short aFontWidth, unsigned short aFontHeight, unsigned int aFontOffs);
Где параметры:
activeFont – установка шрифта,
aFontWidth – ширина символов шрифта в точках,
aFontHeight – высота символов шрифта в точках,
aFontOffs – число, которое представляет собой разницу (смещение) между набором символов mikroC и обычным набором ASCII символов. Демонстрационные шрифты имеют смещение 32.
Для использования шрифта
Font_Glcd_5x7, необходимо выполнить команду со следующими параметрами:
Glcd_Set_Font(Font_Glcd_5x7, 5, 7, 32).
- Glcd_Write_Char: Ззапись символа в указанную позицию по оси X (0-127) и страницу (0-7) индикатора.
- Glcd_Write_Text: Отображение текста начиная с указанной позиции по оси X (0-127) и страницы (0-7) на индикаторе;
- Glcd_Image: Вывод BMP-картинки на индикатор Displays bitmap image on Glcd. Битовый массив изображения также хранится в программе микроконтроллера. Для подготовки любого изображения к выводу на графический индикатор mikroElektronika предлагает специальную, простую в использовании утилиту.
Для демонстрации функций библиотеки предостатвляется исходный код программы микроконтроллера и готовый к прошивке HEX-файл.
В архиве:
Исходный текст программы и HEX-файл
Исходный текст тестовой программы микроконтроллера и файл прошивки
Принципиальная схема отладочной платы UNI-DS6
podklgraphindtopic.rar [2,14 Mb] (cкачиваний: 583)