Работа с ЖКИ на контроллере HD44780 и его аналогах

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Roman Venom »

Мля, это пипец а не код. Где хотя бы комменты?

Ну основные комменты вроде есть... А так каждая секция инициализаци подписана как в даташите.
Могу посоветовать давать самую первую команду на инициализацию два раза (с паузой, естессно). Мне помогло.

Ок, попробую.
Успех - императив!
Аватара пользователя
Old Grumble
Открыл глаза
Сообщения: 53
Зарегистрирован: Вс июн 14, 2009 21:36:46
Откуда: Кап.Яр-1 Астраханская обл.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Old Grumble »

Несколько слов о процессе инициализации ЖКИ-модуля. Производитель контроллера рекомендует выполнять следующую последовательность действий для инициализации. Выдержать паузу не менее 15 мс между установлением рабочего напряжения питания (> 4,5 В) и выполнением каких-либо операций с контроллером. Первой операцией выполнить команду, выбирающую разрядность шины (это должна быть команда $30 независимо от того, какой разрядности интерфейс вы собираетесь использовать в дальнейшем), причем перед выполнением этой операции не проверять значение флага BF. Далее опять выдержать паузу не менее 4,1 мс и повторить команду выбора разрядности шины, причем перед подачей команды вновь не производить проверку флага BF. Следующим шагом необходимо вновь выдержать паузу, на этот раз 100 мкс, и в третий раз повторить команду установления разрядности шины, вновь без проверки BF. Эти три операции являются инициализирующими и призваны вывести контроллер в исходный режим работы (то есть перевести в режим работы с 8-ми разрядной шиной) из любого состояния. Следом за ними нормальным порядком (без выдерживания пауз, но с проверкой флага BF) выполняется инициализация режимов работы с выдачей инициализирующей последовательности, аналогичной указанной в таблице 7 (содержащей в том числе команду выбора необходимой разрядности шины).

Таблица 7. Флаги, управляющие работой контроллера HD44780
I/D: режим смещения счетчика адреса АС, 0 - уменьшение, 1 - увеличение.
S: флаг режима сдвига содержимого экрана. 0 - сдвиг экрана не производится, 1 - после записи в DDRAM очередного кода экран сдвигается в направлении, определяемым флагом I/D: 0 - вправо, 1 - влево. При сдвиге не производится изменение содержимого DDRAM. изменяются только внутренние указатели расположения видимого начала строки в DDRAM.
S/C: флаг-команда, производящая вместе с флагом R/L операцию сдвига
содержимого экрана (так же, как и в предыдущем случае, без изменений в DDRAM) или курсора. Определяет объект смещения: 0 - сдвигается курсор, 1 - сдвигается экран.
R/L: флаг-команда, производящая вместе с флагом S/C операцию сдвига экрана или курсора. Уточняет направление сдвига: 0 - влево, 1 - вправо.
D/L: флаг, определяющий ширину шины данных: 0 - 4 разряда, 1 - 8 разрядов.
N: режим развертки изображения на ЖКИ: 0 - одна строка, 1 - две строки
F: размер матрицы символов: 0 - 5 х 8 точек, 1 - 5 х 10 точек.
D: наличие изображения: 0 - выключено, 1 - включено
С: курсор в виде подчерка: 0 - выключен, 1 - включен
В: курсор в виде мерцающего знакоместа: 0 - выключен, 1 - включен
«Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Roman Venom »

говорю же. всё делаю по даташиту. прямо по пунктам. ничего своего не выдумываю... Почему не видно мигающего курсора - ХЗ.
Ещё такой вопрос. Надо ли использовать в инициализации линию Е? Вроде это линия разрешения записи, но где описан процесс инициализации там про это ничего не сказано. Не понятно что с ней делать...

Old Grumble
Спасибо что не поленился отписать, но увы... У меня ЖКИ подключё к 2-м портам. Перевёл 0х30 в бинарный код с записал соотв. биты в порты. Нифига. Думаю не тут бок.
Успех - императив!
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Roman Venom »

давайте по порядку.
Зареджка 4мс. Дальше первый этам инициализации по 4-х битному интерфейсу.(см даташит).
;Function set

bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bsf lcd_D,DB7_busy_flag; *2-line mode
bsf lcd_D,DB6; *LCD вкл

Т.е. записали 0011. Остальные биты - нули.
задержка 4мс.

Второй этап.
;Display ON/OFF control
bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bsf lcd_D,DB7_busy_flag; *bit set
bsf lcd_D,DB6; *LCD on вкл ЖКИ
bsf lcd_C,DB5; *cursor on включить курсор
bsf lcd_C,DB4; *blink on
мигание курсора
Т.е. записано 001111. Остальные(ДБ0-ДБ3) не учавствуют. Всегда ноль.

задержка 4мс.

Третий этап.
;Display clear
bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bcf lcd_D,DB7_busy_flag; *bit set
bcf lcd_D,DB6; *bit set
bcf lcd_C,DB5; *bit set
bsf lcd_C,DB4; *bit set


000001

Чётвертый этап.
;Entry Mode Set

bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bcf lcd_D,DB7_busy_flag; *bit set
bsf lcd_D,DB6; *bit set
bcf lcd_C,DB5; *increment mode
bsf lcd_C,DB4; *entire shift on

000111
После этого как я понимаю должен появиться мигающий курсор. Но его нету...
Думаю что дело в линии Е. По ней передаются такты, судя по временной диаграмме из даташита. Вопрос что туда передавать и как.
Успех - императив!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение ibiza11 »

E - Это строб данных. так сказать защелка, если его не передернуть так : _/```\_ после подачи сигналов на входы, то данные не запишутся. естественно Е НУЖНО ИСПОЛЬЗОВАТЬ. как же вы даташит то читаете?! там же даже диаграмма нарисована.
Ставим плюсы: )
Аватара пользователя
Medik88
Родился
Сообщения: 4
Зарегистрирован: Вт янв 12, 2010 22:22:03
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Medik88 »

Здравствуйте. Прошу помочь с проблемой.
Вообщем использую знаковый дисплей Winstar 1604 (4 строки по 16 символов) в связке с AVR ATmega8515. Код пишу в CVAVR 1.25.9.
При попытке использовать функцию lcd_clear; компилятор мне сообщает что "expression with possibly no effect". Долго и упорно использовал поиск, документацию, но нигде подобной проблемы не нашел. Причем компилятор ставит Варнинг на каждую строку, где используется эта функция
скриншот
прикладываю исходник. он пока еще очень абстрактный, просто скелет будущей программы, но рабочий. проблема стоит только в том, что дисплей не очищается.
в остальном дисплей отлично работает.

ps не откажусь от помощи в истолковании последнего варнинга на скриншоте по поводу функции MenuWaite :))
Вложения
меню мк 2.rar
(32.31 КБ) 283 скачивания
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение ARV »

я догадываюсь, что на самом деле то, что я скажу, никому не нинтересно... но удержаться не могу.

вы пишите в коде lcd_clear; - что это означает? если вы думаете, что это означает вызов функции очистки дисплея - вы ошибаетесь! это означает просто "адрес функции очистки дисплея". и скажите мне, компилятор увидел в тексте адрес - и что? что он может еще сделать, кроме как сказать, что это бессмысленная инструкция? вызов функции всегда сопровождается круглыми скобочками, т.е. вот так: lcd_clear();

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

Мой уютный бложик... заходите!
Аватара пользователя
Medik88
Родился
Сообщения: 4
Зарегистрирован: Вт янв 12, 2010 22:22:03
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Medik88 »

спасибо большое :)
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Roman Venom »

короче вот в чём была проблема... Почему-то на РС5(ПИК18Ф4550) при записи в порт высокого было 1.3В :shock:. ЧТо это значит? Только на этмо выходе такое. Я так понимаю, если бы я попалил порт, то там бы не было ничего. Может это какой-то специальный вывод порта С, а я, дурак, не знаю?
Успех - императив!
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Roman Venom »

RC4 и RC5 - это ещё лини данных ЮСБ. Как сделать чтобы они были обычными цифровыми входами/выходами?
Успех - императив!
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Roman Venom »

увы, никак... Они по даташиту только входы :cry:
Успех - императив!
scrappy
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб май 23, 2009 16:30:23
Откуда: Санкт-Петербург
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение scrappy »

уф... замучился я с одним дисплеем.

Помогите пожалуйста написать под него библиотеку для CodeVision, точнее мне не разобраться, как правильно надо инициализировать этот дисплей...

есть даташит на него
http://narod.ru/disk/25643475000/E-M202 ... A.pdf.html
kushman
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение kushman »

Народ, подскажите что я делаю неправильно.

Не получается вывести значение напряжения на ЖКИ МТ16s2d. Сам дисплей нормально работает, выводит все что я его попрошу.
Запускаю АЦП (12 бит) встроенный в контроллер (ADuC812), он успешно генерирует прерывание, пишу вот такую функцию обработки прерывания, но почему то дисплей показывает нуль. Дробную часть я пока и не вывожу, но целую то он должен показывать. На входе АЦП прикошачена батарейка 1.5 В, опорное напряжение АЦП-2.5 В. В чем может быть дело?

В регистрах ADCDATAH и ADCDATAL лежит код сгенерированный АЦП.

void display_voltage(void) interrupt 6 {

unsigned int ADCValue;
unsigned char lcd_buffer[6];
ADCValue = (ADCDATAL + (ADCDATAH&0x0F))<<12;
ADCValue=(ADCValue*2500/4096);
ADCValue=ADCValue/1000;
sprintf (lcd_buffer,"U=%i V", ADCValue);
send_lcd(set_first_line, lcd_buffer);
}
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Gudd-Head »

kushman писал(а):В регистрах ADCDATAH и ADCDATAL лежит код сгенерированный АЦП.

А ещё чем-нибудь вы его (код) можете проверить и убедиться, что АЦП даёт НЕ нули?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
kushman
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение kushman »

Gudd-Head писал(а):
kushman писал(а):В регистрах ADCDATAH и ADCDATAL лежит код сгенерированный АЦП.

А ещё чем-нибудь вы его (код) можете проверить и убедиться, что АЦП даёт НЕ нули?


Нет. По крайней мере я другого способа не знаю :(
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Gudd-Head »

kushman писал(а):Нет. По крайней мере я другого способа не знаю :(

Ну так, может это не дисплей виноват, а АЦП? :wink:
Можно (по кр. мере в AVR) вывести в параллельном коде на какой-нибудь порт.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Old Grumble
Открыл глаза
Сообщения: 53
Зарегистрирован: Вс июн 14, 2009 21:36:46
Откуда: Кап.Яр-1 Астраханская обл.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Old Grumble »

Gudd-Head писал(а):
kushman писал(а):Нет. По крайней мере я другого способа не знаю :(

Ну так, может это не дисплей виноват, а АЦП? :wink:
Можно (по кр. мере в AVR) вывести в параллельном коде на какой-нибудь порт.

А можно и наоборот - запустить преобразование, дождаться конца и вывести константу "123,34" - может в процессе преобразования чего-то заклинивает с интерфейсом,
а может и наоборот - не все сконфигурировано для АЦП
«Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
scrappy
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб май 23, 2009 16:30:23
Откуда: Санкт-Петербург
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение scrappy »

Перечитал все 20 страниц. Так и не понял. Есть ли библиотека для общения с дисплеем по 8-бит? Ибо насколько я понял мой дисплей не понимать 4-бита.
kushman
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение kushman »

Все заработало :) Но есть две проблемы:

1. Если вход АЦП "висит" воздухе, то дисплей показывает значение опорного напряжения. Это в принципе понятно, но иногда наблюдается аномалия: внезапно напряжение начинает падать, а потом снова восстанавливается до 2.5В (опорное напряжение АЦП). Снова держится некоторое время на 2.5В, а потом опять начинает падать. Если подать на АЦП какое либо напряжение, например батарейку 1.5В, то он показывает напряжение батарейки без каких либо сбоев.
Вообщем то это не страшно, главное напряжение измеряет как надо, вот следующая проблема меня волнует гораздо больше:

2. Если сначала подключить батарейку, а потом заземлить вход АЦП, то последние 2 разряда "зависают". То есть в дисплей никакой информации он них не посылается, хотя они должны сброситься в 0. Например, подключаю батарейку, он показывает: 1.578, потом заземляю вход АЦП и дисплей показывает: 0.078. Если же заземлить вход АЦП и нажать ресет, то на дисплее появляется 0.0.

То есть на дисплей не выводятся последние 2 разряда при нулевом напряжении. Как эту проблему исправить?

Вот рабочий код:

void display_voltage(void) interrupt 6 {

unsigned int ADCValue;
ADCValue = ADCDATAL + (ADCDATAH&0x0F)*256;
ADCValue=((long)ADCValue*2500)/4096;
sprintf (lcd_buffer,"U=%d.%d", ADCValue/1000, ADCValue%1000);
send_lcd(set_first_line, lcd_buffer);


}
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Roman Venom »

scrappy
Перечитал все 20 страниц. Так и не понял. Есть ли библиотека для общения с дисплеем по 8-бит? Ибо насколько я понял мой дисплей не понимать 4-бита.

Читайте даташит. Есть и по 8 есть и по 4(собсно отличие незначительно будет в коде.)Если использовать 8-ми битный интерфейс, то ЖКИ работает быстрее:).
Успех - императив!
Ответить

Вернуться в «Периферия»