доброго времени суток! может кто-нибудь работал со строковыми ЖКИ. Интересует ЖК SC1602BULT-SH-HS-G , как его соединить с PICом. А вообще интересует написание проги для вывода инфы на дисплей. Немного не понимаю, как это делается. Может кто-нибудь пояснит. Или может у кого есть пример программы. Вообще интересует прога на ассемблере, но для уяснения сути дела можно и на любом другом.
*antzol*
Apr 28 2008, 15:53
С каким контроллером индикатор я не нашел, но сутя по выводам на каком-нибудь аналоге HD44780.
А примеры в яндексе...
http://www.gaw.ru/html.cgi/txt/app/lcd/pic_to_44780.htmhttp://schemz.narod.ru/LCD/lcd.htm
Добрый день.
Тут кусок моей программульки для ПИК18. На таймере TMR2 выполнены регламентируемые задержки, т.к. я без проверки загоняю данные в LCD. Пробовал с проверкой - особого выигрыша во времени нет.
С уважением, ОК
; - RD4-RD7 - выходы передачи данных на LCD в четырехразрядном режиме
; - RD3 - выход выбора LCD
; - RD2 - выход управления записью инструкций в LCD
; - RD1 - выход управления записью адреса в LCD
;************************************************************************
; Вывод верхней строки на экран из памяти по адресам 0x0060**
;************************************************************************
PrintStringUP:
movwf TBLPTRL
movlw 0x00
movwf TBLPTRU
movlw 0x60
movwf TBLPTRH
movlw 0x80
call LCD_Command
movlw d'16'
movwf CounterL
OutStringToLCD_UP:
tblrd*+
movf TABLAT,W
call LCD_Out
decfsz CounterL
goto OutStringToLCD_UP
return
;************************************************************************
; Вывод верхней строки на экран из памяти по адресам 0x0061**
;************************************************************************
PrintStringUP_1:
movwf TBLPTRL
movlw 0x00
movwf TBLPTRU
movlw 0x61
movwf TBLPTRH
movlw 0x80
call LCD_Command
movlw d'16'
movwf CounterL
OutStringToLCD_UP_1:
tblrd*+
movf TABLAT,W
call LCD_Out
decfsz CounterL
goto OutStringToLCD_UP_1
return
;************************************************************************
; Вывод нижней строки на экран из памяти по адресам 0x0060**
;************************************************************************
PrintStringDOWN:
movwf TBLPTRL
movlw 0x00
movwf TBLPTRU
movlw 0x60
movwf TBLPTRH
movlw 0xc0
call LCD_Command
movlw d'16'
movwf CounterL
OutStringToLCD_DOWN:
tblrd*+
movf TABLAT,W
call LCD_Out
decfsz CounterL
goto OutStringToLCD_DOWN
return
;************************************************************************
; Вывод нижней строки на экран из памяти по адресам 0x0061**
;************************************************************************
PrintStringDOWN_1:
movwf TBLPTRL
movlw 0x00
movwf TBLPTRU
movlw 0x61
movwf TBLPTRH
movlw 0xc0
call LCD_Command
movlw d'16'
movwf CounterL
OutStringToLCD_DOWN_1:
tblrd*+
movf TABLAT,W
call LCD_Out
decfsz CounterL
goto OutStringToLCD_DOWN_1
return
;************************************************************************
; Инициализация LCD в четырехзначном режиме. Здесь же подпрограммы управления LCD.
;************************************************************************
LCDinit:
movlw 0xff
call TimeDelayTMR2
movlw 0xff
call TimeDelayTMR2
bcf PORTD,1
bcf PORTD,2
bsf PORTD,3
movlw 0x30
call Out_Nibble
bcf PORTD,3
movlw 0xff
call TimeDelayTMR2
bcf PORTD,1
bcf PORTD,2
bsf PORTD,3
movlw 0x30
call Out_Nibble
bcf PORTD,3
movlw 0xff
call TimeDelayTMR2
bcf PORTD,1
bcf PORTD,2
bsf PORTD,3
movlw 0x30
call Out_Nibble
bcf PORTD,3
movlw 0xff
call TimeDelayTMR2
bcf PORTD,1
bcf PORTD,2
bsf PORTD,3
movlw 0x20
call Out_Nibble
bcf PORTD,3
movlw 0xff
call TimeDelayTMR2
movlw 0x28
call LCD_Command
movlw 0x0d
call LCD_Command
; Подпрограмма очистки дисплея
LCD_Clear:
movlw 0x01
call LCD_Command
movlw 0xff
call TimeDelayTMR2
movlw 0x06
call LCD_Command
movlw 0x00
call PrintStringUP
movlw 0x10
call PrintStringDOWN
return
; Подпрограмма отправки команды
LCD_Command:
bcf PORTD,1
bcf PORTD,2
movwf Value
bsf PORTD,3
call Out_Nibble
bcf PORTD,3
swapf Value,W
bsf PORTD,3
call Out_Nibble
bcf PORTD,3
movlw 0x02
call TimeDelayTMR2
return
; Подпрограмма вывода символа по адресу знакогенератора
LCD_Out:
bcf PORTD,1
bsf PORTD,2
movwf Value
bsf PORTD,3
call Out_Nibble
bcf PORTD,3
swapf Value,W
bsf PORTD,3
call Out_Nibble
bcf PORTD,3
movlw 0x02
call TimeDelayTMR2
return
; Подпрограмма загрузки четырехзначного канала
Out_Nibble:
movwf LCD_Data
bcf PORTD, 4
btfsc LCD_Data, 4
bsf PORTD, 4
bcf PORTD, 5
btfsc LCD_Data, 5
bsf PORTD, 5
bcf PORTD, 6
btfsc LCD_Data, 6
bsf PORTD, 6
bcf PORTD, 7
btfsc LCD_Data, 7
bsf PORTD, 7
return
спасибо за помощь, вроде начинаю понимать. А еще такой вопрос назрел: для вывода информации я просто задаю положение курсора на экране и вывожу нужный символ. Как я понял, можно указывать любую позицию из существующих. Так? И еще, там нет никаких приколов типа выбор кристалла или т.п. ?
Цитата(Anty @ Apr 29 2008, 21:43)

И еще, там нет никаких приколов типа выбор кристалла или т.п. ?
Там адресация нелинейная, даташит на HD44780. Или документацию на МЭЛТовские ЖКИ, там тоже, но по русски
Народ, помоги, пожалуйста. Написал прогу по примерам, которые вы мне оставили. вроде все правильно сделал. Пытаюсь проверить в proteus.(Проверять на реальном экране пока считаю бесполезным, пусть бы в протеусе заработала... ) Экран либо просто светиться (ничего не выводит), либо выводит какую то непонятную штуку, причем только в верхней строке, при установленном двухстрочном режиме.
Короче, приведу прогу написанную. Посмотрите, плиз, может найдете какую неточность.
PORTA 1 - RS
PORTA 2 - RW
PORTA 3 - E
PORTB 0..7 - DB0...7
LIST P=16F876
#include <p16f876.inc>
;----------------------------------------------------------------------------------------------------------------------------
; Секция заголовка
;
;биты регистра PORTA
RS EQU 01h
RW EQU 02h
E EQU 03h
; ячейки ОЗУ
TEMP EQU 21h
R0 EQU 20h
; Рабочая секция
;
; начало исполняемого кода
;------------ОБЩАЯ ИНИЦИАЛИЗВЦИЯ----------------
MAIN
CLRF PORTA
BSF STATUS,RP0 ;Выбор банка 1
MOVLW 0x00
MOVWF TRISA
BCF STATUS,RP0 ;Выбор банка 0
;---------------------
;инициализация PORTB
CLRF PORTB
BSF STATUS,RP0 ;Выбор банка 1
MOVLW 0x00 ; <7:0> - выходы
MOVWF TRISB
;BSF OPTION_REG,7 ; RBPU ; включили подтягтвающие регистры
BCF STATUS,RP0 ;Выбор банка 0
;---------------------
;инициализация PORTB
CLRF PORTC
BSF STATUS,RP0 ;Выбор банка 1
MOVLW 0x00 ; <7:0> - выходы
MOVWF TRISC
;BSF OPTION_REG,7 ; RBPU ; включили подтягтвающие регистры
BCF STATUS,RP0 ;Выбор банка 0
;----------------------------------------------
;==============ИНИЦИАЛИЗАЦИЯ LCD===========================
CLRW
MOVWF PORTA
BCF PORTA,RS
BCF PORTA,RW
BCF PORTA,E
MOVLW 3Fh
CALL DELAY1 ;задержка на 15мс
MOVLW 30h
MOVWF PORTB
BSF PORTA,E
BCF PORTA,E ;_-_
MOVLW 11h
CALL DELAY1 ;задержка на 4мс
BSF PORTA,E
BCF PORTA,E ;_-_
CALL delay_100mks
BSF PORTA,E
BCF PORTA,E ;_-_
MOVLW 20h
CALL WRC
MOVLW 28h ;шина-4бит,2строки, 5х8 пикселей
CALL WRC
MOVLW 0Ch ;отображение- вкл без курсора
CALL WRC
MOVLW 06h ;
CALL WRC
MOVLW 01h ;очистить дисплей
CALL WRC
MOVLW 03h
CALL DELAY1 ;вместо опроса BUSY
CLRW
MOVWF PORTB
;Загрузка строки
MOVLW h'80'
CALL WRC
movlw h'65' ;"П"
call WRD ;
movlw h'84' ;"р"
call WRD ;
movlw h'b8' ;"и"
call WRD ;
movlw h'b3' ;в
call WRD ;
movlw h'65' ;"е"
call WRD ;
movlw h'bf' ;"т"
call WRD ;
movlw h'2c' ;","
call WRD ;
movlw h'20' ;Пробел
call WRD ;
;
;-----------ВТОРАЯ СТРОКА-----------------------------------------------------------------------
movlw 0xC0 ;
call WRC ;
movlw h'43' ;"C"
call WRD ;
movlw h'79' ;"у"
call WRD ;
movlw h'70' ;"р"
call WRD ;
movlw h'b4' ;"г"
call WRD ;
movlw h'79' ;"у"
call WRD ;
movlw h'bf' ;"т"
call WRD ;
movlw h'21' ;"!"
call WRD
CALL DELAY2
CALL DELAY2
CALL DELAY2
WAIT
BSF PORTA,0
GOTO WAIT
;======================================================================
; ПОДПРОГРАММЫ
;======================================================================
;===Запись кода команд LCD=========
WRC
BCF PORTA,RS
CLRF TEMP
BCF PORTA,RW
MOVWF TEMP
ANDLW 0F0h
MOVWF PORTB
BSF PORTA,E
BCF PORTA,E ;_-_
SWAPF TEMP,0
ANDLW 0F0h
MOVWF PORTB
BSF PORTA,E
BCF PORTA,E ;_-_
MOVLW 4h
CALL DELAY1 ;вместо опроса BUSY
RETURN
;===Запись кода данных LCD=========
WRD
BSF PORTA,RS
CLRF TEMP
BCF PORTA,RW
MOVWF TEMP
ANDLW 0F0h
;IORLW 02h ;оставить RS=1
MOVWF PORTB
BSF PORTA,E
BCF PORTA,E ;_-_
SWAPF TEMP,0
ANDLW 0F0h
;IORLW 02h ;оставить RS=1
MOVWF PORTB
BSF PORTA,E
BCF PORTA,E ;_-_
MOVLW 4h
CALL DELAY1 ;вместо опроса BUSY
BCF PORTA,RS
RETURN
DELAY1 ;задержка на ... мс
MOVWF TEMP
DLOOP
MOVLW 0F0h
MOVWF R0
DECFSZ R0
GOTO $-1
DECFSZ TEMP
GOTO DLOOP
RETURN
DELAY2 ;задержка на 0.2сек
MOVLW 0FFh ;задержка
MOVWF TEMP
DLOOP2
MOVLW 0FFh
MOVWF R0
DECFSZ R0
GOTO $-1
DECFSZ TEMP
GOTO DLOOP2
RETURN
delay_100mks
movlw 0x30
movwf TEMP
nop
nop
decfsz TEMP, f
goto $-1
nop
return
delay_8mks
nop
nop
nop
nop
return
END
А Вы не забыли в четырехпроводном режиме подвесить остальные выводы LCD (с 0 по 3) на питание через сопротивления? Или по крайней мере, если они подсоединены к контроллеру, то отправлять, например не "Х0h", а "Хfh"?
И еще. У меня в LCD нет кириллицы - только латиница.
Цитата(Okor @ May 5 2008, 22:30)

А Вы не забыли в четырехпроводном режиме подвесить остальные выводы LCD (с 0 по 3) на питание через сопротивления? Или по крайней мере, если они подсоединены к контроллеру, то отправлять, например не "Х0h", а "Хfh"?
И еще. У меня в LCD нет кириллицы - только латиница.
Ну вот кстати не знал про "Xfh". Но все равно не помогло. Все равно ничего не выводит. Я подумал, может тут проблема в задержках (может мало жду или много), переписал с модулем опроса готовности. Прога проходит до конца, т.е. флаг готовности постоянно разрешает идти дальше, а на экране пусто... Да и переписал на латинские буквы, тож не помогло...
А есть вообще конкретные цифры задержек после команд? А то в разных источниках пишут по разному и вроде все аналоги HD44780.
И может есть у кого-нибудь конкретный алгоритм инициализации и порядок вывода информации на экран?
Короче, везде пишут просто, а что-то мне уже так не кажется...
Vanizma
May 6 2008, 13:35
Нажмите для просмотра прикрепленного файлаЦитата(Anty @ May 6 2008, 12:38)

Ну вот кстати не знал про "Xfh". Но все равно не помогло. Все равно ничего не выводит. Я подумал, может тут проблема в задержках (может мало жду или много), переписал с модулем опроса готовности. Прога проходит до конца, т.е. флаг готовности постоянно разрешает идти дальше, а на экране пусто... Да и переписал на латинские буквы, тож не помогло...
А есть вообще конкретные цифры задержек после команд? А то в разных источниках пишут по разному и вроде все аналоги HD44780.
И может есть у кого-нибудь конкретный алгоритм инициализации и порядок вывода информации на экран?
Короче, везде пишут просто, а что-то мне уже так не кажется...

Проверь инициализацию. Первая команда после init - включить ЖКИ. Времена при инициализации лучше увеличить немного - 16 мс, 5 мс, 150мкс. Времена выполнения команд во всех источниках практически не отличаются: очистка,переход на начало - 1,53-1,6мс, запись данных 43 мкс, остальное 39-41 мкс. Я брал задержки - 44 мкс и 1,8 мкс.
Порядок вывода инфы: адрес - задержка на выполнение - строка данных - задержка на выполнение - переход на другую строку - .... Или адрес - задержка на выполнение - байт данных - задержка на выполнение - адрес - ....
Лучше конечно использовать флаг готовности. Не забудь, что в 4-х битном режиме нужно писать и читать всегда оба полубайта.
Ты бы лучше завел его в 8-ми битном режиме для начала, разобрался. А уж потом...
Vanizma
May 6 2008, 15:30
Кстати, в proteus'e можно поменять кодировку ЖКИ LMXXXL на кодаровку с кириллицей. Нужно хакнуть файл LCDALPHA.DLL и перерисовать таблицу кодировки. можно хоть CP-1251 нарисовать.
Кому лень рисовать - могу поделиться.
Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла[attachment=207
3
4:attachment]
Цитата(Anty @ Apr 28 2008, 18:58)

доброго времени суток! может кто-нибудь работал со строковыми ЖКИ. Интересует ЖК SC1602BULT-SH-HS-G , как его соединить с PICом. А вообще интересует написание проги для вывода инфы на дисплей. Немного не понимаю, как это делается. Может кто-нибудь пояснит. Или может у кого есть пример программы. Вообще интересует прога на ассемблере, но для уяснения сути дела можно и на любом другом.
Вся правда о твоем ЖКИ

Это
http://www.sunlikedisplay.com/ аналоги тута:
http://display.compel.ru/passive/passive_i...php?ser=SC1602B
Спасибо за ответы. Накопал много интересного и полезного. Буду изучать. Надеюсь, теперь получится.
SYurev
Jul 19 2009, 03:42
Скажите, модель lcdalpha.dll поддерживает другие, кроме дефолтных, адреса строк?
К примеру по даташиту для WH1602D адреса начинаются с 0x00 и 0x40.
Прописываю их в модели и программе получаю пустой экран.
Возвращаю к дефолным модельным 0x80 и 0xC0 - всё работает как прежде...
Та же история и с 4-х строчником.
volodya
Jul 21 2009, 04:35
Вообщето в комплекте MPLAB IDE прилагается библиотека в числе всего прочего библиотечка для работы с такой серией дисплеев. Хорошо прокоментировано, доступно для понимания. Рекомендую ознакомиться перед изобретением велосипеда.
Цитата(volodya @ Jul 21 2009, 07:35)

Вообщето в комплекте MPLAB IDE прилагается библиотека в числе всего прочего библиотечка для работы с такой серией дисплеев. Хорошо прокоментировано, доступно для понимания. Рекомендую ознакомиться перед изобретением велосипеда.
хочу высказать своё мнение в разрезе данного вопроса . Я когда-то тоже долго мучался - не мог вывести буквы на дисплей - всё оказалось банально просто - наши люди не привыкли читать документацию(изучать матчасть) перед тем как что-то делать а студенты и подавно не утруждают себя таким пошлостями - ЧИТАТЬ перед тем как ДЕЛАТЬ - молодость даёт о себе знать- всё делать сходу "снахрапа"
Скачайте любой дэйтшит на контроллер HD44700 и сделайте тютелька-в-тютельку как там "РАЗЖЁВАНО"!!!!!!! и особенно обратите внимание на времена задержек если не юзаете флаг готовности! В первую очередь читать ДОКИ а на чужих примерах лучше проверять насколько вы разобрались и находить чужие ошибки в исходниках!

Могу при необходимости дать исходники СВОИ - но они на С! Настоятельно рекомендую не засижываться на АСМ - сам когда-то был его приверженцем пока коллега не "насильно" :-)) не заставил перейти на С о чём совсем не жалею . На асм денег не заработаешь - только как хобби! Но это уже ОффТоп...
HHIMERA
Jul 21 2009, 23:02
Цитата(backa @ Jul 21 2009, 12:49)

хочу высказать своё мнение в разрезе данного вопроса . Я когда-то тоже долго мучался - не мог вывести буквы на дисплей - всё оказалось банально просто - наши люди не привыкли читать документацию(изучать матчасть) перед тем как что-то делать а студенты и подавно не утруждают себя таким пошлостями - ЧИТАТЬ перед тем как ДЕЛАТЬ - молодость даёт о себе знать- всё делать сходу "снахрапа"
Скачайте любой дэйтшит на контроллер HD44700 и сделайте тютелька-в-тютельку как там "РАЗЖЁВАНО"!!!!!!!
И... процентов на 80 индикатор не заработает...
Сейчас HD44780 ( а не HD44700) в чистом виде практически не применяется... Другие чипы, другие задержки, отличия в инициализации, плюс частые ошибки и неточности в PDF некоторых производителей...
Цитата(HHIMERA @ Jul 22 2009, 02:02)

И... процентов на 80 индикатор не заработает...
Сейчас HD44780 ( а не HD44700) в чистом виде практически не применяется... Другие чипы, другие задержки, отличия в инициализации, плюс частые ошибки и неточности в PDF некоторых производителей...
согласен насчёт того что может стоять другой конроллер но в SC1602BULT 100%совместимый с HD44780 (навскидку не вспомнил точную маркировку :-)) ) стоит !!! Сам его использовал когда-то ...
Я пытался донести мысль что в 1 очередь надо немного почитать про то что хочешь ОСВОИТЬ а не сразу кидаться "писать" проги иди разбирать чужие проги !!!!!
rx3apf
Jul 23 2009, 10:53
Цитата(HHIMERA @ Jul 22 2009, 03:02)

И... процентов на 80 индикатор не заработает...
Сейчас HD44780 ( а не HD44700) в чистом виде практически не применяется... Другие чипы, другие задержки, отличия в инициализации, плюс частые ошибки и неточности в PDF некоторых производителей...
Да ладно страсти-то рассказывать ! Клоны-не клоны, а совместимость заявляется и есть на практике (ну, у МЭЛТовских какие-то свои заморочки, но при достаточно экзотической логике работы с индикатором, чтобы на это попасть, надо специально постараться). Задержки регламентированы, и если соблюдать рекомендации в точности - работает всегда и везде... Что до "ошибок и неточностях в PDF" - так и не надо пользоваться "левыми" PDF. Есть родной тошибовский даташит - по нему и работать. Тонкости выплывают, когда модуль какой-нибудь нестандартный, с преобразователем питания, например.
rezident
Jul 23 2009, 15:02
Цитата(rx3apf @ Jul 23 2009, 16:53)

Что до "ошибок и неточностях в PDF" - так и не надо пользоваться "левыми" PDF. Есть родной тошибовский даташит - по нему и работать.
"Родной" вообще-то от фирмы Hitachi.
rx3apf
Jul 23 2009, 16:14
Цитата(rezident @ Jul 23 2009, 19:02)

"Родной" вообще-то от фирмы Hitachi.

Пардон, я оговорился...
HHIMERA
Jul 23 2009, 19:41
Цитата(rx3apf @ Jul 23 2009, 13:53)

Да ладно страсти-то рассказывать ! Клоны-не клоны, а совместимость заявляется и есть на практике (ну, у МЭЛТовских какие-то свои заморочки, но при достаточно экзотической логике работы с индикатором, чтобы на это попасть, надо специально постараться). Задержки регламентированы, и если соблюдать рекомендации в точности - работает всегда и везде... Что до "ошибок и неточностях в PDF" - так и не надо пользоваться "левыми" PDF. Есть родной тошибовский даташит - по нему и работать. Тонкости выплывают, когда модуль какой-нибудь нестандартный, с преобразователем питания, например.
Да ну??? Неужели??? А два даташита на HD44780 и KS0066 сравнить слабо??? А как написано в PDF SC1602B, что KS0066 или совместимый - тоже ничего??? Т.е. там может стоять уже не HD44780 и не
KS0066, а что-то совместимое...
А теперь стриптиз... Голые факты...
BTHQ 22005VSS фирмы BATRONNC1602A-BIW-TSN фирмы NEWTECБезымянный ЖКИ 16X1 с какого-то принтера, но с чипом HD44780У всех трёх разная инициализация!!! Отличия не только в задержках, но и в количестве команд (на самом деле, а не по PDF)... И только у последнего, безымянного, полное совпадение с даташитом...
И насчёт PDF... Мне их читать не надо - я их наизусть выучил...
zltigo
Jul 23 2009, 19:55
Цитата(HHIMERA @ Jul 23 2009, 22:41)

У всех трёх разная инициализация!!!
Это в раделе "примера"-отсебятины написанного каким-нибудь полуграмотным китайцем в левом китайском даташите она "разная", а в реале если действовать хоть чуть-чуть подумать все эти многочисленные клоны (не менее десятка совершенно разных от 1x16 до 4x40 прошли через меня) совершенно спокойно работают по одной процедуре инициализации вдумчиво написанной в процессе чтения
единственного хитачевского мануала.
HHIMERA
Jul 23 2009, 20:21
Цитата(zltigo @ Jul 23 2009, 22:55)

Это в раделе "примера"-отсебятины написанного каким-нибудь полуграмотным китайцем в левом китайском даташите она "разная", а в реале если действовать хоть чуть-чуть подумать все эти многочисленные клоны (не менее десятка абсолютно безвестных прошли через меня) совершенно спокойно работают по одной процедуре инициализации вдумчиво написанной в процессе чтения единственного хитачевского мануала.
При всём Уважении... Спорить я не буду, у меня то всё работает... Пройдитесь по форумам и посмотрите на количество вопросов по HD44780 "совместимых" индикаторов, что-то не совсем гладко и сладко... И топикстартеру никто толком не ответил... Так киньте ему Ваш универсальный пример, который "совершенно спокойно работает по одной процедуре инициализации вдумчиво написанной в процессе чтения
единственного хитачевского мануала."...

А я выделю время, чтобы взять все что у меня есть клоны, сдуть с них пыль и подключить... О результатах доложу...
rx3apf
Jul 23 2009, 21:00
Цитата(HHIMERA @ Jul 23 2009, 23:41)

Да ну??? Неужели??? А два даташита на HD44780 и KS0066 сравнить слабо??? А как написано в PDF SC1602B, что KS0066 или совместимый - тоже ничего??? Т.е. там может стоять уже не HD44780 и не
KS0066, а что-то совместимое...
_Совместимое_. Со всеми вытекающими.
Цитата
А теперь стриптиз... Голые факты...
BTHQ 22005VSS фирмы BATRON
NC1602A-BIW-TSN фирмы NEWTEC
Безымянный ЖКИ 16X1 с какого-то принтера, но с чипом HD44780
У всех трёх разная инициализация!!!
Пока никакого "стриптиза" не вижу. PLS, конкретнее, в чем выражается "разная" инициализация ? Последовательность конкретных команд и задержек ?
Цитата
Отличия не только в задержках, но и в количестве команд (на самом деле, а не по PDF)... И только у последнего, безымянного, полное совпадение с даташитом...
В даташите на 44780 указаны диапазоны задержек. И, насколько помню, крайние случаи. Т.е. если выдержать худший вариант - все работает. Ну и фактически - да, работает (уж поработал я с ними изрядно, с самыми разными). Один раз написал инициализацию и копирую ее из проекта в проект, с разными индикаторами - ну ни разу никаких проблем.
zltigo
Jul 23 2009, 21:03
Цитата(HHIMERA @ Jul 23 2009, 23:21)

Пройдитесь по форумам и посмотрите на количество вопросов по HD44780 "совместимых" индикаторов, что-то не совсем гладко и сладко... И топикстартеру никто толком не ответил...
Да надоело просто даже читать дежурные вопросы

Цитата
Так киньте ему Ваш универсальный пример....
В общем-то не жалко и помнится уже выкладывал, только 99,9% вопрошателей рассчитывают на волшебные решения и просто не смогут нормально привязать к железу

и диаграммы с гарантированными таймингами выстроить. Обычно ими вообще не заморачиваются, а там их довольно много гарантированных интервалов от 10ns, 20ns, 60ns, 230ns, 500ns, 1us, 2us. Кстати, сейчас глянул исходники - одно исключение было - Самсунговский клон выставлял бит готовности на 1/2 такта раньше, нежели был реально готов. Пришлось задержку добавить (из расчета на ~270KHz тактовой).
Цитата
А я выделю время, чтобы взять все что у меня есть клоны, сдуть с них пыль и подключить... О результатах доложу...
Клонов и у меня достаточно, а о результатах я доложил.
lastmage
Jul 25 2009, 18:49
Товарищ, вот здесь все подробно разжевано - как подключить ЖКИ к pic, как в него потом писать, восьмибитный интерфейс, четырехбитный интерфейс, ... Короче, читай.
http://radiohlam.ru
Сергей Борщ
Jul 27 2009, 05:50
Цитата(SYurev @ Jul 19 2009, 06:42)

К примеру по даташиту для WH1602D адреса начинаются с 0x00 и 0x40.
Да. И именно с этих адресов начинаются строки в
любом индикаторе на 44780-совместимом контроллере.
Цитата(SYurev @ Jul 19 2009, 06:42)

Прописываю их в модели и программе получаю пустой экран.
Возвращаю к дефолным модельным 0x80 и 0xC0 - всё работает как прежде...
А теперь наконец прочитайте хоть один даташит, ссылками на которые вас тут просто завалили и разберитесь - где с коде 0xC0 адрес (и какой именно), а где - команда установки курсора.
SYurev
Jul 28 2009, 07:46
Цитата(Сергей Борщ @ Jul 27 2009, 11:50)

Да. И именно с этих адресов начинаются строки в любом индикаторе на 44780-совместимом контроллере.А теперь наконец прочитайте хоть один даташит, ссылками на которые вас тут просто завалили и разберитесь - где с коде 0xC0 адрес (и какой именно), а где - команда установки курсора.
В каком коде вы мне предлагаете разобраться уважаемый? Я его сам писал.
Цитата(Сергей Борщ @ Jul 27 2009, 11:50)

Да. И именно с этих адресов начинаются строки в любом индикаторе на 44780-совместимом контроллере.
Не в любом.
Адреса у производителей могут отличаться, к прмеру у хитачевского LM044L, реализованного в протеусе, это 80, c0, 94, d4
Я использую WH2004D-YGH-CT, адреса строк там 00, 40, 14, 54.
Для этого в модели адреса доступны для изменения.
Впрочем я уже реализовал модель в железе, там с даташитными адресами всё прекрасно работает. Т.е. модель в протеусе игнорирует не дефолтные значения.
Сергей Борщ
Jul 28 2009, 10:31
Цитата(SYurev @ Jul 28 2009, 10:46)

В каком коде вы мне предлагаете разобраться уважаемый? Я его сам писал.
В шестнадцатиричном коде 0xC0.
Читайте по губам: 0x80, 0xC0 - это
не адреса, это команда установки курсора и адрес в одном флаконе. Пока вы этого не поймете - у вас "адреса" будут отличаться.
SYurev
Jul 28 2009, 11:57
Цитата(Сергей Борщ @ Jul 28 2009, 16:31)

В шестнадцатиричном коде 0xC0.
Читайте по губам: 0x80, 0xC0 - это не адреса, это команда установки курсора и адрес в одном флаконе. Пока вы этого не поймете - у вас "адреса" будут отличаться.
Вообще то согласно того же даташита, старший бит при передаче адреса - код инструкции, остальные - адрес.
Маску 0x80 я накладываю на сформированный адрес после.
Покажите мне даташит, где сказано, что адреса строк указаны с учетом инструкции или где в документации на lcdalpha.dll об этом говорится?
Вот и получается, что в pdf от winstar адреса указаны честные, без бита инструкции, а в модели должна быть введена инструкция целиком.
Сергей Борщ
Jul 28 2009, 15:13
Цитата(SYurev @ Jul 28 2009, 14:57)

Покажите мне даташит, где сказано, что адреса строк указаны с учетом инструкции
Откройте любой даташит на HD44780 или клон, которых несколько выложено только на этой ветке форума, и в любом из низ написано, что адрес кодируется
семью битами. Восьмой бит - код инструкции "установка курсора". А теперь сформируйте команду "установить курсор на начало второй строки" используя адрес 0x40 и "адрес" 0xC0. Что получилось в каждом случае?
Цитата(SYurev @ Jul 28 2009, 14:57)

Вот и получается, что в pdf от winstar адреса указаны честные, без бита инструкции, а в модели должна быть введена инструкция целиком.
Я понятия не имею что за модель в протеусе, но наверное она управляется подачей сигналов на "входы" индикатора, точно так же, как и реальный индикатор. А реальному индикатору подать отдельно команду, отдельно адрес никак невозможно.
rezident
Jul 28 2009, 15:36
Цитата(SYurev @ Jul 28 2009, 13:46)

Не в любом.
Адреса у производителей могут отличаться, к прмеру у хитачевского LM044L, реализованного в протеусе, это 80, c0, 94, d4
Я использую WH2004D-YGH-CT, адреса строк там 00, 40, 14, 54.
Для этого в модели адреса доступны для изменения.
Впрочем я уже реализовал модель в железе, там с даташитными адресами всё прекрасно работает. Т.е. модель в протеусе игнорирует не дефолтные значения.
Извините, что вмешиваюсь, но вы зачем-то смешиваете
устройство (аппаратное, железное, материальное) и его
модель. Зачем? Чтобы показать, что модели могут быть разные, в т.ч. и неправильные (неверно изображающее аппаратное устройство)?
Ради интереса скачал даташит упомянутого
LM044L. Там банальная ошибка составителей описания.

В таблице DISPLAY POSITION AND DD RAM ADDRESS указаны адреса вместе с
кодом команды установки (0x80). Т.е. адреса-то строк вполне стандартные для 4-х строчных 20-и символьных LCD на базе HD44780, типа упомянутого вами же WH2004D (0x00, 0x40, 0x14, 0x54), но записаны неправильно.
Все-таки раз в datsheet LCD указано
HD44780 build-in или
KS0069 build-in, то и руководством должен быть
datasheet указанного
контроллера, а не какие-то абстрактные модели в какой-то программе Proteus
SYurev
Jul 28 2009, 16:07
Цитата(rezident @ Jul 28 2009, 21:36)

Там банальная ошибка составителей описания.
Вот это меня и ввело в заблуждение, адреса там с учетом бита инструкции...
Теперь разобрался.
RA3WUM
Aug 28 2009, 07:14
Был у нас проект на микротипсовском HD44780-подобном жк.
Сколько мы на него времени убили чтоб нормально инициализировался просто жуть...
В результате взяли команды инициализации из статьи журнала Радио 2001 №4.
Невероятно но факт, радиогубительство иногда бывает востребовано.
Немного не там, но вывожу 2 символа на первую строку на LM044L в 4-битном режиме, в Proteus пропадает первый символ, а в Multisim всё работаект, где собака порылась??? И как заменить кодовые страницы в dll
Вывожу 2 символа на первую строку на LM044L в 4-битном режиме в Proteus -> пропадает первый символ, а в Multisim на HD44780 всё работаект, где собака порылась???
rezident
Feb 20 2011, 20:43
Цитата(R-Max @ Feb 21 2011, 00:50)

где собака порылась???
В коде. Генетическом. Работу устройства нужно проверять на
реальном устройстве, а не в симуляторах, имеющих весьма сомнительные модели, проверяемого устройства.
В железе тоже неадекватно работало, поэтому решил симулятором побаловаться.
А проблему решил увеличением временных задержкек из даташита в 10 раз и дополнительной командой при инициализации. Proteus в отличие от Multisim ниче так ЖК симулирует и кодировку можно в нем менять и обсчитывает схему побыстрее.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.