Я использую клон HD44780 ЖК-модуль KS0066U. На модуле все работает нормально, кроме случаев, когда я быстро включаю и выключаю устройство (вкл. -> выкл. -> вкл.). По какой-то причине очень короткое прерывание питания приводит к неправильной инициализации модуля дисплея в виде однострочного ЖК-дисплея вместо двухстрочного ЖК-дисплея. Что вызвало бы такое поведение? Есть ли способ предотвратить это в программном обеспечении?
РЕДАКТИРОВАТЬ: я использую контроллер дисплея в 4-битном режиме, а не 8-битном режиме.
Ответы:
Я изменил свой код инициализации так, чтобы он дважды отправлял верхний 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;
источник
Я предполагаю, что вы пропустили необходимую задержку в последовательности инициализации. Если при попытке отправить команду дисплей занят, эта команда будет проигнорирована. Если при запуске процедуры дисплей находится в четырехбитном режиме и только что «0000» был включен в качестве первой половины команды, то при установке значения «0011» на дисплее вся команда будет отображаться как «00000011». , что приведет к тому, что дисплей будет занят до 1,6 мс.
Между прочим, хорошо, если это возможно, соединить провода данных младшего разряда с дисплея таким образом, чтобы при отправке на дисплей команды «0011» целые 8 бит, видимые дисплеем, сформировали команду установки режима. это правильно для типа дисплея, который вы используете. Это поможет избежать любых сбоев дисплея при сбросе дисплея, который уже используется (рекомендуется периодически сбрасывать дисплей, если это можно сделать без сбоев, поскольку он гарантирует, что если дисплей каким-либо образом перейдет в плохой режим, он исправит сам).
источник
Я нашел решение этой проблемы:
Я добавил задержку 1000 миллисекунд при запуске, перед инициализацией / настройкой контроллера ЖКД. Это сработало очень хорошо для меня.
Более низкая задержка (100, 200 мс) не сработала так хорошо. Только примечание: это произошло только в 4-битной базе данных.
Удачи!
источник
Вставка задержки в ваш код, чтобы при включении он давал ЖК-дисплею достаточно времени для инициализации при запуске. Максимум несколько сотен миллисекунд.
Вы также можете попробовать подключить питание ЖК-дисплея к микроконтроллеру и отключить ЖК-дисплей на секунду после запуска.
источник
Не уверен, поможет ли это ВСЕМ, но я испортил KS0066U в проекте Arduino. Вот ссылка .
источник