реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> PIC16f628A и ЖК SC1602BULT-SH-HS-G, помогите разобраться
Anty
сообщение Apr 28 2008, 14:58
Сообщение #1


Участник
*

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



доброго времени суток! может кто-нибудь работал со строковыми ЖКИ. Интересует ЖК SC1602BULT-SH-HS-G , как его соединить с PICом. А вообще интересует написание проги для вывода инфы на дисплей. Немного не понимаю, как это делается. Может кто-нибудь пояснит. Или может у кого есть пример программы. Вообще интересует прога на ассемблере, но для уяснения сути дела можно и на любом другом.
Go to the top of the page
 
+Quote Post
*antzol*
сообщение Apr 28 2008, 15:53
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 6-11-07
Пользователь №: 32 085



С каким контроллером индикатор я не нашел, но сутя по выводам на каком-нибудь аналоге HD44780.
А примеры в яндексе... smile.gif
http://www.gaw.ru/html.cgi/txt/app/lcd/pic_to_44780.htm
http://schemz.narod.ru/LCD/lcd.htm
Go to the top of the page
 
+Quote Post
Okor
сообщение Apr 29 2008, 04:27
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Anty
сообщение Apr 29 2008, 17:43
Сообщение #4


Участник
*

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



спасибо за помощь, вроде начинаю понимать. А еще такой вопрос назрел: для вывода информации я просто задаю положение курсора на экране и вывожу нужный символ. Как я понял, можно указывать любую позицию из существующих. Так? И еще, там нет никаких приколов типа выбор кристалла или т.п. ?
Go to the top of the page
 
+Quote Post
dac
сообщение May 1 2008, 11:03
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482



Цитата(Anty @ Apr 29 2008, 21:43) *
И еще, там нет никаких приколов типа выбор кристалла или т.п. ?

Там адресация нелинейная, даташит на HD44780. Или документацию на МЭЛТовские ЖКИ, там тоже, но по русски
Go to the top of the page
 
+Quote Post
Anty
сообщение May 5 2008, 12:49
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
Okor
сообщение May 5 2008, 19:30
Сообщение #7


Участник
*

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



А Вы не забыли в четырехпроводном режиме подвесить остальные выводы LCD (с 0 по 3) на питание через сопротивления? Или по крайней мере, если они подсоединены к контроллеру, то отправлять, например не "Х0h", а "Хfh"?
И еще. У меня в LCD нет кириллицы - только латиница.
Go to the top of the page
 
+Quote Post
Anty
сообщение May 6 2008, 08:38
Сообщение #8


Участник
*

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



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


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

А есть вообще конкретные цифры задержек после команд? А то в разных источниках пишут по разному и вроде все аналоги HD44780.
И может есть у кого-нибудь конкретный алгоритм инициализации и порядок вывода информации на экран?
Короче, везде пишут просто, а что-то мне уже так не кажется... wacko.gif
Go to the top of the page
 
+Quote Post
Vanizma
сообщение May 6 2008, 13:35
Сообщение #9





Группа: Новичок
Сообщений: 12
Регистрация: 4-05-08
Из: Pskov
Пользователь №: 37 266



Прикрепленный файл  WH2002M_YGH_CP.pdf ( 250.83 килобайт ) Кол-во скачиваний: 623
Цитата(Anty @ May 6 2008, 12:38) *
Ну вот кстати не знал про "Xfh". Но все равно не помогло. Все равно ничего не выводит. Я подумал, может тут проблема в задержках (может мало жду или много), переписал с модулем опроса готовности. Прога проходит до конца, т.е. флаг готовности постоянно разрешает идти дальше, а на экране пусто... Да и переписал на латинские буквы, тож не помогло...

А есть вообще конкретные цифры задержек после команд? А то в разных источниках пишут по разному и вроде все аналоги HD44780.
И может есть у кого-нибудь конкретный алгоритм инициализации и порядок вывода информации на экран?
Короче, везде пишут просто, а что-то мне уже так не кажется... wacko.gif


Проверь инициализацию. Первая команда после init - включить ЖКИ. Времена при инициализации лучше увеличить немного - 16 мс, 5 мс, 150мкс. Времена выполнения команд во всех источниках практически не отличаются: очистка,переход на начало - 1,53-1,6мс, запись данных 43 мкс, остальное 39-41 мкс. Я брал задержки - 44 мкс и 1,8 мкс.
Порядок вывода инфы: адрес - задержка на выполнение - строка данных - задержка на выполнение - переход на другую строку - .... Или адрес - задержка на выполнение - байт данных - задержка на выполнение - адрес - ....
Лучше конечно использовать флаг готовности. Не забудь, что в 4-х битном режиме нужно писать и читать всегда оба полубайта.
Ты бы лучше завел его в 8-ми битном режиме для начала, разобрался. А уж потом...
Go to the top of the page
 
+Quote Post
Vanizma
сообщение May 6 2008, 15:30
Сообщение #10





Группа: Новичок
Сообщений: 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ом. А вообще интересует написание проги для вывода инфы на дисплей. Немного не понимаю, как это делается. Может кто-нибудь пояснит. Или может у кого есть пример программы. Вообще интересует прога на ассемблере, но для уяснения сути дела можно и на любом другом.


Вся правда о твоем ЖКИ smile.gif Это http://www.sunlikedisplay.com/
аналоги тута: http://display.compel.ru/passive/passive_i...php?ser=SC1602B
Прикрепленные файлы
Прикрепленный файл  t05.07.pdf ( 108.29 килобайт ) Кол-во скачиваний: 178
 
Go to the top of the page
 
+Quote Post
Anty
сообщение May 7 2008, 08:31
Сообщение #11


Участник
*

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



Спасибо за ответы. Накопал много интересного и полезного. Буду изучать. Надеюсь, теперь получится. smile.gif
Go to the top of the page
 
+Quote Post
SYurev
сообщение Jul 19 2009, 03:42
Сообщение #12


Участник
*

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



Скажите, модель lcdalpha.dll поддерживает другие, кроме дефолтных, адреса строк?
К примеру по даташиту для WH1602D адреса начинаются с 0x00 и 0x40.
Прописываю их в модели и программе получаю пустой экран.
Возвращаю к дефолным модельным 0x80 и 0xC0 - всё работает как прежде...
Та же история и с 4-х строчником.

Сообщение отредактировал SYurev - Jul 19 2009, 03:43
Go to the top of the page
 
+Quote Post
volodya
сообщение Jul 21 2009, 04:35
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



Вообщето в комплекте MPLAB IDE прилагается библиотека в числе всего прочего библиотечка для работы с такой серией дисплеев. Хорошо прокоментировано, доступно для понимания. Рекомендую ознакомиться перед изобретением велосипеда.


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
backa
сообщение Jul 21 2009, 09:49
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028



Цитата(volodya @ Jul 21 2009, 07:35) *
Вообщето в комплекте MPLAB IDE прилагается библиотека в числе всего прочего библиотечка для работы с такой серией дисплеев. Хорошо прокоментировано, доступно для понимания. Рекомендую ознакомиться перед изобретением велосипеда.

хочу высказать своё мнение в разрезе данного вопроса . Я когда-то тоже долго мучался - не мог вывести буквы на дисплей - всё оказалось банально просто - наши люди не привыкли читать документацию(изучать матчасть) перед тем как что-то делать а студенты и подавно не утруждают себя таким пошлостями - ЧИТАТЬ перед тем как ДЕЛАТЬ - молодость даёт о себе знать- всё делать сходу "снахрапа" biggrin.gif
Скачайте любой дэйтшит на контроллер HD44700 и сделайте тютелька-в-тютельку как там "РАЗЖЁВАНО"!!!!!!! и особенно обратите внимание на времена задержек если не юзаете флаг готовности! В первую очередь читать ДОКИ а на чужих примерах лучше проверять насколько вы разобрались и находить чужие ошибки в исходниках! biggrin.gif
Могу при необходимости дать исходники СВОИ - но они на С! Настоятельно рекомендую не засижываться на АСМ - сам когда-то был его приверженцем пока коллега не "насильно" :-)) не заставил перейти на С о чём совсем не жалею . На асм денег не заработаешь - только как хобби! Но это уже ОффТоп...
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Jul 21 2009, 23:02
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



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


И... процентов на 80 индикатор не заработает... biggrin.gif
Сейчас HD44780 ( а не HD44700) в чистом виде практически не применяется... Другие чипы, другие задержки, отличия в инициализации, плюс частые ошибки и неточности в PDF некоторых производителей...
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 13:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01505 секунд с 7
ELECTRONIX ©2004-2016