Несколько слов о процессе инициализации ЖКИ-модуля. Производитель контроллера рекомендует выполнять следующую последовательность действий для инициализации. Выдержать паузу не менее 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
говорю же. всё делаю по даташиту. прямо по пунктам. ничего своего не выдумываю... Почему не видно мигающего курсора - ХЗ. Ещё такой вопрос. Надо ли использовать в инициализации линию Е? Вроде это линия разрешения записи, но где описан процесс инициализации там про это ничего не сказано. Не понятно что с ней делать...
Old Grumble Спасибо что не поленился отписать, но увы... У меня ЖКИ подключё к 2-м портам. Перевёл 0х30 в бинарный код с записал соотв. биты в порты. Нифига. Думаю не тут бок.
давайте по порядку. Зареджка 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 После этого как я понимаю должен появиться мигающий курсор. Но его нету... Думаю что дело в линии Е. По ней передаются такты, судя по временной диаграмме из даташита. Вопрос что туда передавать и как.
E - Это строб данных. так сказать защелка, если его не передернуть так : _/```\_ после подачи сигналов на входы, то данные не запишутся. естественно Е НУЖНО ИСПОЛЬЗОВАТЬ. как же вы даташит то читаете?! там же даже диаграмма нарисована.
Здравствуйте. Прошу помочь с проблемой. Вообщем использую знаковый дисплей Winstar 1604 (4 строки по 16 символов) в связке с AVR ATmega8515. Код пишу в CVAVR 1.25.9. При попытке использовать функцию lcd_clear; компилятор мне сообщает что "expression with possibly no effect". Долго и упорно использовал поиск, документацию, но нигде подобной проблемы не нашел. Причем компилятор ставит Варнинг на каждую строку, где используется эта функция скриншот прикладываю исходник. он пока еще очень абстрактный, просто скелет будущей программы, но рабочий. проблема стоит только в том, что дисплей не очищается. в остальном дисплей отлично работает.
ps не откажусь от помощи в истолковании последнего варнинга на скриншоте по поводу функции MenuWaite
я догадываюсь, что на самом деле то, что я скажу, никому не нинтересно... но удержаться не могу.
вы пишите в коде lcd_clear; - что это означает? если вы думаете, что это означает вызов функции очистки дисплея - вы ошибаетесь! это означает просто "адрес функции очистки дисплея". и скажите мне, компилятор увидел в тексте адрес - и что? что он может еще сделать, кроме как сказать, что это бессмысленная инструкция? вызов функции всегда сопровождается круглыми скобочками, т.е. вот так: lcd_clear();
то есть как обычно, я советую начинать с изучения Си...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
короче вот в чём была проблема... Почему-то на РС5(ПИК18Ф4550) при записи в порт высокого было 1.3В . ЧТо это значит? Только на этмо выходе такое. Я так понимаю, если бы я попалил порт, то там бы не было ничего. Может это какой-то специальный вывод порта С, а я, дурак, не знаю?
Не получается вывести значение напряжения на ЖКИ МТ16s2d. Сам дисплей нормально работает, выводит все что я его попрошу. Запускаю АЦП (12 бит) встроенный в контроллер (ADuC812), он успешно генерирует прерывание, пишу вот такую функцию обработки прерывания, но почему то дисплей показывает нуль. Дробную часть я пока и не вывожу, но целую то он должен показывать. На входе АЦП прикошачена батарейка 1.5 В, опорное напряжение АЦП-2.5 В. В чем может быть дело?
В регистрах ADCDATAH и ADCDATAL лежит код сгенерированный АЦП.
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн окт 04, 2010 19:47:31
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19758 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
kushman писал(а):
В регистрах ADCDATAH и ADCDATAL лежит код сгенерированный АЦП.
А ещё чем-нибудь вы его (код) можете проверить и убедиться, что АЦП даёт НЕ нули?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн окт 04, 2010 22:38:49
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19758 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
kushman писал(а):
Нет. По крайней мере я другого способа не знаю
Ну так, может это не дисплей виноват, а АЦП? Можно (по кр. мере в AVR) вывести в параллельном коде на какой-нибудь порт.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Ну так, может это не дисплей виноват, а АЦП? Можно (по кр. мере в AVR) вывести в параллельном коде на какой-нибудь порт.
А можно и наоборот - запустить преобразование, дождаться конца и вывести константу "123,34" - может в процессе преобразования чего-то заклинивает с интерфейсом, а может и наоборот - не все сконфигурировано для АЦП
_________________ «Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
1. Если вход АЦП "висит" воздухе, то дисплей показывает значение опорного напряжения. Это в принципе понятно, но иногда наблюдается аномалия: внезапно напряжение начинает падать, а потом снова восстанавливается до 2.5В (опорное напряжение АЦП). Снова держится некоторое время на 2.5В, а потом опять начинает падать. Если подать на АЦП какое либо напряжение, например батарейку 1.5В, то он показывает напряжение батарейки без каких либо сбоев. Вообщем то это не страшно, главное напряжение измеряет как надо, вот следующая проблема меня волнует гораздо больше:
2. Если сначала подключить батарейку, а потом заземлить вход АЦП, то последние 2 разряда "зависают". То есть в дисплей никакой информации он них не посылается, хотя они должны сброситься в 0. Например, подключаю батарейку, он показывает: 1.578, потом заземляю вход АЦП и дисплей показывает: 0.078. Если же заземлить вход АЦП и нажать ресет, то на дисплее появляется 0.0.
То есть на дисплей не выводятся последние 2 разряда при нулевом напряжении. Как эту проблему исправить?
Перечитал все 20 страниц. Так и не понял. Есть ли библиотека для общения с дисплеем по 8-бит? Ибо насколько я понял мой дисплей не понимать 4-бита.
Читайте даташит. Есть и по 8 есть и по 4(собсно отличие незначительно будет в коде.)Если использовать 8-ми битный интерфейс, то ЖКИ работает быстрее:).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения