Микросхема Hd44780 4 На 20 С Драйверами
Помогите, пожалуйста, разобраться с логикой работы этого устройства. Целый день курю даташит и поиск, но что-то безрезультатно. В алгоритме в начале три раза повторяется одна и таже команда через разные интервалы задержек: 1) ждём 15мс 2) 00110000 3) ждём 4.1мс 4) 00110000 5) ждём 100мкс 6) 00110000. Это значит, что после 15мс задержки на нужные выводы нужно подать 00110000, а потом произвести задержку временем 4.1мс+ 100мкс. Или же всётаки нужно ещё какие-то манипуляции произвести между командами?
Общепринятое название таких микросхем 'Dot Matrix Liquid Crystal Display Controller/Driver', из чего следует их двойная функция - контроллер управляет интерфейсом, а драйвер 'зажигает' сегменты. Контроллер синхронизируется внутренним RC-генератором G1, имеющим частоту 250 ±50 кГц.. А как бы выглядела табличка 'распределения адресов' (рис.4) только для 4х(4на20) строчного дисплея. На этом рисунке показаны команды, т.е если адрес знакоместа 0x00, то для перехода на этот адрес команда будет 0x00+0x80 = 0x80, если адрес 0x40, то команда будет 0x40+0x80=0xC0. Сообщить модератору. 0 #37 ivanovevgenij02 03:55. #define MAX_DISP_ROWS 2 // The HD44780 supports up to 4 rows #. Драйвера, но с наскока. На HD44780 нормально.
Что нужно подавать на вывод E во время инициализации? Помогите, пожалуйста, разобраться с логикой работы этого устройства. Целый день курю даташит и поиск, но что-то безрезультатно. В алгоритме в начале три раза повторяется одна и таже команда через разные интервалы задержек: 1) ждём 15мс 2) 00110000 3) ждём 4.1мс 4) 00110000 5) ждём 100мкс 6) 00110000. Это значит, что после 15мс задержки на нужные выводы нужно подать 00110000, а потом произвести задержку временем 4.1мс+ 100мкс.
Или же всётаки нужно ещё какие-то манипуляции произвести между командами? Что нужно подавать на вывод E во время инициализации? Ну индикатор обычный 2 строки по 16 символов. Например который в протеусе. Попробую сформулировать вопрос более конкретно: Ну вот при алгоритме инициализации из даташита сказано нужно подождать пока установится питание. Не вопрос, ждём 15мс.
Дальше на выводы, D5 D4 нужно подать по еденице, подали идём дальше. Сказано ждать 4.1мс и опять подать еденицы на D5, D4. Итак далее по алгоритму Так вот вопрос в том после того как я подам первый раз еденицы на D5, D4 нужно ли ещё что-то делать или просто нужно выждать 4.1 мс? Ну индикатор обычный 2 строки по 16 символов. Например который в протеусе. Попробую сформулировать вопрос более конкретно: Ну вот при алгоритме инициализации из даташита сказано нужно подождать пока установится питание. Не вопрос, ждём 15мс.
Дальше на выводы, D5 D4 нужно подать по еденице, подали идём дальше. Сказано ждать 4.1мс и опять подать еденицы на D5, D4. Итак далее по алгоритму Так вот вопрос в том после того как я подам первый раз еденицы на D5, D4 нужно ли ещё что-то делать или просто нужно выждать 4.1 мс? Тебе же ссылку дали. Там всё подробно и побитно расписано, более подробно просто не придумаешь, всё отлично разжёвано. Тебе же ссылку дали. Там всё подробно и побитно расписано, более подробно просто не придумаешь, всё отлично разжёвано.
Цитирую, что в ссылке прочитал: Первой операцией выполнить команду, выбирающую разрядность шины (это должна быть команда $30 независимо от того, какой разрядности интерфейс вы собираетесь использовать в дальнейшем), причем перед выполнением этой операции не проверять значение флага BF. Далее опять выдержать паузу не менее 4,1 мс и повторить команду выбора разрядности шины, причем перед подачей команды вновь не производить проверку флага BF. Следующим шагом необходимо вновь выдержать паузу, на этот раз 100 мкс, и в третий раз повторить команду установления разрядности шины, вновь без проверки BF. Эти три операции являются инициализирующими и призваны вывести контроллер в исходный режим работы (то есть перевести в режим работы с 8-ми разрядной шиной) из любого состояния. Следом за ними нормальным порядком (без выдерживания пауз, но с проверкой флага BF) выполняется инициализация режимов работы с выдачей инициализирующей последовательности, аналогичной указанной в таблице 7 (содержащей в том числе команду выбора необходимой разрядности шины). Но тут не хватает того, что я спрашиваю, что делать между коммандами? Что значит повторить комманду если я эти еденицы никуда не убирал?
Явно есть какоето действие тут не описанное. Ну индикатор обычный 2 строки по 16 символов. Например который в протеусе. Попробую сформулировать вопрос более конкретно: Ну вот при алгоритме инициализации из даташита сказано нужно подождать пока установится питание. Не вопрос, ждём 15мс.
Дальше на выводы, D5 D4 нужно подать по еденице, подали идём дальше. Сказано ждать 4.1мс и опять подать еденицы на D5, D4. Итак далее по алгоритму Так вот вопрос в том после того как я подам первый раз еденицы на D5, D4 нужно ли ещё что-то делать или просто нужно выждать 4.1 мс?
Посмотри в даташите, рисунки с уровнями сигналов на ногах, особенно на ноге Е и всё поймёшь. D0-d7 могут быть какие угодно, всё определяется последовательностью уровней на трёх оставшихся ногах. Я этот строб уже после задержки посылал и ничего не выходило. А линию RS в ноль выставили? RS=0 - режим передачи команд, RS=1 - режим передачи данных.
И линия R/W должна быть в нуле (режим записи). Сходите по ссылке, там всё отлично расписано. Еще можете вместо МК сначала на одних тумблерах всё собрать, только для Е поставьте триггер, чтобы небыло дребезга контактов.
Да, еще, запись данных выполняется при переходе Е из '1' в '0', т.е. Выставили данные на DB0-DB7 (RS=0, R/W=0), перевели Е из '0' в '1' и обратно в '0'. Длительность '1' должна быть не менее 450 нсек. Для надежности сделайте один nop перед возвратом в '0'.
В алгоритме в начале три раза повторяется одна и таже команда через разные интервалы задержек: 1) ждём 15мс 2) 00110000 3) ждём 4.1мс 4) 00110000 5) ждём 100мкс 6) 00110000 А у Вас? Первая задержка 5,215 мсек (если, конечно, кварц на 4 МГц), вторая - 1,162 мсек и третья - 103 мксек (попали).


В сумме ну никак на 15 мсек не тянет. Даже самую первую команду инициализации 00110000 ЖКИ не принимает. На команду 'Очистка индикатора (00000001)' надо отвести хотя бы 2,5 мсек (по даташиту 15.2 мсек), а у Вас 10 мксек. Или читать бит готовности. Но Вам пока что лучше его не трогать, вывод R/W на землю и вперед.
Где строб после вывода команды 'Курсор в начало первой строки (1000 0000)'? Где строб на вывод данных (буквы f)? И, пожалуйста, распишите что и куда Вы подключили, облегчите задачу помогающим. Ну вопервых там две процедуры задержек Delay1 это вложенные циклы. Умножте ff на 1b и получите с учётом циклов 20 мс.
Подключал D0-D7 к PORTB, а RS к RA1, R/W к RA2, E к RA3. Собственно bcf PORTA,03h и есть тот срез по которому работает. Вот про очистку не заметил, брал интервалы от сюда: а там 200мкс А Вы Stopwatch'ем его посмотрите и увидите сколько у Вас получится. Я вот вместо Вашей задержки поставил нормальные 15 мсек и всё заработало. И строб под установку курсора в начало строки и вывод данных на ЖКИ желательно бы оформить так как сделано в п/программе инициализации, а то я его как-то потерял, только потом догнал что строб у Вас есть. Да и задержку в 100 мксек после строба можно туда же вставить.