Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
0 / -1 / 0
Регистрация: 03.04.2017
Сообщений: 63

LCD 1602 инициализация только после Reset

11.04.2017, 15:54. Показов 20342. Ответов 77
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Чрезвычайно удивляет ситуация, которая сложилась у меня с моим девайсом. Требуется совет.

Имею в девайсе экранчик LCD типа 1602 (какой то китайский друг), подключается по 4х битной шине.
Последовательность инициализации коротко:
Настраиваем порт;
Ждем 20 мс;
Разрядность шины = 8 бит ($3);
NOP ($0 - это для случая, если экран был инициализирован под 4-х битную разрядность: переводим обратно в 8-битный режим);
Ждем 4.1 мс;
Разрядность шины = 8 бит ($3);
Ждем 100 мкс;
Разрядность шины = 4 Бит ($2);
Ждем;
Разрядность шины = 4 Бит ($2); + размер символа ($8)
Очистка;
Ждем 5 мс;

Проблема в следующем.
При включении питания экран не инициализируется. Первая строка залита черными квадратами. Если микроконтроллер сбросить, инициализация и вывод на экран проходит в штатном режиме.

Пробовал увеличивать время первоначального ожидания (фактически делал остановку, пока не будет нажата кнопка, выжидал секунды). Пробовал садить RESET контроллера на ноль, после этого подавать питание, немного погодя отпускать RESET - та же история.

Пробовал увеличивать все задержки по максимуму (1,5 мс - строб = 1 - 1,5 мс - строб = 0 - 1,5 мс), не помогает. То, что дисплей после сброса работает четко, наталкивает на мысль, что выдержки я выбрал правильно. Не понятно, почему заводится только после ресета...

P.S. В протеусе всё ОК.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2017, 15:54
Ответы с готовыми решениями:

I2C и LCD 1602
Здравствуйте! тема избитая, но того, что мне надо не нашел сделал массив по которому буду дергать ноги uint8_t TX_Buf = {0x28,...

STM32F030F4 + 74HC595 + 1602 LCD
Приветствую! Пытаюсь осуществить передачу данных на дисплей через сдвиговый регистр, но дисплей не подает признаков жизни (видны знакоместа...

Вывод символов на дисплей LCD 1602
Добрый день! Инициализировал дисплей LCD 1602 при помощи микроконтроллера STM32f411 и CubeMX в четырехбитном режиме. Получилось вывести...

77
47 / 45 / 2
Регистрация: 23.01.2019
Сообщений: 360
27.05.2025, 19:10
Студворк — интернет-сервис помощи студентам
я использую в
Цитата Сообщение от 23AndreY Посмотреть сообщение
4 битном или через модуль I2C
хотя какая разница, через i2c или без.
В даташите 8-ми и 4-х битный указаны. Дисплею всё равно, напрямую с контроллера идёт или через айтуси прокладку
Цитата Сообщение от 23AndreY Посмотреть сообщение
О нюансе который я описал на 45 и 46 странице ничего нет.
Возможно я невнимательно прочитал ваши сообщения..
В принципе мой ответ под заголовок темы..
0
1494 / 512 / 75
Регистрация: 22.09.2023
Сообщений: 1,608
27.05.2025, 20:15
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

Цитата Сообщение от 23AndreY Посмотреть сообщение
Вы это используете в 8 битном , 4 битном или через модуль I2C ?
А какая разница? Контроллер дисплея один и тот же, во время сброса контроллер может находиться в одном из трех режимов:
- 8-битный, готов к приему команды целиком
- 4-битный, готов к приему старшей тетрады команды
- 4-битный, старшую тетраду команды принял, ждет младшую тетраду.

Для перевода его в 4-битный режим нужно 3 раза подать команду 3x и 1 раз 2x.
Обозначим эти команды как a, b, c, d

Допустим, дисплей был в 8-битном режиме. Тогда:
команда a - не влияет на работу, он и так в 8-битном режиме
команда b - то же самое
команда c - то же самое
команда d - воспринимается как 8-битная команда и переводит в 4-битный режим.

Допустим, дисплей был в 4-битном режиме и ждал команду. Тогда:
команда a - воспринимается как старшая тетрада команды перевода в 8-битный режим
команда b - воспринимается как младшая тетрада команды перевода в 8-битный режим, дисплей переходит в 8-битный режим
команда c - не влияет на работу, он и так в 8-битном режиме
команда d - воспринимается как 8-битная команда и переводит в 4-битный режим.

Теперь допустим, дисплей был в 4-битном режиме и уже получил первую тетраду команды когда проц сбросили. Тогда:
команда a - воспринимается как младшая тетрада предыдущей команды. Да и фиг с ней, все равно инитим дисплей.
команда b - воспринимается как старшая тетрада команды перевода в 8-битный режим
команда c - воспринимается как младшая тетрада команды перевода в 8-битный режим, дисплей переходит в 8-битный режим
команда d - воспринимается как 8-битная команда и переводит в 4-битный режим.

Эта последовательность работает 100% с любым 44780-совместимым дисплеем.

Добавлено через 9 минут
Добавлено: кстати да, эта последовательность описана в некоторых даташитах на контроллер, но нигде не дается ее объяснение, до него я доходил сам.
2
4 / 4 / 0
Регистрация: 22.08.2023
Сообщений: 30
29.05.2025, 16:14
извиняюсь но вот ваш ответ не объясняет как после перевода в 4 бит режим давать следующие команды уже по 4 шинам , да и ни черта у меня не работало по этой стандартной , везде упомянутой схеме. Может китайцы намудрили но у меня заработало совсем по другому.
0
1494 / 512 / 75
Регистрация: 22.09.2023
Сообщений: 1,608
29.05.2025, 20:14
Цитата Сообщение от 23AndreY Посмотреть сообщение
как после перевода в 4 бит режим давать следующие команды уже по 4 шинам
Если я правильно понял выражение "по 4 шинам" (по каким шинам???), то точно так же, как и по 8-битной шине, но двумя посылками: в первой 4 старших бита, во второй - 4 младших.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
29.05.2025, 20:30
Цитата Сообщение от Dushevny Посмотреть сообщение
эта последовательность описана в некоторых даташитах на контроллер, но нигде не дается ее объяснение,
это точно
всю жизнь использовал
Цитата Сообщение от ValeryS Посмотреть сообщение
еще 8битный режим(3) выставляем три раза
но такое объяснения первый раз вижу
0
4 / 4 / 0
Регистрация: 22.08.2023
Сообщений: 30
30.05.2025, 10:58
Dushevny а вот и неправильно , вы так много начинающих введёте в заблуждение . в 4 битном режиме надо посылать уже 4 байта на одну команду или символ только вот прикол как я уже раньше и говорил что для перевода в 4 битный режим нужно всего 2 байта послать а уже настройки по 4 байта посылать вот об этом нюансе я говорю.
0
1494 / 512 / 75
Регистрация: 22.09.2023
Сообщений: 1,608
30.05.2025, 11:34
Цитата Сообщение от 23AndreY Посмотреть сообщение
в 4 битном режиме надо посылать уже 4 байта на одну команду
Покажите это место в документации на контроллер дисплея. А я покажу место, где английским по белому сказано про две посылки. И начинающие и профессионалы должны руководствоваться документацией. Если у вас что-то не работает так, как сказано в документации - значит вы что-то делаете неправильно. Тем более когда речь идет о HD44780, которому лет 40 уже и у которого все возможные ошибки в документации вылизаны еще в прошлом веке.
0
4 / 4 / 0
Регистрация: 22.08.2023
Сообщений: 30
30.05.2025, 11:44
Цитата Сообщение от Dushevny Посмотреть сообщение
Покажите это место в документации на контроллер дисплея. А я покажу место, где английским по белому сказано про две посылки. И начинающие и профессионалы должны руководствоваться документацией. Если у вас что-то не работает так, как сказано в документации - значит вы что-то делаете неправильно. Тем более когда речь идет о HD44780, которому лет 40 уже и у которого все возможные ошибки в документации вылизаны еще в прошлом веке.
Я не претендую на истину но у меня китайский LCD 1602 с модулем I2C заработал только так . Так Я и пытаюсь донести этот НЮАНС который нигде не указан , я ж об этом тут и пишу.
0
1494 / 512 / 75
Регистрация: 22.09.2023
Сообщений: 1,608
30.05.2025, 11:53
Цитата Сообщение от 23AndreY Посмотреть сообщение
но у меня китайский LCD 1602 с модулем I2C заработал только так .
Значит вы что-то делаете неправильно. И надо разобраться и исправить это, а не разносить по интернету как решение и "нюанс". Нет там нюансов. Поверьте. Хотите разобраться - показывайте код и схему.
0
4 / 4 / 0
Регистрация: 22.08.2023
Сообщений: 30
30.05.2025, 11:57
Цитата Сообщение от Dushevny Посмотреть сообщение
Значит вы что-то делаете неправильно. И надо разобраться и исправить это, а не разносить по интернету как решение и "нюанс". Нет там нюансов. Поверьте. Хотите разобраться - показывайте код и схему.
на 2 странице код но там только код активации на ассемблере думаю будет достаточно для разбора
0
1494 / 512 / 75
Регистрация: 22.09.2023
Сообщений: 1,608
30.05.2025, 11:59
Хотя... Есть у меня одно предположение: я писал о посылках, которые надо подать на контроллер дисплея. Каждая посылка дисплею состоит из перевода входа E контролера в 1 и потом перевода его в 0. Разумеется, каждое это действие требует отдельной посылки на расширитель I2C, через который у вас подключен контроллер дисплея.
0
4 / 4 / 0
Регистрация: 22.08.2023
Сообщений: 30
30.05.2025, 12:01
дополнительные 2 байта нужны для сброса строба Е в 0
0
1494 / 512 / 75
Регистрация: 22.09.2023
Сообщений: 1,608
30.05.2025, 12:02
Ну вот и разобрались.
0
4 / 4 / 0
Регистрация: 22.08.2023
Сообщений: 30
31.05.2025, 17:40
да разобрались и НЮАНЬСИК есть.
0
1494 / 512 / 75
Регистрация: 22.09.2023
Сообщений: 1,608
31.05.2025, 19:57
Цитата Сообщение от 23AndreY Посмотреть сообщение
да разобрались и НЮАНЬСИК есть.
Это не "нюансик". Это так и должно работать, потому что именно так и было задумано. Никакой магии и тайных знаний в этом нет.
0
4 / 4 / 0
Регистрация: 22.08.2023
Сообщений: 30
01.06.2025, 12:02
все такие специалисты, даже Вы мне писали что в 4 битном режиме нужно 2 посылки делать .
Цитата Сообщение от Dushevny Посмотреть сообщение
Добавлено: кстати да, эта последовательность описана в некоторых даташитах на контроллер, но нигде не дается ее объяснение, до него я доходил сам.
А вы говорите ему 40 лет там всё написано , читай внимательно. Из вашего поста я понял что Вы сами не работали по I2C с LCD или пользовались готовым решением типа скеча , библиотеки.
Цитата Сообщение от Dushevny Посмотреть сообщение
Это не "нюансик". Это так и должно работать, потому что именно так и было задумано. Никакой магии и тайных знаний в этом нет.
Я не писал что я америку открыл я лишь написал что для перевода в 4 битный режим по I2C надо послать 2 байта , первый 0b00100100 (команда перевода в 4 бит режим и строб Е в 1 это у меня 3 бит), второй 0b00100000 (строб Е в 0) а после этого по 4 посылки делать для одной команды или символа. До этого мне тоже пришлось доходить самому , в даташите этого нет.
Вот в этом даташите почти правильно написано на 11 странице и то надо домысливать.
Вложения
Тип файла: pdf HD44780-rus.pdf (385.3 Кб, 4 просмотров)
1
47 / 45 / 2
Регистрация: 23.01.2019
Сообщений: 360
01.06.2025, 12:10
За документ спасибо..

Но я повторюсь: разницы нет, управлять дисплеем напрямую с контроллера или через i2c контроллер. Потому как дисплей не понимает кто им управляет, он понимает только управляющие последовательности
1
1494 / 512 / 75
Регистрация: 22.09.2023
Сообщений: 1,608
01.06.2025, 13:30
Цитата Сообщение от 23AndreY Посмотреть сообщение
даже Вы мне писали что в 4 битном режиме нужно 2 посылки делать
2 посылки контроллеру дисплея. Как вы их обеспечите - 4 командами промежуточному расширителю I2C или 100500 командами основному контроллеру - контроллеру дисплея все равно.
1
4 / 4 / 0
Регистрация: 22.08.2023
Сообщений: 30
01.06.2025, 17:17
Цитата Сообщение от shonty Посмотреть сообщение
Но я повторюсь: разницы нет, управлять дисплеем напрямую с контроллера или через i2c контроллер.
Ошибаетесь товарищ , если вы напрямую микроконтроллером посылаете команду дисплею то строб Е вы можете дёрнуть в 0 отдельным битом а по I2C нужно посылать целый байт. Что у контроллера дисплея находится на входах DB0-DB7 записывается в буфер при стробе Е высокого уровня тобишь 1 а выводит на экран когда строб Е опускаем в 0 а у нас есть младший полубайт и старший ( а наоборот сначала старший посылаем) и чтоб дисплей их вывел на экран нужно 4 байта. после каждого полубайта нужно послать байт чтоб дёрнуть строб Е в 0

Добавлено через 5 минут
Цитата Сообщение от shonty Посмотреть сообщение
За документ спасибо..
всегда пожалуйста
0
47 / 45 / 2
Регистрация: 23.01.2019
Сообщений: 360
01.06.2025, 17:37
Цитата Сообщение от 23AndreY Посмотреть сообщение
Ошибаетесь товарищ
В чём я ошибаюсь?
Я вообще-то говорил что:
Цитата Сообщение от shonty Посмотреть сообщение
он понимает только управляющие последовательности
, а не о реализации этих последовательностей))

Допустим вы дёргаете строб, на Atmeg-е за 1 такт..
Берёте другой МК - у вас на дёрнуть стробом уйдёт 7 тактов..
Какая дисплею разница как это реализовано
Или под каждую ситуацию отдельный ДШ писать?

Вам нужно соблюсти на выходе промежуточного преобразователя интерфейса необходимую последовательность, и всё. Каким образом вы это реализуете- всем на это пофиг, и разработчикам и дисплею.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2025, 17:37
Помогаю со студенческими работами здесь

как подружить stm32f4discovery + 16x2 (1602) lcd
есть такая плата stm32f4discovey и 16x2 lcd экран нужна библиотека lcd.h где для него взять драйвер те библиотеку например для CooCox...

Вывод слова на LCD 1602 в МК PIC16F628 с помощью C++
добрый вечер буду очень благодарен за помощь имеется в наличии pic 16f628,lcd 1602+ponyprog Задача состоит в том, чтобы при каждом...

Подключение LCD 1602 через I2C к STM32F4 без библиотеки Hal
Здравствуйте! Пытаюсь запустить дисплей LCD 1602(по I2C) при помощи STM32F411VET6U. На форуме целое множество примеров по поводу запуска...

LCD 1602 не работает - подсвечиваются только ячейки первой строки
Добрый день всем! Подскажите, пожалуйста, почему экран может не работать? Подключил без i2c. Подсвечиваются только ячейки первой...

Не находит адрес lcd 1602
Добрый день. У меня имеется raspberry pi 3 b+ и дисплей lcd 1602. Подключил по картинке (1 вложение) Пытаюсь на raspberry сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru