Страница 1 из 1
Повторная инициализация HD44780/SED1278 и последующий сбой..
Добавлено: Вс окт 30, 2011 19:44:45
Spider
Всем привет.
Возможно ли определить проинициализорован ли дисплей или нет?
Просто такая ситуация, что если провести инициализацию в 4битный интерфейс повторно, то дисплей либо вообще отказывает, до сброса питания, либо начинает работать неадекватно.
Помогите

Re: Повторная инициализация HD44780/SED1278 и последующий сб
Добавлено: Вс окт 30, 2011 19:55:39
watchmaker
Тайминги при инициализации выдержаны точно? Команда выбора разрядности интерфейса подается трижды?
Re: Повторная инициализация HD44780/SED1278 и последующий сб
Добавлено: Вс окт 30, 2011 20:22:46
Spider
Трижды? А зачем трижды?
Я руководствуюсь вот этим:
http://www.adafruit.com/datasheets/HD44780.pdf, стр. 46
Re: Повторная инициализация HD44780/SED1278 и последующий сб
Добавлено: Вс окт 30, 2011 20:39:05
watchmaker
Где-то мне попадалось, что эту команду надо подавать три раза с определенными интервалами. Завтра поищу.
Re: Повторная инициализация HD44780/SED1278 и последующий сб
Добавлено: Вс окт 30, 2011 22:16:02
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мкс
Re: Повторная инициализация HD44780/SED1278 и последующий сб
Добавлено: Пн окт 31, 2011 01:38:45
Murka
Вот на Winstar_e когда-то скачал ихний пример инициализации 4-бит интерфейса и то что из него написал для IAR. Там много лишнего, но вроде всё понятно, писалось под WinAvr_ом и было тупо скопировано в IAR.
Re: Повторная инициализация HD44780/SED1278 и последующий сб
Добавлено: Вт ноя 01, 2011 02:35:31
eufs
Для правильной организации передачи команд и данных на дисплей в 4-х битном режиме, необходимо контроллировать, принимает ли контроллер дисплея то, что ему посылается. Например, как у меня в инициализации 0802.
Сбой происходит из-за того, что дисплей не принял вторую половину команды, а его пытаются инициализировать. Соответственно все посланное позже не воспринимается им адекватно. После общего сброса или подачи питания все начинает работать правильно.
В моей процедуре проверяется, занят ли контроллер дисплея после передачи команды, если занят - все в порядке, если нет - выравниваем интерфейс половиной байта и пробуем снова.
Re: Повторная инициализация HD44780/SED1278 и последующий сб
Добавлено: Вт ноя 01, 2011 02:55:26
Murka
eufs Хоть коменты вставь, ведь не всем понятно будет.
Re: Повторная инициализация HD44780/SED1278 и последующий сб
Добавлено: Вт ноя 01, 2011 04:34:29
Spider
пасиб. Буду колупать

Re: Повторная инициализация HD44780/SED1278 и последующий сб
Добавлено: Вт ноя 01, 2011 22:07:00
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
Re: Повторная инициализация HD44780/SED1278 и последующий сб
Добавлено: Вт ноя 08, 2011 14:01:22
kolobok0
Spider писал(а):пасиб. Буду колупать

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