|
PIC16f628A и ЖК SC1602BULT-SH-HS-G, помогите разобраться |
|
|
|
Apr 28 2008, 14:58
|
Участник

Группа: Новичок
Сообщений: 26
Регистрация: 13-03-08
Пользователь №: 35 878

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

Группа: Участник
Сообщений: 17
Регистрация: 29-01-08
Пользователь №: 34 534

|
Добрый день. Тут кусок моей программульки для ПИК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
|
|
|
|
|
Apr 29 2008, 17:43
|
Участник

Группа: Новичок
Сообщений: 26
Регистрация: 13-03-08
Пользователь №: 35 878

|
спасибо за помощь, вроде начинаю понимать. А еще такой вопрос назрел: для вывода информации я просто задаю положение курсора на экране и вывожу нужный символ. Как я понял, можно указывать любую позицию из существующих. Так? И еще, там нет никаких приколов типа выбор кристалла или т.п. ?
|
|
|
|
|
May 5 2008, 12:49
|
Участник

Группа: Новичок
Сообщений: 26
Регистрация: 13-03-08
Пользователь №: 35 878

|
Народ, помоги, пожалуйста. Написал прогу по примерам, которые вы мне оставили. вроде все правильно сделал. Пытаюсь проверить в 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
Сообщение отредактировал Anty - May 5 2008, 12:52
|
|
|
|
|
May 5 2008, 19:30
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 29-01-08
Пользователь №: 34 534

|
А Вы не забыли в четырехпроводном режиме подвесить остальные выводы LCD (с 0 по 3) на питание через сопротивления? Или по крайней мере, если они подсоединены к контроллеру, то отправлять, например не "Х0h", а "Хfh"? И еще. У меня в LCD нет кириллицы - только латиница.
|
|
|
|
|
May 6 2008, 08:38
|
Участник

Группа: Новичок
Сообщений: 26
Регистрация: 13-03-08
Пользователь №: 35 878

|
Цитата(Okor @ May 5 2008, 22:30)  А Вы не забыли в четырехпроводном режиме подвесить остальные выводы LCD (с 0 по 3) на питание через сопротивления? Или по крайней мере, если они подсоединены к контроллеру, то отправлять, например не "Х0h", а "Хfh"? И еще. У меня в LCD нет кириллицы - только латиница. Ну вот кстати не знал про "Xfh". Но все равно не помогло. Все равно ничего не выводит. Я подумал, может тут проблема в задержках (может мало жду или много), переписал с модулем опроса готовности. Прога проходит до конца, т.е. флаг готовности постоянно разрешает идти дальше, а на экране пусто... Да и переписал на латинские буквы, тож не помогло... А есть вообще конкретные цифры задержек после команд? А то в разных источниках пишут по разному и вроде все аналоги HD44780. И может есть у кого-нибудь конкретный алгоритм инициализации и порядок вывода информации на экран? Короче, везде пишут просто, а что-то мне уже так не кажется...
|
|
|
|
|
May 6 2008, 13:35
|
Группа: Новичок
Сообщений: 12
Регистрация: 4-05-08
Из: Pskov
Пользователь №: 37 266

|
WH2002M_YGH_CP.pdf ( 250.83 килобайт )
Кол-во скачиваний: 623Цитата(Anty @ May 6 2008, 12:38)  Ну вот кстати не знал про "Xfh". Но все равно не помогло. Все равно ничего не выводит. Я подумал, может тут проблема в задержках (может мало жду или много), переписал с модулем опроса готовности. Прога проходит до конца, т.е. флаг готовности постоянно разрешает идти дальше, а на экране пусто... Да и переписал на латинские буквы, тож не помогло... А есть вообще конкретные цифры задержек после команд? А то в разных источниках пишут по разному и вроде все аналоги HD44780. И может есть у кого-нибудь конкретный алгоритм инициализации и порядок вывода информации на экран? Короче, везде пишут просто, а что-то мне уже так не кажется...  Проверь инициализацию. Первая команда после init - включить ЖКИ. Времена при инициализации лучше увеличить немного - 16 мс, 5 мс, 150мкс. Времена выполнения команд во всех источниках практически не отличаются: очистка,переход на начало - 1,53-1,6мс, запись данных 43 мкс, остальное 39-41 мкс. Я брал задержки - 44 мкс и 1,8 мкс. Порядок вывода инфы: адрес - задержка на выполнение - строка данных - задержка на выполнение - переход на другую строку - .... Или адрес - задержка на выполнение - байт данных - задержка на выполнение - адрес - .... Лучше конечно использовать флаг готовности. Не забудь, что в 4-х битном режиме нужно писать и читать всегда оба полубайта. Ты бы лучше завел его в 8-ми битном режиме для начала, разобрался. А уж потом...
|
|
|
|
|
May 6 2008, 15:30
|
Группа: Новичок
Сообщений: 12
Регистрация: 4-05-08
Из: Pskov
Пользователь №: 37 266

|
Кстати, в proteus'e можно поменять кодировку ЖКИ LMXXXL на кодаровку с кириллицей. Нужно хакнуть файл LCDALPHA.DLL и перерисовать таблицу кодировки. можно хоть CP-1251 нарисовать. Кому лень рисовать - могу поделиться.
SC1602B_1_.pdf ( 129.04 килобайт )
Кол-во скачиваний: 392
t13.pdf ( 114.58 килобайт )
Кол-во скачиваний: 410
t12.pdf ( 123.98 килобайт )
Кол-во скачиваний: 309
t10.11.pdf ( 70.88 килобайт )
Кол-во скачиваний: 307
t8.9.pdf ( 64.43 килобайт )
Кол-во скачиваний: 331[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
Прикрепленные файлы
t05.07.pdf ( 108.29 килобайт )
Кол-во скачиваний: 178
|
|
|
|
|
Jul 21 2009, 09:49
|
Местный
  
Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028

|
Цитата(volodya @ Jul 21 2009, 07:35)  Вообщето в комплекте MPLAB IDE прилагается библиотека в числе всего прочего библиотечка для работы с такой серией дисплеев. Хорошо прокоментировано, доступно для понимания. Рекомендую ознакомиться перед изобретением велосипеда. хочу высказать своё мнение в разрезе данного вопроса . Я когда-то тоже долго мучался - не мог вывести буквы на дисплей - всё оказалось банально просто - наши люди не привыкли читать документацию(изучать матчасть) перед тем как что-то делать а студенты и подавно не утруждают себя таким пошлостями - ЧИТАТЬ перед тем как ДЕЛАТЬ - молодость даёт о себе знать- всё делать сходу "снахрапа" Скачайте любой дэйтшит на контроллер HD44700 и сделайте тютелька-в-тютельку как там "РАЗЖЁВАНО"!!!!!!! и особенно обратите внимание на времена задержек если не юзаете флаг готовности! В первую очередь читать ДОКИ а на чужих примерах лучше проверять насколько вы разобрались и находить чужие ошибки в исходниках!  Могу при необходимости дать исходники СВОИ - но они на С! Настоятельно рекомендую не засижываться на АСМ - сам когда-то был его приверженцем пока коллега не "насильно" :-)) не заставил перейти на С о чём совсем не жалею . На асм денег не заработаешь - только как хобби! Но это уже ОффТоп...
|
|
|
|
|
Jul 21 2009, 23:02
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(backa @ Jul 21 2009, 12:49)  хочу высказать своё мнение в разрезе данного вопроса . Я когда-то тоже долго мучался - не мог вывести буквы на дисплей - всё оказалось банально просто - наши люди не привыкли читать документацию(изучать матчасть) перед тем как что-то делать а студенты и подавно не утруждают себя таким пошлостями - ЧИТАТЬ перед тем как ДЕЛАТЬ - молодость даёт о себе знать- всё делать сходу "снахрапа" Скачайте любой дэйтшит на контроллер HD44700 и сделайте тютелька-в-тютельку как там "РАЗЖЁВАНО"!!!!!!! И... процентов на 80 индикатор не заработает... Сейчас HD44780 ( а не HD44700) в чистом виде практически не применяется... Другие чипы, другие задержки, отличия в инициализации, плюс частые ошибки и неточности в PDF некоторых производителей...
|
|
|
|
|
Jul 22 2009, 11:47
|
Местный
  
Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028

|
Цитата(HHIMERA @ Jul 22 2009, 02:02)  И... процентов на 80 индикатор не заработает... Сейчас HD44780 ( а не HD44700) в чистом виде практически не применяется... Другие чипы, другие задержки, отличия в инициализации, плюс частые ошибки и неточности в PDF некоторых производителей... согласен насчёт того что может стоять другой конроллер но в SC1602BULT 100%совместимый с HD44780 (навскидку не вспомнил точную маркировку :-)) ) стоит !!! Сам его использовал когда-то ... Я пытался донести мысль что в 1 очередь надо немного почитать про то что хочешь ОСВОИТЬ а не сразу кидаться "писать" проги иди разбирать чужие проги !!!!!
|
|
|
|
|
Jul 23 2009, 10:53
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(HHIMERA @ Jul 22 2009, 03:02)  И... процентов на 80 индикатор не заработает... Сейчас HD44780 ( а не HD44700) в чистом виде практически не применяется... Другие чипы, другие задержки, отличия в инициализации, плюс частые ошибки и неточности в PDF некоторых производителей... Да ладно страсти-то рассказывать ! Клоны-не клоны, а совместимость заявляется и есть на практике (ну, у МЭЛТовских какие-то свои заморочки, но при достаточно экзотической логике работы с индикатором, чтобы на это попасть, надо специально постараться). Задержки регламентированы, и если соблюдать рекомендации в точности - работает всегда и везде... Что до "ошибок и неточностях в PDF" - так и не надо пользоваться "левыми" PDF. Есть родной тошибовский даташит - по нему и работать. Тонкости выплывают, когда модуль какой-нибудь нестандартный, с преобразователем питания, например.
|
|
|
|
|
Jul 23 2009, 19:41
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(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... Мне их читать не надо - я их наизусть выучил...
|
|
|
|
|
Jul 23 2009, 20:21
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(zltigo @ Jul 23 2009, 22:55)  Это в раделе "примера"-отсебятины написанного каким-нибудь полуграмотным китайцем в левом китайском даташите она "разная", а в реале если действовать хоть чуть-чуть подумать все эти многочисленные клоны (не менее десятка абсолютно безвестных прошли через меня) совершенно спокойно работают по одной процедуре инициализации вдумчиво написанной в процессе чтения единственного хитачевского мануала. При всём Уважении... Спорить я не буду, у меня то всё работает... Пройдитесь по форумам и посмотрите на количество вопросов по HD44780 "совместимых" индикаторов, что-то не совсем гладко и сладко... И топикстартеру никто толком не ответил... Так киньте ему Ваш универсальный пример, который "совершенно спокойно работает по одной процедуре инициализации вдумчиво написанной в процессе чтения единственного хитачевского мануала."...  А я выделю время, чтобы взять все что у меня есть клоны, сдуть с них пыль и подключить... О результатах доложу...
|
|
|
|
|
Jul 23 2009, 21:00
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(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 указаны диапазоны задержек. И, насколько помню, крайние случаи. Т.е. если выдержать худший вариант - все работает. Ну и фактически - да, работает (уж поработал я с ними изрядно, с самыми разными). Один раз написал инициализацию и копирую ее из проекта в проект, с разными индикаторами - ну ни разу никаких проблем.
|
|
|
|
|
Jul 23 2009, 21:03
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(HHIMERA @ Jul 23 2009, 23:21)  Пройдитесь по форумам и посмотрите на количество вопросов по HD44780 "совместимых" индикаторов, что-то не совсем гладко и сладко... И топикстартеру никто толком не ответил... Да надоело просто даже читать дежурные вопросы  Цитата Так киньте ему Ваш универсальный пример.... В общем-то не жалко и помнится уже выкладывал, только 99,9% вопрошателей рассчитывают на волшебные решения и просто не смогут нормально привязать к железу  и диаграммы с гарантированными таймингами выстроить. Обычно ими вообще не заморачиваются, а там их довольно много гарантированных интервалов от 10ns, 20ns, 60ns, 230ns, 500ns, 1us, 2us. Кстати, сейчас глянул исходники - одно исключение было - Самсунговский клон выставлял бит готовности на 1/2 такта раньше, нежели был реально готов. Пришлось задержку добавить (из расчета на ~270KHz тактовой). Цитата А я выделю время, чтобы взять все что у меня есть клоны, сдуть с них пыль и подключить... О результатах доложу... Клонов и у меня достаточно, а о результатах я доложил.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 25 2009, 18:49
|
Группа: Участник
Сообщений: 14
Регистрация: 2-06-09
Пользователь №: 49 837

|
Товарищ, вот здесь все подробно разжевано - как подключить ЖКИ к pic, как в него потом писать, восьмибитный интерфейс, четырехбитный интерфейс, ... Короче, читай. http://radiohlam.ru
|
|
|
|
|
Jul 27 2009, 05:50
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(SYurev @ Jul 19 2009, 06:42)  К примеру по даташиту для WH1602D адреса начинаются с 0x00 и 0x40. Да. И именно с этих адресов начинаются строки в любом индикаторе на 44780-совместимом контроллере. Цитата(SYurev @ Jul 19 2009, 06:42)  Прописываю их в модели и программе получаю пустой экран. Возвращаю к дефолным модельным 0x80 и 0xC0 - всё работает как прежде... А теперь наконец прочитайте хоть один даташит, ссылками на которые вас тут просто завалили и разберитесь - где с коде 0xC0 адрес (и какой именно), а где - команда установки курсора.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 28 2009, 07:46
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 22-11-06
Из: Пермь
Пользователь №: 22 604

|
Цитата(Сергей Борщ @ 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. Для этого в модели адреса доступны для изменения. Впрочем я уже реализовал модель в железе, там с даташитными адресами всё прекрасно работает. Т.е. модель в протеусе игнорирует не дефолтные значения.
Сообщение отредактировал SYurev - Jul 28 2009, 07:48
|
|
|
|
|
Jul 28 2009, 10:31
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(SYurev @ Jul 28 2009, 10:46)  В каком коде вы мне предлагаете разобраться уважаемый? Я его сам писал. В шестнадцатиричном коде 0xC0. Читайте по губам: 0x80, 0xC0 - это не адреса, это команда установки курсора и адрес в одном флаконе. Пока вы этого не поймете - у вас "адреса" будут отличаться.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 28 2009, 11:57
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 22-11-06
Из: Пермь
Пользователь №: 22 604

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

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(SYurev @ Jul 28 2009, 14:57)  Покажите мне даташит, где сказано, что адреса строк указаны с учетом инструкции Откройте любой даташит на HD44780 или клон, которых несколько выложено только на этой ветке форума, и в любом из низ написано, что адрес кодируется семью битами. Восьмой бит - код инструкции "установка курсора". А теперь сформируйте команду "установить курсор на начало второй строки" используя адрес 0x40 и "адрес" 0xC0. Что получилось в каждом случае? Цитата(SYurev @ Jul 28 2009, 14:57)  Вот и получается, что в pdf от winstar адреса указаны честные, без бита инструкции, а в модели должна быть введена инструкция целиком. Я понятия не имею что за модель в протеусе, но наверное она управляется подачей сигналов на "входы" индикатора, точно так же, как и реальный индикатор. А реальному индикатору подать отдельно команду, отдельно адрес никак невозможно.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 28 2009, 15:36
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(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
|
|
|
|
|
Jul 28 2009, 16:07
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 22-11-06
Из: Пермь
Пользователь №: 22 604

|
Цитата(rezident @ Jul 28 2009, 21:36)  Там банальная ошибка составителей описания. Вот это меня и ввело в заблуждение, адреса там с учетом бита инструкции... Теперь разобрался.
|
|
|
|
|
Aug 28 2009, 07:14
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578

|
Был у нас проект на микротипсовском HD44780-подобном жк. Сколько мы на него времени убили чтоб нормально инициализировался просто жуть... В результате взяли команды инициализации из статьи журнала Радио 2001 №4. Невероятно но факт, радиогубительство иногда бывает востребовано.
Сообщение отредактировал RA3WUM - Aug 28 2009, 07:17
--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх! В. Кипелов, Беги за солнцем.
|
|
|
|
|
Feb 20 2011, 15:01
|
Группа: Участник
Сообщений: 5
Регистрация: 21-02-09
Пользователь №: 45 186

|
Немного не там, но вывожу 2 символа на первую строку на LM044L в 4-битном режиме, в Proteus пропадает первый символ, а в Multisim всё работаект, где собака порылась??? И как заменить кодовые страницы в dll
Сообщение отредактировал R-Max - Feb 20 2011, 15:02
|
|
|
|
|
Feb 20 2011, 19:50
|
Группа: Участник
Сообщений: 5
Регистрация: 21-02-09
Пользователь №: 45 186

|
Вывожу 2 символа на первую строку на LM044L в 4-битном режиме в Proteus -> пропадает первый символ, а в Multisim на HD44780 всё работаект, где собака порылась???
Сообщение отредактировал R-Max - Feb 20 2011, 19:50
|
|
|
|
|
Feb 22 2011, 20:55
|
Группа: Участник
Сообщений: 5
Регистрация: 21-02-09
Пользователь №: 45 186

|
В железе тоже неадекватно работало, поэтому решил симулятором побаловаться. А проблему решил увеличением временных задержкек из даташита в 10 раз и дополнительной командой при инициализации. Proteus в отличие от Multisim ниче так ЖК симулирует и кодировку можно в нем менять и обсчитывает схему побыстрее.
Сообщение отредактировал R-Max - Feb 22 2011, 20:59
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|