Рис.1 ЖКИ на базе контроллера HD44780
По отношению к обыкновенным 7-сегментным, ЖКИ модули на базе контроллера HD44780 обладают на порядок большими возможностями. Количество строк на экране у разных моделей — 1,2 или 4; число символов в строке: 8,10,16,20,24,30,32 или 40. Каждое знакоместо на дисплее представляет собой матрицу размером 5×8 точек. Индикатор может иметь светодиодную или люминесцентную подсветку практически любого цвета свечения. На рис.1 показан внешний вид модуля A162-D фирмы Ampire с разрешением 16 символов x 2 строки. Напряжение питания контроллера HD44780 5В (реже 3В). Ток потребления контроллера очень мал(100…200 мкА), чего не скажешь о светодиодной подсветке. В зависимости от производителя, его величина составляет 80…120 мА. Для работы некоторых типов ЖКИ может потребоваться дополнительный источник напряжения отрицательной полярности. Технология производства модулей подобного рода непрерывно совершенствуется, что, в целом, положительно сказывается на их размерах и электрических характеристиках.
Рис.2 Таблица символов CGRAM
Изначально HD44780 имеет предопределенную таблицу символов, размещенную в ОЗУ знакогенератора CGRAM (Character Generator RAM). Для отображения любого из них программа микроконтроллера должна передать координаты позиции и, непосредственно за ними, сам адрес символа из CGRAM. Пример таблицы CGRAM приведен на рис.2. Заглавные и прописные буквы латинского алфавита, числовые знаки, а также большинство знаков препинания совпадают в ней с кодами ASCII. Набор символов, размещенных по адресам 0xA0…0xFF, содержит национальный алфавит (в данном случае кириллицу) того региона, где предполагается его использование. Первые 16 ячеек CGRAM имеют особое значение. При желании, в них могут быть записаны любые пользовательские символы, которых нет таблице (сразу после включения модуля в них находится случайная информация). Упростить преобразование строки, состоящей из букв русского и английского алфавитов, в набор кодов HD44780, можно с помощью утилиты "HD44780" (внешний вид на рис.3). Все, что делает эта программа – приводит в соответствие набор введенных символов с их отображением в таблице CGRAM. Результатом преобразования является набор байтов (с нулевым значением в конце), начинающихся с директивы резервирования FLASH-памяти программ .db.
Рис.3 Утилита HD44780
Нумерация и Функциональное назначение выводов ЖКИ приведены в табл.1. Кроме напряжения питания контроллера VCC, модуль имеет вход регулировки контрастности изображения V0. Питание подсветки (если таковая имеется) подается на выводы A и K.
Рис.4 Последовательность передачи данных в HD44780
а — по 8-разрядной шине команд/данных
б — по 4-разрядной шине команд/данных
HD44780 взаимодействует с AVR через 8-битную двунаправленную шину команд/данных DB7:DB0. Временная диаграмма работы шины показана на рис.4а. В момент записи информации в ЖКИ ведущий микроконтроллер выставляет на линиях DB7…DB0 8-разрядный код, после чего формирует на выводе E стробирующий импульс (активный фронт – задний). По окончанию импульса должна быть выдержана пауза до начала новой транзакции. Признаком записи команды/ данных является состояние линии RS. При RS=0 происходит запись команды, при RS=1 – данных. Когда необходимо считать данные из индикатора, то выводы порта DB7:DB0 микроконтроллера настраиваются на ввод. Затем следует импульс подтверждения на линии E и байт данных переписывается во внутренний регистр для дальнейшей обработки. Направление передачи данных определяет уровень на линии R/W (R/W =1 – чтение из индикатора, R/W =0 – запись в индикатор). В реальных приложениях, как правило, нет необходимости в чтении данных. Поэтому вывод R/W всегда соединяют с общим проводом. Схема подключения AVR к A162-D приведена на рис.5a.
Рис.5 Схема подключения символьного ЖКИ к микроконтроллеру
а — при использовании 8-разрядной шины команд/данных
б — при использовании 4-разрядной шины команд/данных
Для управления ЖКИ может быть использован также 4-проводный интерфейс (см. схему подключения на рис.5б), что позволяет сэкономить 4 линии ввода-вывода, при незначительном усложнении программы.
Табл.1. Функциональное назначение выводов символьного ЖКИ на базе D44780:
Номер вывода
Название выводов
Функциональное назначение
Напряжение управления контрастностью
Выбор записи команды/данные
Выбор направления передачи данных запись/чтение
Вход тактовых импульсов
Анод светодиодной подсветки
Катод светодиодной подсветки
Табл.2а. Команды записи в HD44780:
Состояние линий, при R/W=0
Максимальное
время
выполнения,
мкс
Полная отчистка дисплея и установка курсора в нулевую позицию.
Установка курсора в нулевую позицию. Установка дисплея в начальное положение.
I/D(Increment/Decrement) — направление сдвига курсора после записи (I/D=1 — сдвиг вправо, I/D=0 – сдвиг влево). S(Shift) – разрешение сдвига дисплея вместе с курсором (S=1 — сдвиг разрешен, S=0 — сдвиг запрещен).
D(Display) – включение дисплея (D=1 — дисплей включен, D=0 — дисплей отключен). C(Cursor)- видимость курсора (C=1 – видимый курсор, C=0 – погашенный курсор). B(Blink) — мигание курсора (B=1 – курсор мигает, B=0 – курсор не мигает).
S/C(Screen/Cursor) – перемещение дисплея/курсора (S/C=1 – перемещается дисплей, S/C=0 – перемещается курсор). R/L(Right/Left)- направление перемещения дисплея/курсора (R/L=1 – перемещение вправо, R/L=0 – перемещение влево).
DL(Data Length) – разрядность шины данных (DL=1 – 8 бит, DL=0 – 4 бита). N(Number)- число строк дисплея (N=1 – 2 строки, N=0 – 1 строка). F(Font) – размер шрифта (F=1 – шрифт 5×10 точек, F=0 – шрифт 5×7 точек).
Установка адреса CGRAM (Character Generator RAM). После команды должны следовать данные для записи/чтения в/из CGRAM.
Установка адреса DDRAM (Display Data RAM). После команды должны следовать данные для записи/чтения в/из DDRAM.
Запись данных в DDRAM (Display Data RAM) или CGRAM (Character Generator RAM).
Табл.2б. Команды чтения из HD44780:
Состояние линий, при R/W=1
Максимальное время выполнения, мкс
Чтение BF (Busy Flag) – флаг завершения операции (BF=1 – операция завершена, BF=0 – операция не завершена) и текущего состояния внутреннего счетчика адреса AC (Address Counter).
Чтение данных из DDRAM (Display Data RAM) или CGRAM (Character Generator RAM).
В этом случае 4-разрядную шину команд/данных формируют линии DB7…DB4 (линии DB3…DB0 остаются незадействованными). Скорость записи снижается в 2 раза, но это, обычно, не вызывает ни каких проблем во время работы. Последовательность передачи данных показана на рис.4б. Команды/ данные передается за два такта. Первым следует старший полубайт, вторым – младший. Каждая тетрада, естественно, должна быть зафиксирована импульсом на линии E.
Рис.6 Адреса ячеек видеопамяти DDRAM
Контроллер HD44780 имеет буфер видеопамяти DDRAM (Display Data RAM), из которой символы переносятся на дисплей. Объем DDRAM зависит от числа строк и позиций на экране. Для индикатора с разрешением 16 символов x 2 строки он составляет 40 б на каждую строку (см.рис.6). Адреса ячеек видеопамяти первой строки 0x80…0xA8, второй 0xC0…0xE8. В текущий момент времени в окно дисплея попадают только 16 символов из DDRAM (положение окна можно изменять программно).
Управляющие команды записи сведены в табл.2а. Запись команды с кодом 0x01 приводит к полной отчистки DDRAM и установке окна дисплея и курсора в начальные позиции. Команда 0x02 заставляет проделать те же самые действия, но при этом оставляет содержимое видеопамяти неизменным. Биты команды под номером 3 задают направление смещение курсора (I/D=1 — сдвиг вправо, I/D=0 – сдвиг влево) и разрешение сдвига дисплея (S=1 — сдвиг разрешен, S=0 — сдвиг запрещен) при вводе очередного символа. Биты команды 4 отвечают за режим отображения курсора (B=1 – курсор мигает, B=0 – курсор не мигает; C=1 – видимый курсор, C=0 – погашенный курсор) и работу экрана (D=1 — дисплей включен, D=0 — дисплей отключен). Команду 5 удобно использовать для реализации бегущей строки. С ее помощью можно принудительно перемещать дисплей или курсор (S/C=1 – перемещается дисплей, S/C=0 – перемещается курсор), в произвольном направлении (R/L=1 – перемещение вправо, R/L=0 – перемещение влево). Содержимое DDRAM, в этом случае, остается неизменным. Команда 6 используется только во время начальной инициализации модуля. Она задает тип интерфейса (DL=1 – 8-проводной, DL=0 – 4-проводной), число строк дисплея (N=1 – 2 строки, N=0 – 1 строка) и размер шрифта (F=1 – шрифт 5×10 точек(не используется), F=0 – 5×7 точек).
Рис.7 Пользовательские символы в таблице CGRAM
Команды 7 и 8 предназначены для установки текущего адреса в CGRAM и DDRAM, соответственно, и могут быть использованы только совместно с командой записи данных 9 (либо с командой чтения 2, из табл.2б, о чем будет сказано ниже). После установки курсора в памяти DDRAM, команда 9 должна передавать адрес символа(0…0xFF) из таблицы CGRAM для его отображения в соответствующей позиции.
Комбинация команд 7 и 9 необходима при программирования пользовательских символов в CGRAM по адресам 0…0x0F. Для записи каждого символа потребуется 8 б памяти микроконтроллера. Полезную информацию будут нести в себе только 5 младших разрядов, соответствующих 5-ти столбцам матрицы (см. рис.7). Логической единице соответствует видимая точка на дисплее.
После установки адреса в ОЗУ знакогенератора, должен следовать 8-байтовый блок данных. Возможна запись нескольких символов подряд. Так, например, чтобы запрограммировать все 16 символов, нужно передать команду 0x40 (установить нулевой адрес в CGRAM), а за ней 16*8 = 128 б данных.
Команды чтения из индикатора приведены в табл.2б. С помощью первой команды может быть считано текущее содержимое счетчика адреса AC в DDRAM и состояние флага завершения операции BF (при BF=1 операция чтения/записи завершена). Команда 2 должна следовать после команды записи 7 или 8 из табл.2а и позволяет считать символы размещенные в CGRAM либо DDRAM.
Как уже говорилось выше, команды чтения не имеют никакой практической ценности. Интерес может представлять только флаг BF. Однако намного удобней программно формировать задержки времени, гарантирующие завершение операций чтения/записи, чем постоянно опрашивать состояние флага окончания операции. Необходимость использования линии R/W при этом также отпадает.
Набор подпрограмм для работы с символьным ЖКИ приведен выше. Подпрограммы write_com, write_dat производят запись команд и данных соответственно. Подпрограмма show_char выводит символ на экран дисплея; show_string переписывает строку, хранящуюся во FLASH-памяти программ, в DDRAM индикатора. Обе подпрограммы в качестве параметров принимаю начальные координаты записи — строку и столбец. В show_string, кроме этого необходимо передать еще и указатель на строку в регистре ZH:ZL.
Отдельно следует сказать о подпрограмме инициализации hd44780_init, которая должна быть вызвана после подачи напряжения питания на модуль. Только в ней могут возникнуть некоторые проблемы. Последовательность команд в ходе этой процедуры может иметь небольшие различия у индикаторов разных типов. Поэтому необходимо обращаться к технической документации на конкретную модель. Неправильная инициализация, обычно, приводит к полной неработоспособности исправного экземпляра.
Перейти к следующей части: Аналоговый вывод
Рис.1 ЖКИ на базе контроллера HD44780
По отношению к обыкновенным 7-сегментным, ЖКИ модули на базе контроллера HD44780 обладают на порядок большими возможностями. Количество строк на экране у разных моделей — 1,2 или 4; число символов в строке: 8,10,16,20,24,30,32 или 40. Каждое знакоместо на дисплее представляет собой матрицу размером 5×8 точек. Индикатор может иметь светодиодную или люминесцентную подсветку практически любого цвета свечения. На рис.1 показан внешний вид модуля A162-D фирмы Ampire с разрешением 16 символов x 2 строки. Напряжение питания контроллера HD44780 5В (реже 3В). Ток потребления контроллера очень мал(100…200 мкА), чего не скажешь о светодиодной подсветке. В зависимости от производителя, его величина составляет 80…120 мА. Для работы некоторых типов ЖКИ может потребоваться дополнительный источник напряжения отрицательной полярности. Технология производства модулей подобного рода непрерывно совершенствуется, что, в целом, положительно сказывается на их размерах и электрических характеристиках.
Рис.2 Таблица символов CGRAM
Изначально HD44780 имеет предопределенную таблицу символов, размещенную в ОЗУ знакогенератора CGRAM (Character Generator RAM). Для отображения любого из них программа микроконтроллера должна передать координаты позиции и, непосредственно за ними, сам адрес символа из CGRAM. Пример таблицы CGRAM приведен на рис.2. Заглавные и прописные буквы латинского алфавита, числовые знаки, а также большинство знаков препинания совпадают в ней с кодами ASCII. Набор символов, размещенных по адресам 0xA0…0xFF, содержит национальный алфавит (в данном случае кириллицу) того региона, где предполагается его использование. Первые 16 ячеек CGRAM имеют особое значение. При желании, в них могут быть записаны любые пользовательские символы, которых нет таблице (сразу после включения модуля в них находится случайная информация). Упростить преобразование строки, состоящей из букв русского и английского алфавитов, в набор кодов HD44780, можно с помощью утилиты "HD44780" (внешний вид на рис.3). Все, что делает эта программа – приводит в соответствие набор введенных символов с их отображением в таблице CGRAM. Результатом преобразования является набор байтов (с нулевым значением в конце), начинающихся с директивы резервирования FLASH-памяти программ .db.
Рис.3 Утилита HD44780
Нумерация и Функциональное назначение выводов ЖКИ приведены в табл.1. Кроме напряжения питания контроллера VCC, модуль имеет вход регулировки контрастности изображения V0. Питание подсветки (если таковая имеется) подается на выводы A и K.
Рис.4 Последовательность передачи данных в HD44780
а — по 8-разрядной шине команд/данных
б — по 4-разрядной шине команд/данных
HD44780 взаимодействует с AVR через 8-битную двунаправленную шину команд/данных DB7:DB0. Временная диаграмма работы шины показана на рис.4а. В момент записи информации в ЖКИ ведущий микроконтроллер выставляет на линиях DB7…DB0 8-разрядный код, после чего формирует на выводе E стробирующий импульс (активный фронт – задний). По окончанию импульса должна быть выдержана пауза до начала новой транзакции. Признаком записи команды/ данных является состояние линии RS. При RS=0 происходит запись команды, при RS=1 – данных. Когда необходимо считать данные из индикатора, то выводы порта DB7:DB0 микроконтроллера настраиваются на ввод. Затем следует импульс подтверждения на линии E и байт данных переписывается во внутренний регистр для дальнейшей обработки. Направление передачи данных определяет уровень на линии R/W (R/W =1 – чтение из индикатора, R/W =0 – запись в индикатор). В реальных приложениях, как правило, нет необходимости в чтении данных. Поэтому вывод R/W всегда соединяют с общим проводом. Схема подключения AVR к A162-D приведена на рис.5a.
Рис.5 Схема подключения символьного ЖКИ к микроконтроллеру
а — при использовании 8-разрядной шины команд/данных
б — при использовании 4-разрядной шины команд/данных
Для управления ЖКИ может быть использован также 4-проводный интерфейс (см. схему подключения на рис.5б), что позволяет сэкономить 4 линии ввода-вывода, при незначительном усложнении программы.
Табл.1. Функциональное назначение выводов символьного ЖКИ на базе D44780:
Номер вывода
Название выводов
Функциональное назначение
Напряжение управления контрастностью
Выбор записи команды/данные
Выбор направления передачи данных запись/чтение
Вход тактовых импульсов
Анод светодиодной подсветки
Катод светодиодной подсветки
Табл.2а. Команды записи в HD44780:
Состояние линий, при R/W=0
Максимальное
время
выполнения,
мкс
Полная отчистка дисплея и установка курсора в нулевую позицию.
Установка курсора в нулевую позицию. Установка дисплея в начальное положение.
I/D(Increment/Decrement) — направление сдвига курсора после записи (I/D=1 — сдвиг вправо, I/D=0 – сдвиг влево). S(Shift) – разрешение сдвига дисплея вместе с курсором (S=1 — сдвиг разрешен, S=0 — сдвиг запрещен).
D(Display) – включение дисплея (D=1 — дисплей включен, D=0 — дисплей отключен). C(Cursor)- видимость курсора (C=1 – видимый курсор, C=0 – погашенный курсор). B(Blink) — мигание курсора (B=1 – курсор мигает, B=0 – курсор не мигает).
S/C(Screen/Cursor) – перемещение дисплея/курсора (S/C=1 – перемещается дисплей, S/C=0 – перемещается курсор). R/L(Right/Left)- направление перемещения дисплея/курсора (R/L=1 – перемещение вправо, R/L=0 – перемещение влево).
DL(Data Length) – разрядность шины данных (DL=1 – 8 бит, DL=0 – 4 бита). N(Number)- число строк дисплея (N=1 – 2 строки, N=0 – 1 строка). F(Font) – размер шрифта (F=1 – шрифт 5×10 точек, F=0 – шрифт 5×7 точек).
Установка адреса CGRAM (Character Generator RAM). После команды должны следовать данные для записи/чтения в/из CGRAM.
Установка адреса DDRAM (Display Data RAM). После команды должны следовать данные для записи/чтения в/из DDRAM.
Запись данных в DDRAM (Display Data RAM) или CGRAM (Character Generator RAM).
Табл.2б. Команды чтения из HD44780:
Состояние линий, при R/W=1
Максимальное время выполнения, мкс
Чтение BF (Busy Flag) – флаг завершения операции (BF=1 – операция завершена, BF=0 – операция не завершена) и текущего состояния внутреннего счетчика адреса AC (Address Counter).
Чтение данных из DDRAM (Display Data RAM) или CGRAM (Character Generator RAM).
В этом случае 4-разрядную шину команд/данных формируют линии DB7…DB4 (линии DB3…DB0 остаются незадействованными). Скорость записи снижается в 2 раза, но это, обычно, не вызывает ни каких проблем во время работы. Последовательность передачи данных показана на рис.4б. Команды/ данные передается за два такта. Первым следует старший полубайт, вторым – младший. Каждая тетрада, естественно, должна быть зафиксирована импульсом на линии E.
Рис.6 Адреса ячеек видеопамяти DDRAM
Контроллер HD44780 имеет буфер видеопамяти DDRAM (Display Data RAM), из которой символы переносятся на дисплей. Объем DDRAM зависит от числа строк и позиций на экране. Для индикатора с разрешением 16 символов x 2 строки он составляет 40 б на каждую строку (см.рис.6). Адреса ячеек видеопамяти первой строки 0x80…0xA8, второй 0xC0…0xE8. В текущий момент времени в окно дисплея попадают только 16 символов из DDRAM (положение окна можно изменять программно).
Управляющие команды записи сведены в табл.2а. Запись команды с кодом 0x01 приводит к полной отчистки DDRAM и установке окна дисплея и курсора в начальные позиции. Команда 0x02 заставляет проделать те же самые действия, но при этом оставляет содержимое видеопамяти неизменным. Биты команды под номером 3 задают направление смещение курсора (I/D=1 — сдвиг вправо, I/D=0 – сдвиг влево) и разрешение сдвига дисплея (S=1 — сдвиг разрешен, S=0 — сдвиг запрещен) при вводе очередного символа. Биты команды 4 отвечают за режим отображения курсора (B=1 – курсор мигает, B=0 – курсор не мигает; C=1 – видимый курсор, C=0 – погашенный курсор) и работу экрана (D=1 — дисплей включен, D=0 — дисплей отключен). Команду 5 удобно использовать для реализации бегущей строки. С ее помощью можно принудительно перемещать дисплей или курсор (S/C=1 – перемещается дисплей, S/C=0 – перемещается курсор), в произвольном направлении (R/L=1 – перемещение вправо, R/L=0 – перемещение влево). Содержимое DDRAM, в этом случае, остается неизменным. Команда 6 используется только во время начальной инициализации модуля. Она задает тип интерфейса (DL=1 – 8-проводной, DL=0 – 4-проводной), число строк дисплея (N=1 – 2 строки, N=0 – 1 строка) и размер шрифта (F=1 – шрифт 5×10 точек(не используется), F=0 – 5×7 точек).
Рис.7 Пользовательские символы в таблице CGRAM
Команды 7 и 8 предназначены для установки текущего адреса в CGRAM и DDRAM, соответственно, и могут быть использованы только совместно с командой записи данных 9 (либо с командой чтения 2, из табл.2б, о чем будет сказано ниже). После установки курсора в памяти DDRAM, команда 9 должна передавать адрес символа(0…0xFF) из таблицы CGRAM для его отображения в соответствующей позиции.
Комбинация команд 7 и 9 необходима при программирования пользовательских символов в CGRAM по адресам 0…0x0F. Для записи каждого символа потребуется 8 б памяти микроконтроллера. Полезную информацию будут нести в себе только 5 младших разрядов, соответствующих 5-ти столбцам матрицы (см. рис.7). Логической единице соответствует видимая точка на дисплее.
После установки адреса в ОЗУ знакогенератора, должен следовать 8-байтовый блок данных. Возможна запись нескольких символов подряд. Так, например, чтобы запрограммировать все 16 символов, нужно передать команду 0x40 (установить нулевой адрес в CGRAM), а за ней 16*8 = 128 б данных.
Команды чтения из индикатора приведены в табл.2б. С помощью первой команды может быть считано текущее содержимое счетчика адреса AC в DDRAM и состояние флага завершения операции BF (при BF=1 операция чтения/записи завершена). Команда 2 должна следовать после команды записи 7 или 8 из табл.2а и позволяет считать символы размещенные в CGRAM либо DDRAM.
Как уже говорилось выше, команды чтения не имеют никакой практической ценности. Интерес может представлять только флаг BF. Однако намного удобней программно формировать задержки времени, гарантирующие завершение операций чтения/записи, чем постоянно опрашивать состояние флага окончания операции. Необходимость использования линии R/W при этом также отпадает.
Набор подпрограмм для работы с символьным ЖКИ приведен выше. Подпрограммы write_com, write_dat производят запись команд и данных соответственно. Подпрограмма show_char выводит символ на экран дисплея; show_string переписывает строку, хранящуюся во FLASH-памяти программ, в DDRAM индикатора. Обе подпрограммы в качестве параметров принимаю начальные координаты записи — строку и столбец. В show_string, кроме этого необходимо передать еще и указатель на строку в регистре ZH:ZL.
Отдельно следует сказать о подпрограмме инициализации hd44780_init, которая должна быть вызвана после подачи напряжения питания на модуль. Только в ней могут возникнуть некоторые проблемы. Последовательность команд в ходе этой процедуры может иметь небольшие различия у индикаторов разных типов. Поэтому необходимо обращаться к технической документации на конкретную модель. Неправильная инициализация, обычно, приводит к полной неработоспособности исправного экземпляра.
Перейти к следующей части: Аналоговый вывод
Сегодня все чаще для отображения простой символьной информации используют символьные жидкокристаллические индикаторы ЖКИ. О том, как с ними работать мы и поговорим. В этой части статьи, мы детально рассмотрим символьные ЖКИ на базе контроллера HITACHI HD44780 (или совместимым с ним SAMSUNG KS0066). Статья — попытка систематизировать найденную мной информацию при работе с этими ЖКИ.
СОДЕРЖАНИЕ:
1. Символьный ЖКИ с контроллером HD44780 (KS0066). Интерфейс.
2. Набор команд контроллера HD44780.
3. Инициализация ЖКИ.
Содержание
Символьный ЖКИ с контроллером HD44780 (KS0066). Интерфейс
Символьный ЖКИ есть ничем другим, как матрицей из точек, разделенной на строки и поля символов:
Для управления этой матрицей и вывода собственно символов используется специальный контроллер.
HD44780 (и совместимый с ним KS0066) – есть де-факто стандартом на контроллеры монохромных жидкокристаллических знакосинтезирующих дисплеев с параллельным 4-х или 8-битным интерфейсом. На базе этого контроллера выпускается огромное количество моделей с различным конструктивном и разрешением, начиная с 8×1 (восемь символов в одной строке), и заканчивая 40×4 (содержащих два независимых управляющих чипа). Типичная частота работы контроллера – 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 кГц
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», когда хотим узнать, занят ЖКИ или нет).
Возможно, вам это будет интересно:
Постоянная ссылка на это сообщение: http://meandr.org/archives/19366
- Egor к 10.08.2015 в 12:31
- #
- Войдите, чтобы ответить
У меня возникла такая проблема. Можете подсказать?
Символы по адресам xxxx xx00 — xxxx xx11 воспринимаются как xxxx xx01
Что это может быть?
Мой дисплей WEH001602AGPP5N00001
Плата stm32f103
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
«>





