|
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 некоторых производителей...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|