Повторная инициализация HD44780/SED1278 и последующий сбой..

Обсуждаем цифровые устройства...
Ответить
Опытный кот
Аватара пользователя
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск

Сообщение Spider »

Всем привет.

Возможно ли определить проинициализорован ли дисплей или нет?
Просто такая ситуация, что если провести инициализацию в 4битный интерфейс повторно, то дисплей либо вообще отказывает, до сброса питания, либо начинает работать неадекватно.
Помогите :)
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 2208
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков

Сообщение watchmaker »

Тайминги при инициализации выдержаны точно? Команда выбора разрядности интерфейса подается трижды?
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск

Сообщение Spider »

Трижды? А зачем трижды?
Я руководствуюсь вот этим: http://www.adafruit.com/datasheets/HD44780.pdf, стр. 46
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2208
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков

Сообщение watchmaker »

Где-то мне попадалось, что эту команду надо подавать три раза с определенными интервалами. Завтра поищу.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 2208
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков

Сообщение watchmaker »

Нашел на одном сайте
Инициализация должна быть строго в таком порядке
времена задержек могут быть больше, но не меньше
сбросить RS, EN

//далее взде RS=0

Вывод 30h
задержка 4.1мс !!!
Вывод 30h
задержка 100мкс !!!
Вывод 30h
задержка 100мкс !!!

Вывод 20h
задержка 100мкс !!!

//след. три действия обязательны именно в таком порядке
Вывод 28h //display-off
задержка 80мкс
Вывод 0Ch //diplay-on
задержка 80мкс
Вывод 01h //clear display
задержка 80мкс

//след. действия по желанию (установка рабочих параметров
Вывод 0Fh //diplay, cursor-on
задержка 80мкс
Вывод 06h //ch->cursor right
задержка 80мкс
Вывод 80h
задержка 80мкс
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 441
Зарегистрирован: Ср июн 03, 2009 00:20:21
Откуда: Новороссия ЛНР Рубежное -> РФ Калуга

Сообщение Murka »

Вот на Winstar_e когда-то скачал ихний пример инициализации 4-бит интерфейса и то что из него написал для IAR. Там много лишнего, но вроде всё понятно, писалось под WinAvr_ом и было тупо скопировано в IAR.
Вложения
asm_LCD.asm
(6.05 КБ) 693 скачивания
for Character type LCD module- 4 bit parallel program.txt
(13.28 КБ) 419 скачиваний
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Свободу можно завоевать, можно просрать, но высидеть свободу нельзя! ©
Всё, что меня не убивает - делает большую ошибку!
Не зли меня!!! :wink:
Контактная информация:
Реклама
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

Сообщение eufs »

Для правильной организации передачи команд и данных на дисплей в 4-х битном режиме, необходимо контроллировать, принимает ли контроллер дисплея то, что ему посылается. Например, как у меня в инициализации 0802.
Сбой происходит из-за того, что дисплей не принял вторую половину команды, а его пытаются инициализировать. Соответственно все посланное позже не воспринимается им адекватно. После общего сброса или подачи питания все начинает работать правильно.
В моей процедуре проверяется, занят ли контроллер дисплея после передачи команды, если занят - все в порядке, если нет - выравниваем интерфейс половиной байта и пробуем снова.
Вложения
0802.asm
(1.1 КБ) 281 скачивание
C0FFEE=‭12648430‬
Мучитель микросхем
Аватара пользователя
Сообщения: 441
Зарегистрирован: Ср июн 03, 2009 00:20:21
Откуда: Новороссия ЛНР Рубежное -> РФ Калуга

Сообщение Murka »

eufs Хоть коменты вставь, ведь не всем понятно будет.
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Свободу можно завоевать, можно просрать, но высидеть свободу нельзя! ©
Всё, что меня не убивает - делает большую ошибку!
Не зли меня!!! :wink:
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск

Сообщение Spider »

пасиб. Буду колупать :)
Контактная информация:
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

Сообщение eufs »

Murka писал(а):eufs Хоть коменты вставь, ведь не всем понятно будет.
С коментами.

Код: Выделить всё

;ПП инициализации в дисплея 4х битном режиме
init_0802:
	rcall pause		;пауза после подачи питания 10 мс
	cbi _portb,en		;сбрасыв EN
	cbi _portb,rw		;сбрасыв RW
	cbi _portb,rs		;сбрасыв RS (команда)
	rcall p50us		;пауза 50us

	ldi r17,$02		;передаем тетраду 0010
	rcall d_out4

	ldi r17,$28		;передаем 0010 1000 в два этапа
	rcall d_out
	sbrs r0,_data7		;если бит 7 сброшен, то дисплей команды не принимает
	rjmp init_0802		;пробуем снова

	ldi r17,$28		;продолжаем инит, передаем 0010 1000
	rcall d_out

	ldi r17,$0c		;передвем 0000 1100
	rcall d_out

	ldi r17,$01		;передаем 0000 0001 (очстка дисплея)
	rcall d_out
	rcall pause		;пауза
	sbi _portb,rs		;устанавливаем RS (дальше будут данные)
	ret

;ПП вывода данных впо 4х битному интерфейсу
d_out:
	rcall p50us		;пауза 50мкс
				;начинаем передавать сначала старшую тетраду
	cbi _portb,_data7		;рассыпано побитно для универсальности при подключении
	sbrc r17,7
	sbi _portb,_data7

	cbi _portb,_data6
	sbrc r17,6
	sbi _portb,_data6

	cbi _portb,_data5
	sbrc r17,5
	sbi _portb,_data5

	cbi _portb,_data4
	sbrc r17,4
	sbi _portb,_data4

	sbi _portb,en		;подтверждаем передачу старших 4х бит
	rcall p50us
	cbi _portb,en

d_out4:

	rcall p50us
				;передаем младшие
	cbi _portb,_data7
	sbrc r17,3
	sbi _portb,_data7

	cbi _portb,_data6
	sbrc r17,2
	sbi _portb,_data6

	cbi _portb,_data5
	sbrc r17,1
	sbi _portb,_data5

	cbi _portb,_data4
	sbrc r17,0
	sbi _portb,_data4

	sbi _portb,en
	rcall p50us
	cbi _portb,en
				;передали
	sbic _portb,rs		;если это были данные, то ничего не проверяем
	rjmp d_out_ex

	sbi _portb,rw		;переводим интерфейс на чтение
	sbi _portb,_data7		;7 бит - это BUSY
	cbi _ddrb,_data7		;переводим на ввод
	sbi _portb,en
	nop			;небольшую паузу (4мкс)
	nop
	nop
	in r0,_pinb		;читаем состояние
	sbi _ddrb,_data7
	cbi _portb,en
	cbi _portb,rw

d_out_ex:
	rcall p50us
	ret
C0FFEE=‭12648430‬
Грызет канифоль
Сообщения: 298
Зарегистрирован: Ср дек 30, 2009 09:55:39

Сообщение kolobok0 »

Spider писал(а):пасиб. Буду колупать :)
как уже прозвучало - тайминги. ну и проверить всё ли при повторной инициализации находится в состоянии как после сброса?
т.е. нет выхода на разделяемую шину(если таковая присутствует) с LCD? нет ли текущего обращения к LCD и мы влезаем в середину этого общения? и т.п..

юзаю достаточно много по времени 4битную схему подключения. описанных проблем не выявленно.

(круглый)
Ответить

Вернуться в «Цифровая техника»