Инициализация при включении ЖК-модуля HD44780

10

Я использую клон HD44780 ЖК-модуль KS0066U. На модуле все работает нормально, кроме случаев, когда я быстро включаю и выключаю устройство (вкл. -> выкл. -> вкл.). По какой-то причине очень короткое прерывание питания приводит к неправильной инициализации модуля дисплея в виде однострочного ЖК-дисплея вместо двухстрочного ЖК-дисплея. Что вызвало бы такое поведение? Есть ли способ предотвратить это в программном обеспечении?

РЕДАКТИРОВАТЬ: я использую контроллер дисплея в 4-битном режиме, а не 8-битном режиме.

mjh2007
источник
Кажется, никто не подумал, что ваш вопрос стоит голосовать, довольно странно.
Кортук
Таблицы для некоторых клонов HD44780 написаны довольно плохо. Моя цель состояла в том, чтобы начать разговор о том, как правильно их инициализировать. Возможно, я единственный, у кого были проблемы с их использованием в 4-битном режиме.
mjh2007 22.10.10
Нет, сейчас я испытываю ту же проблему, работая в 4-битном режиме. Прошло около 15 лет с тех пор, как я последний раз программировал простой символьный ЖК-дисплей, и я помню, что отлаживать его, когда я учился в школе, было настоящей болью. Я не так далеко, как вы - я не могу даже правильно инициализировать, потому что пока не могу отобразить ни одного символа. :)
Дейв

Ответы:

4

Я изменил свой код инициализации так, чтобы он дважды отправлял верхний 4-битный фрагмент команды набора функций. После чего я негодую на верхний 4-битный полубайт, за которым следует нижний 4-битный полубайт. Это не соответствует таблице данных, которая, по-видимому, указывает на то, что вы можете отправить верхний 4-битный полубайт, а затем отправить команду набора функций в верхний 4-битный, а затем в нижний 4-битный.

// иногда работает псевдокод
port = 0x20;
е = 1; е = 0;
Порт = 0x20;
е = 1; е = 0;
Порт = 0xC0;
е = 1; е = 0;

// работает все время псевдокод
port = 0x20;
е = 1; е = 0;
е = 1; е = 0;
Порт = 0x20;
е = 1; е = 0;
Порт = 0xC0;
е = 1; е = 0;

mjh2007
источник
2

Я предполагаю, что вы пропустили необходимую задержку в последовательности инициализации. Если при попытке отправить команду дисплей занят, эта команда будет проигнорирована. Если при запуске процедуры дисплей находится в четырехбитном режиме и только что «0000» был включен в качестве первой половины команды, то при установке значения «0011» на дисплее вся команда будет отображаться как «00000011». , что приведет к тому, что дисплей будет занят до 1,6 мс.

Между прочим, хорошо, если это возможно, соединить провода данных младшего разряда с дисплея таким образом, чтобы при отправке на дисплей команды «0011» целые 8 бит, видимые дисплеем, сформировали команду установки режима. это правильно для типа дисплея, который вы используете. Это поможет избежать любых сбоев дисплея при сбросе дисплея, который уже используется (рекомендуется периодически сбрасывать дисплей, если это можно сделать без сбоев, поскольку он гарантирует, что если дисплей каким-либо образом перейдет в плохой режим, он исправит сам).

Supercat
источник
1

Я нашел решение этой проблемы:

Я добавил задержку 1000 миллисекунд при запуске, перед инициализацией / настройкой контроллера ЖКД. Это сработало очень хорошо для меня.

Более низкая задержка (100, 200 мс) не сработала так хорошо. Только примечание: это произошло только в 4-битной базе данных.

Удачи!

Эдуардо Брандт
источник
0

Вставка задержки в ваш код, чтобы при включении он давал ЖК-дисплею достаточно времени для инициализации при запуске. Максимум несколько сотен миллисекунд.

Вы также можете попробовать подключить питание ЖК-дисплея к микроконтроллеру и отключить ЖК-дисплей на секунду после запуска.

Томас О
источник
Уже есть задержка 100 мс при запуске
mjh2007 20.10.10
Попробуйте мое другое предложение тогда. Вы даже можете напрямую управлять питанием ЖК-дисплея от булавки; это не должно нарисовать больше, чем несколько мА.
Томас О
действительно ли есть максимально допустимая задержка? Я думал, что главное с этими жидкокристаллическими дисплеями в том, что вы ждете минимальное количество, но если вы не можете определить правильное время, вы можете проигнорировать его и просто подождать дольше.
Дейв
@ Дэйв, возможно, вы неверно истолковали «максимальную задержку», я бы порекомендовал просто разумную задержку. Например, ожидание нескольких часов было бы немного экстремальным ...
Томас О
ЛОЛ! Ну, я подумал, что это то, что вы имели в виду, но я хотел убедиться, что я ничего не пропустил, так как мне еще предстоит инициализировать мой ЖК-дисплей. Интересно, должен ли я пойти и схватить горшок, чтобы убедиться, что это не тот контраст, который меня здесь бесит. :)
Дейв
0

Не уверен, поможет ли это ВСЕМ, но я испортил KS0066U в проекте Arduino. Вот ссылка .

ThaKidd KG5ORD
источник