Приветствую Вас, Гость! Регистрация RSS

Суббота, 20.04.2024
Главная » Статьи » Cтатьи

ATmega8535. Подключение графического индикатора WG12864B-YGH-VN. часть 1


Однажды решился разобраться, что же такое графический дисплей и с чем его едят. Юзая Интернет в поисках (описание, принципы работы и т.д.), наткнулся на статью на сайте www.radiokot.ru «Использование графического LCD WG12864A» (спасибо автору molchec за написанную информацию). Из данной статьи была взята небольшая часть кода по выводу текста. Конечно, можно было бы тупо взять всю программную идею и не изобретать велосипед, но все, же я решил разобраться с этим графическим «зверем» с нуля, изучая от корки до корки PDF документацию, осмысляя всю сущность работы и реализации в программном коде (драйвере LCD). Поэтому хочу в этой статье описать свой вариант использование графического дисплея WG12864B-YGH-VN подключенного к микроконтроллеру AVR.
 

Архитектура контроллера Neotec NT7108

Графический дисплей дает широкие возможности по выводу различной текстовой и графической информации (отсюда название типа индикатора).

null

 

 

Дисплей имеет 128 точек по горизонтали и 64 точки по вертикали. Весь экран разделён на два полуэкрана, соответственно имеет два управляющих контроллера (тип Neotec NT7108). Линии управления E,D\I,R\W,RESET и шина данных DB7-DB0 являются общими для двух контроллеров, кроме линий CS1 и CS2, по которым выполняется выбор контроллера. Если линии CS1 и CS2 не активны (логическая 1), то любые изменения на выше описанных линиях управления результата не дадут по отношению к дисплею.

 

 

Дисплей имеет 6 линий управления, 8 разрядную шину ввода\вывода данных и выводы питания.

Функциональные выводы:
  • RESET  ( инверсный вход ) - сброс индикатора.
  • D\I      ( D - прямой вход, I - инверсный вход )   - выбор данные ( 1 )\инструкции ( 0 ).
  • R\W     ( R - прямой вход, W - инверсный вход ) - выбор чтение ( 1 )\запись ( 0 ).
  • Е         стробирующий сигнал. ( L ( 0 )  H ( 1 ) ).
  • CS1     выбор первого контроллера ( соотв. Полуэкран ). Низкий ( L ) уровень активный.
  • CS2     выбор второго контроллера ( соотв. Полуэкран ). Низкий ( L ) уровень активный.
  • DB7–DB0  8битная шина данных.

Остальные выводы:
  • Vdd вывод питания ( +5В ).
  • Vcc общий ( корпус ).
  • Vo вывод регулировки контрастности. 
  • Vee выход отрицательного напряжения.
  • A анод питания подсветки.
  • K катод питания подсветки.

Отображение информации на экране осуществляется за счет формирования управляющих сигналов функциональных линий и записи данных в память RAM. В какой именно области экрана будут отображаться данные ( страница, столбец ), например - символ, определяется установленными значениями в счетчике Y адреса и регистре Х адреса. После записи данных в RAM, Счетчик Y адреса увеличивает свое значение автоматически, поэтому достаточно указать определенное значение счетчика и далее записывать побайтно последовательность символов.


null

Память RAM контроллера NT7108 разбита на 8 страниц по 64 ячейки ( ячейка имеет размер в 1байт ). Общий размер памяти RAM одного контроллера 512байт (4096бит ).

Выбрав страницу ( 0 – 7 ) и установив значение счетчика Y адреса ( 0 – 63 ), можно писать символы. У данной модели дисплея отсутствует встроенная ROM память, содержащая набор символов для вывода на экран. Поэтому двухмерный массив символов для вывода будет содержаться непосредственно во flash памяти микроконтроллера. Смысл вывода графики на экран дисплея, будь то текст или графические примитивы, да хоть « кракозабли », сводиться к отображению памяти RAM: что записано там, то и будет на экране, т.е. точки на экране это биты памяти RAM. Поэтому, какой массив набора символов создадим, то и будем выводить.

null

 

 

Управление контроллером NT7108

Запись\чтение данных\команд выполняется логическим управлением линий D\I, R\W, E. В таблице описаны инструкции для управления контроллером LCD:

 

 название команды   D\I   R\W   DB7   DB6   DB5   DB4   DB3   DB2   DB1   DB0 

 Включение\выключение дисплея 

 0

 0

 0

 0

 1

 1

 1

 1

1

D

 Установка счетчика Y адреса

 0

 0

 0

1

 Адрес ( 0 – 63 )

 Установка страницы ( регистр Х адреса ) 

 0  0  1  0  1  1  1  Адрес ( 0 – 7 )
 Стартовая линия дисплея  0  0  1  1  Адрес ( 0 – 63 )
 Чтение регистра статуса контроллера  0  busy  0  on\off  reset  0  0  0  0
 Запись данных в RAM  1  Данные в диспей поступают от микроконтроллера 
 Чтение данных из RAM  1  Данные от дисплея поступают в микроконтроллер 

                  Для фиксирования контроллером логического состояния линий D\I, R\W, DB0 – DB7, нужно на линии Е выполнить логический                                                     перепад: H -> L


Теперь разберемся подробнее с этими командами. Сложного ничего нет, главное уловить смысл функционирования.

 

Display on\off
( включение\выключение дисплея )

Управление отображением ЖК экрана. Логическое состояние бита D определяет, будет ли экран отображать информацию: 
  • D = 0 индикатор не отображает, 
  • D = 1 индикатор отображает.
На состояние RAM памяти не влияет.


Display Start Line
( стартовая линия дисплея )

Z адрес отображения информации на дисплее по строке. Запись числа в регистр приводит к смещению всего изображения по вертикали. Если Z address++ ( инкремент ), то изображение перемещается сверху вниз. Если Z address-- ( декремент ), то изображение перемещается снизу вверх. Данные имеют диапазон 0x00 - 0x3F( 0 – 63 )


Set page ( X address )
( Выбор страницы. Х адрес )

Установка регистра Х адреса памяти RAM контроллера. Адрес определяет страницу ( 64 байта полного заполнения единицами ), в которую будет выполняться запись или чтение данных. Данные имеют диапазон 0x00 - 0x07 ( 0 – 7 ).


Set Y address
( Счетчик. Y адрес )

null

Установка счетчика Y адреса памяти RAM контроллера ( столбцы или 8-битные ячейки памяти ). С каждой записью или чтения данных, счетчик адреса инкрементирует свое значение на 1. Данные имеют диапазон 0x00 - 0x3F ( 0 – 63 ).


Status Read
( чтение регистра состояние контроллера LCD )

null

Содержит 1байт значение состояния контроллера, которое определяет, какая работа в данный момент выполняется дисплеем.

Busy ( Флаг занятости контроллера )
   • Флаг установлен в 1, если контроллер занят внутренней работой.
   • Флаг установлен в 0, если контроллер освободился.

On\off ( Флаг вкл\выкл дисплея)
Показывает, отображается или неотображается информация на дисплее.
   • Флаг установлен в 1, если экран дисплея в отключенном состояниии.
   • Флаг установлен в 0, если экран дисплея во включенном состояниии.

Reset ( Сброс )
Показывает сброшен ли контроллер дисплея или находится в активном состоянии.
   • Флаг установлен в 1, если контроллер дисплея в состоянии сброса.
   • Флаг установлен в 0, если контроллер дисплея в рабочем состоянии.

 

Схема подключения

Для подключения дисплея, используется 14 линий ввода\вывода. Шина данных дисплея подключена к выводам порта С ( PORTC ), а линии управления к порту D ( PORTD ). В принципе подключать дисплей можно к любому порту, если не будут использоваться функциональные выводы. В моем случае, я использовал PORTA для работы с АЦП, PD0 ( RXD ) и PD1 ( TXD ) для связи с компьютером, поэтому схема подключения такая. Кварц ZQ1 - 11,059200Mгц

При первом подключении дисплея, можно проверить наличие подсветки экрана и подрегулировать контрастность. Контрастность подстраивается резистором R1.

О наличие контрастности свидетельствует появление всех точек на полном экране.

Характеристика по питанию:
   • Ток потребления индикатором ~2мА.
   • Потребление подсветкой ~310 - 315мА при номинале резистора R2 1.5Ом ( по схеме ).


На этом первую часть закончили и в следующей поговорим о программировании...

Категория: Cтатьи | Добавил: Автор (03.05.2010)
Просмотров: 41052 | Комментарии: 27 | Теги: управление дисплеем, подключение дисплея, Neotec NT7108, шина данных, дисплей, команды дисплея, WG12864B, архитектура дисплея | Рейтинг: 5.0/3
Всего комментариев: 261 2 »
1 unknown  
0
Отличная статья smile

2 Shum  
0
Спасибо автору!!!!

3 AVR_щик  
0
Огромное спасибо автору. Собираюсь строить один довольно сложный проект с интерактивным меню. Думаю статья очень пригодится.

4 Автор  
0
Спасибо! Очень приятно happy
Интерактивное меню - это с использованием сенсорной плёнки?

5 AVR_щик  
0
Интерактивное меню - это с использованием сенсорной плёнки?
Именно!

6 ilvz  
0
"Пробовал множество манипуляций с функциями вывода символа и строки, но так истинна и не открылась, поэтому остановился с размерами 7х6. С массивом 7х6 все получалось отлично( да и какая разница, текст выводится в полнее исправно ):"

ИМХО. Нужно перед символом или после символа (в зависимости от алгоритма) выводить байт заполнитель 0x 00 или 0xFF, и это сэкономит один байт на символ. Иногда они (байты эти) ох как нужны.


7 vitiv  
0
У меня индикатор WG12864B-NGG-VN и кварц 12 Мгц. Попробовал прошить той прошивкой где выводит на экран- LED.
Бегут по экрану горизонтальные чуть светлые полосы и все. ((( Не тот индикатор, или кварц?

8 Belopolyy  
0
Поделитесь даташитош на WG12864B-YGH-N#N. Подключал ли кто этот дисплей к ПК через LPT порт?

9 Автор  
0
Пишите адрес mail!

10 Александр  
0
vitiv,
>>Бегут по экрану горизонтальные чуть светлые полосы и все.

Аналогичная проблема. Правда не с этой прошивкой и схемой.
Оказалось что само стекло на индикаторе собрано неправильно. Решение - снять металлическую рамку и перевернуть стекло на 180 градусов
Китайцы отличились happy


11 Александр  
0
Индикатор кстати WG12864B-YGH-N#N
При подключении не забудьте про контраст. На этом дисплее отсутствует источник отрицательного напряжения!

12 bonix  
0
а можно в этом дисплее шрифт увеличить, к примеру не одну строку по высоте использовать а две (хотябы)
и сильно ли геморно это будет сделать? и каким путем, программно все рисовать или есть поддержка аппаратная дисплеем? (например изменить шрифт или еще что...) dry

1-10 11-19
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]