Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 25.05.2008, 13:29   #1
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
Unhappy LCD и PIC16F628

Привет! проблемка с выводом данных на ЖКИ (2х16)
немогу разобраться что делаю не так. может где-то закралась ошибка или что еще неверно указываю. Выводит тока 2 слова, в конец первой строк и в конец второй строки. Остальные мною введенные данные не показывает. Вот код программы может кто чего поможет, ибо незнаю уже за что браться. Перечитал весь ЖКИ даташит и про пик почитал и все же, может чего упустил.....
Цитата:
list p=16F628
#include <p16F628.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC & _MCLRE_ON & _LVP_OFF & _BODEN_OFF

CBLOCK 0x20

;*** Переменные ***
Kint0 ;переменые для коректировки времени и задержок
Kint1
Kint2
Kint3
Kint4
Kint5
Kint6
laikas0 ;переменые для подпрограмм
laikas1
laikas2
laikas3
laikas4
laikas5
laikas6
laikas7
ENDC

;***** Pastoviosios *****
E EQU 5 ; портА
RS EQU 3 ; портА

;****** Pagrindine programa *****
ORG 0x000
IFDEF __16F628
movlw B'00000111'
movwf CMCON ; компоратор офф
ENDIF

clrf PORTA ; обнуляем перемнные
clrf PORTB
clrf Kint1
clrf Kint3
clrf Kint5
clrf laikas0
clrf laikas1
clrf laikas2
clrf laikas3
clrf laikas4
clrf laikas5
clrf laikas6
clrf laikas7

bcf STATUS,Z ;очищаем Z

bsf STATUS,5 ;переходим в 1 банк
movlw b'00000000'
movwf TRISA
movlw b'00000000'
movwf TRISB
bcf OPTION_REG,NOT_RBPU ;внутрение резисторы включаем для порта Б
bcf STATUS,5 ;возвращаемся в 1 банк

;****** LCD инициализация ******
call Velin200ms ;задержка 200мкс
movlw b'00110000' ;
call Komanda ;пп шлет сигналы в индикатор
call Velin5ms

movlw b'00110000' ;
call Komanda ;пп шлет сигналы в индикатор
call Velin5ms

movlw b'00110000' ;
call Komanda ;пп шлет сигналы в индикатор
call Velin5ms

movlw b'00111000' ; установка 8 битов
call Komanda
call Velin5ms

movlw b'00001000'
call Komanda
call Velin5ms

movlw b'00000100'
call Komanda
call Velin5ms

movlw b'00001100'
call Komanda
call Velin5ms

;****** Ввод знаков ****
Start1
movlw b'00000001' ;обнуляем ЖКИ
call Komanda
call Velin5ms

movlw b'10000000' ;устанавливем на первую строку ЖКИ 2х16 первой строки.
call Komanda
call Velin5ms

movlw '0' ;вводим чмсла, которые будут отображатся на ЖКИ
call Duomenys ; все идут по очереди до 16 знака первой строки ЖКИ
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw ':'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw ':'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw ' '
call Duomenys
call Velin100mks

movlw 'L'
call Duomenys
call Velin100mks

movlw 'a'
call Duomenys
call Velin100mks

movlw 'i'
call Duomenys
call Velin100mks

movlw 'k'
call Duomenys
call Velin100mks

movlw 'a'
call Duomenys
call Velin100mks

movlw 's'
call Duomenys
call Velin100mks

movlw ' '
call Duomenys
call Velin100mks


movlw b'11000000' ; указываем адрес начало второй строки ЖКИ
call Komanda ; записываем туда данные, снова все подряд до 16 знака второй строки ЖКИ
call Velin5ms

movlw '0'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw '.'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw '.'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw '0'
call Duomenys
call Velin100mks

movlw ' '
call Duomenys
call Velin100mks

movlw 'D'
call Duomenys
call Velin100mks

movlw 'a'
call Duomenys
call Velin100mks

movlw 't'
call Duomenys
call Velin100mks

movlw 'a'
call Duomenys
call Velin100mks

movlw ' '
call Duomenys
call Velin100mks

;call Velin2 ;вызываем задержку (невызываем) быстрее симулятор работает

; ******** Ввод чисел в 8 знак индиктора, первой строки *****
Start
movlw b'10000111' ; указывваем адрeс DDRAM 8 знака
call Komanda
call Velin100mks
incf laikas0,1 ;добавляем к laikas0 +1
movf laikas0,0 ; записывам в W
sublw d'10' ; отнимает из 10 W значение
btfsc STATUS,Z ; проверяем его, если 0 то переходим дальше
call skiltis7 ; вызываем 7 знак ЖКИ
movf laikas0,0 ;вводим снова переменную в рабочий регистр
call lentele ; вызываем таблицу данных
call Duomenys
call Velin100mks
;call Velin2
goto Start

;clrf laikas0
;clrf laikas1
;clrf laikas2
;clrf laikas3
;clrf laikas4
;clrf laikas5

;************************************************* *****
;**** Подпрограмма Komanda ****
;************************************************* *****
Komanda
bcf PORTB,RS ; переход в режим записи
movwf PORTA ;передача данных в индикатор
nop
nop
bsf PORTB,E ; команда записи
nop
nop
nop
bcf PORTB,E ; игнор команды из МК
nop
nop
return
;************************************************* *********
;***** Подпрограмма ввода данных ****
;************************************************* *********
Duomenys
bsf PORTB,RS ; тоже самое что и Команда
movwf PORTA
nop
nop
bsf PORTB,E
nop
nop
nop
bcf PORTB,E
nop
nop
return

;************************************************* ******
;*********** Циклы задержек ***********
;************************************************* ******
;*** 100mks задержка ****
Velin100mks
movlw d'33'
movwf Kint0
ciklas0 decfsz Kint0,1
goto ciklas0
return

;**** 5ms задержка*****
Velin5ms
movlw d'7'
movwf Kint2
ciklas2 decfsz Kint1,1
goto ciklas2
decfsz Kint2,1
goto ciklas2
return

;**** 200ms задержка ****
Velin200ms
ciklas3 decfsz Kint1,1
goto ciklas3
decfsz Kint3,1
goto ciklas3
return

;**** 0.8-200 ms задержка ***
Velin1
movlw d'19'
movwf Kint4
ciklas4 decfsz Kint1,1
goto ciklas4
decfsz Kint4,1
goto ciklas4
return

;**** 0.2-50s задержка ****
Velin2
movlw d'5'
movwf Kint6
ciklas5 decfsz Kint1,1
goto ciklas5
decfsz Kint5,1
goto ciklas5
decfsz Kint6,1
goto ciklas5
return
;************************************************

;******* Таблица данных *********
;************************************************
lentele
addwf PCL,1
retlw '0'
retlw '1'
retlw '2'
retlw '3'
retlw '4'
retlw '5'
retlw '6'
retlw '7'
retlw '8'
retlw '9'

;***************************

;**** Ввод цифор в 7 знак ЖКИ ***********
skiltis7
movlw b'10000111' ;вводим в 8 знак 0 и сбрасываем переменную laiaks0 yf 0
call Komanda
call Velin100mks
movlw'0'
call Duomenys
call Velin100mks

clrf laikas0
movlw b'10000110' ; указываем 7 знак, кукда будет вводится числа

call Komanda ; программы задержек и вывода на ЖКИ
call Velin100mks
incf laikas1,1
movf laikas1,0
sublw d'6'
btfsc STATUS,Z ;тоже что и для 8 знака
call skiltis5

movf laikas1,0
call lentele
call Duomenys
call Velin100mks

return

;**** ввод числа в 5 знак ЖКИ ***********
skiltis5
movlw b'10000110' ;все тоже самое для 5 знака
call Komanda ; ввод 0 в 7 знак, 6 знак оставляю для двоеточия
call Velin100mks
movlw'0'
call Duomenys
call Velin100mks

clrf laikas1 ; уазываем 5 знак, и цикл ввода цифорок
movlw b'10000100'
call Komanda
call Velin100mks

incf laikas2,1
movf laikas2,0
sublw d'10'
btfsc STATUS,Z
call skiltis4

movf laikas2,0
call lentele
call Duomenys
call Velin100mks
return

;**** ввод числа в 4 знак ***********
skiltis4 ;тоже самое для 4 знака
movlw b'10000100'
call Komanda
call Velin100mks
movlw'0'
call Duomenys
call Velin100mks

clrf laikas2
movlw b'10000011'

call Komanda
call Velin100mks
incf laikas3,1
movf laikas3,0
sublw d'6'
btfsc STATUS,Z
call skiltis2

movf laikas3,0
call lentele
call Duomenys
call Velin100mks
return

;**** ввод знака в 2 ***********
skiltis2
;тоже самое для 2 знака
movlw b'10000011'
call Komanda
call Velin100mks
movlw'0'
call Duomenys
call Velin100mks

clrf laikas3
movlw b'10000001'

call Komanda
call Velin100mks
incf laikas4,1
movf laikas4,0
sublw d'4'
btfsc STATUS,Z
call skiltis1

movf laikas4,0
call lentele
call Duomenys
call Velin100mks
return

;**** Skaiciu ikelimas i 1 skilti ***********
skiltis1 ; тоже самое для 1 знака, 3 знак остаётся для ":"

movlw b'10000001'
call Komanda
call Velin100mks
movlw'0'
call Duomenys
call Velin100mks

clrf laikas4
movlw b'10000000'

call Komanda
call Velin100mks
incf laikas5,1
movf laikas5,0
sublw d'3'
btfsc STATUS,Z
call day2 ;вызов пп для переменны даты (дней месяца)

movf laikas5,0
call lentele
call Duomenys
call Velin100mks
return

;**** ввод числа в 10 знак второй строки ЖКИ (дата) ***********
day2

movlw b'10000001'
call Komanda
call Velin100mks
movlw'0'
call Duomenys
call Velin100mks

clrf laikas5
movlw b'11001001' ;адрес 10 знака 2 строки ЖКИ

call Komanda
call Velin100mks
incf laikas6,1
movf laikas6,0
sublw d'10'
btfsc STATUS,Z
call day1

movf laikas6,0
call lentele
call Duomenys
call Velin100mks
return

;************************ ввод знака в 9 знак ЖКИ (дата) **********
day1

movlw b'11001001'
call Komanda
call Velin100mks
movlw'0'
call Duomenys
call Velin100mks

clrf laikas6
movlw b'11001000'

call Komanda
call Velin100mks
incf laikas7,1
movf laikas7,0
sublw d'4'
btfsc STATUS,Z
goto Start1 ;возвращаемся в основную программу

movf laikas7,0
call lentele
call Duomenys
call Velin100mks
return

END ; конец


DrejAn вне форума   Ответить с цитированием
Старый 25.05.2008, 13:50   #2
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,652
Вес репутации: 5137/157
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию пара замечаний

Цитата:
Сообщение от DrejAn Посмотреть сообщение
Привет! проблемка с выводом данных на ЖКИ (2х16)
немогу разобраться что делаю не так. может где-то закралась ошибка или что еще неверно указываю. Выводит тока 2 слова, в конец первой строк и в конец второй строки. Остальные мною введенные данные не показывает. Вот код программы может кто чего поможет, ибо незнаю уже за что браться. Перечитал весь ЖКИ даташит и про пик почитал и все же, может чего упустил.....
во наструячил...

на будущее.
у тебя много сочетаний типа
Код:
call Komanda
call Velin5ms
и
Код:
call Duomenys
call Velin100mks
есть смысл эту задержку ввести в саму подпрограмму, сэкономится много места.

Ещё посмотри на конец твоих подпрограмм типа
Код:
...
call lentele
call Duomenys
call Velin100mks
return
можно делать
Код:
...
call lentele
call Duomenys
goto Velin100mks
;call Velin100mks
;return
потому что та же Velin100mks своим return вернёт управление куда надо.
Так экономится одна команда.
Только вот комменты (что вместо goto) лучше оставить - чтобы самому потом не запутаться.

Что до индикатора - не надо сразу выводить две строки, начни с одного символа, потом с двух, потом с трёх. Так найдёшь, где она ломается и теряется. Такой опыт важен именно для тебя.
Greg вне форума   Ответить с цитированием
Старый 25.05.2008, 15:12   #3
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

Greg спасибо за советы, буду искать
DrejAn вне форума   Ответить с цитированием
Старый 25.05.2008, 23:49   #4
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Ответ: LCD и PIC16F628

Что-то не пойму: вначале
Код:
E EQU 5 ; портА
RS EQU 3 ; портА
а потом
Код:
Komanda
 bcf PORTB,RS ; переход в режим записи
 movwf PORTA  ;передача данных в индикатор
 nop 
 nop 
 bsf PORTB,E  ; команда записи
 nop 
 nop
 nop 
 bcf PORTB,E  ; игнор команды из МК
 nop
 nop
 return
Порт А - данные? а про RA4-RA7 не забыли.
Да и RA5 (E) - это MCLR, а он у вас включен
Что-то, по моему, тут напутано. Или я чего-то недопонял
__________________

Vanizma вне форума   Ответить с цитированием
Старый 26.05.2008, 02:06   #5
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

Цитата:
Что-то не пойму: вначале
Код:
E EQU 5 ; портА
RS EQU 3 ; портА
а потом
Код:
Komanda
bcf PORTB,RS ; переход в режим записи
movwf PORTA ;передача данных в индикатор
nop
nop
bsf PORTB,E ; команда записи
nop
nop
nop
bcf PORTB,E ; игнор команды из МК
nop
nop
return
там просто после моих всех перемен это, просто напутанно. О да, действительно RA5-RA7 заняты у меня. Хм надо 5 - MCLR. 6 CLKIN. 7 CLKOUT/ Да уж, ну что же нужно делать под 4 бита? так?
DrejAn вне форума   Ответить с цитированием
Старый 26.05.2008, 10:19   #6
Mario
Senior Member
 
Аватар для Mario
 
Регистрация: 21.04.2007
Сообщений: 516
Вес репутации: 1151/55
Mario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud of
По умолчанию Ответ: пара замечаний

Цитата:
Сообщение от Greg Посмотреть сообщение
Что до индикатора - не надо сразу выводить две строки, начни с одного символа, потом с двух, потом с трёх. Так найдёшь, где она ломается и теряется. Такой опыт важен именно для тебя.
+1
Сдается мне, что где-то с адресом курсора ошибка. В код не вникал, сорри, поэтому буду голословным - помнится мне, что в 16х2 как-то хитро сделана адресация строк: 1ая (адресная) строка - это первые 8 символов 1ой и 2ой (физических) строк, 2ая (адресная) строка, соответственно, вторые 8 символов 1ой и 2ой (физических) строк.
Могу порекомендовать симуляцию всего этого в Proteus.
__________________
if(!Operate) Read(pDatasheet);
Mario вне форума   Ответить с цитированием
Старый 26.05.2008, 12:03   #7
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Ответ: LCD и PIC16F628

Цитата:
Сообщение от DrejAn Посмотреть сообщение
там просто после моих всех перемен это, просто напутанно. О да, действительно RA5-RA7 заняты у меня. Хм надо 5 - MCLR. 6 CLKIN. 7 CLKOUT/ Да уж, ну что же нужно делать под 4 бита? так?
Не проще ли под данные использовать порт B, а под RS, RW,E - биты порта A (0-3 например, или 4 - с подтягивающим резюком).
Цитата:
Сообщение от Mario
Сдается мне, что где-то с адресом курсора ошибка. В код не вникал, сорри, поэтому буду голословным - помнится мне, что в 16х2 как-то хитро сделана адресация строк: 1ая (адресная) строка - это первые 8 символов 1ой и 2ой (физических) строк, 2ая (адресная) строка, соответственно, вторые 8 символов 1ой и 2ой (физических) строк.
Ничего хитрого нет.Для всех двухстрочных ЖКИ с контроллером HD44780 (или аналогом - все, которые встечал одинаковые), первая строка - 0x0 - 0x3f, вторая строка 0x40 - 0x7F. А дальше берется кусок матрицы, в зависимости от кол-ва символов в строке (для 2x16 - 0x0 - 0x0f, 0x40 - 0x4f соответственно). В коде прибавляется 0x80 (7 бит - 1) и в путь, в ЖКИ.
Если используется не такой тип ЖКИ, то указывайте плз. его тип.
__________________

Vanizma вне форума   Ответить с цитированием
Старый 26.05.2008, 13:05   #8
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

я сам немного запутался, щас весь код вернул в начальный вид.
Цитата:
E EQU 0 ; портA
RS EQU 2; портА
сделал, так чтобы RА0 и RA2 были Е и RS.
ПортВ выводы RB3,RB4,RB5,RB6 отдаю под данные.
RB1,RB2 под UART.
Ну вот и сижу ломаю голову, для 4 битов нужно по другому организовывать передачу в ЖКИ.
а у меня под 8 бит сделано так что в пп "Komanda" в начале переходит в режим записи, потом передает чере портВ на индикатор, включается команда записи а потом выключаеться.
Цитата:
Komanda
bcf PORTA,RS ; переход в режим записи
movwf PORTB
nop
nop
bsf PORTA,E ; команда записи
nop
nop
nop
bcf PORTA,E ; игнор команды из МК
nop
nop
return
Потом пп "Duomenys" уже вписывает данные в индикатор, по той же схеме. тока отличие, в начале идет не "bcf PORTA,RS" как в "Komanda", а bsf PORTA,RS. Вот, использую IDE Simuliator, для PICов. Настраиваю ЖКИ здесь, все указываю все настройки, что дааные идут через портВ а команды по 0 и 2 потрА. Для 8 битов все работает.

Как переделать для 4 битов, пока не выходит. прочитал вот это.
Пытался сделать не выходит ничего. Для 4 битов low показывает бяки какието, а для 4 bit hi вообще ничего.

Пытался сделать по примеру одному, там правдо ЖКИ 1х16. Пытался менять биты настройки ЖКИ, не выходит. Что я здесь не правильно делаю уже нзн.
типо
Цитата:
PORTALO macro
bsf STATUS,RP0 ; Установка страницы 1 памяти
movlw b'00000000' ; Установка режима порта А
movwf TRISA ;
bcf STATUS,RP0 ; Возврат на страницу 0
endm

PORTAHI macro
bsf STATUS,RP0 ; Установка страницы 1 памяти
movlw b'00001111' ; Установка режима порта А
movwf TRISA ;
bcf STATUS,RP0 ; Возврат на страницу 0
endm
;-------------------------------------------
CLKDISP macro
bsf LCDCTRL,DISP_E ; Установка вывода Е дисплея в 1
bcf LCDCTRL,DISP_E ; Установка вывода Е дисплея в 0
endm
;-------------------------------------------
DISPCLR macro
movlw b'00000001' ; Очистка дисплея
call SENDI ; Передача команды на дисплей
endm
;-------------------------------------------
LINE1 macro
movlw b'10000000' ; Установка индикатора в 1-ю позицию
call SENDI ; 1-й строки
endm ;
;-------------------------------------------
LINE2 macro
movlw b'11000000' ; Установка индикатора в 1-ю позицию
call SENDI ; 2-й строки (или в позицию 9
endm ; однострочного индикатора)
;-------------------------------------------
LCDINIT macro
PORTALO ; Установка порта А на вывод
movlw 0xF0 ; Задержка 15 мс для инициализации ЖКИ
call LCDWAIT ;
movlw b'00000010' ; Установка 4-битного интерфейса ЖКИ
movwf LCDCTRL ; Команда в порт А
CLKDISP ; Тактовый импульс на дисплей
movlw d'5' ; Задержка 5 мс
call LCDWAIT ;
movlw b'00101000' ; Установка 4-битного интерфейса и 2-строчного режима
call SENDI ;
movlw b'00101000' ; Установка 4-битного интерфейса и 2-строчного режима
call SENDI ;
movlw b'00001000' ; Дисплей выключить
call SENDI ;
DISPCLR
movlw b'00001100' ; Дисплей включить
call SENDI ;
movlw b'00000110' ; Установить режим инкремента без сдвига
call SENDI ;
movlw 40 ; Программирование символа градуса
call SENDI ; по адресу 0
movlw 1C
call SENDD
movlw 14
call SENDD
movlw 1C
call SENDD
clrw
call SENDD
clrw
call SENDD
clrw
call SENDD
clrw
call SENDD
clrw
call SENDD
movlw 80
call SENDI
endm
DrejAn вне форума   Ответить с цитированием
Старый 26.05.2008, 14:48   #9
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

Ничерта не выходит, по ссылке что дал выше нужно сделать вот это
Цитата:
Операции записи для 4-х разрядной шины
1 Установка значения линии RS
2 Вывод значения старшей тетрады байта данных DB4...DB7
3 Установка линии Е=1
4 Установка линии Е=0
5 Вывод значения младшей тетрады байта данных DB4...DB7
6 Установка линии Е=1
7 Установка линии Е=0 8 Установка шины DB4...DB7 в состояние HI
тока ЭТО не получаеться никак.
DrejAn вне форума   Ответить с цитированием
Старый 26.05.2008, 15:51   #10
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/95
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Ответ: LCD и PIC16F628

Цитата:
Сообщение от DrejAn Посмотреть сообщение
Ничерта не выходит, по ссылке что дал выше нужно сделать вот это
тока ЭТО не получаеться никак.
Почему не получается?

Абстрагируйтесь от Вашего кода, и напишите маленькую подпрограмму которая будет делать:
Цитата:
1 Вывод значения тетрады байта данных на линии LCD DB0...DB4
2 Установка линии Е=1
3 Установка линии Е=0
Это будет продвижением в нужную сторону.
DL36 вне форума   Ответить с цитированием
Старый 26.05.2008, 16:48   #11
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

не получаеться почему то. Может я че не так симулирую? вроде когда на симуляторе устанавливаю 8 бит, то все показывает. Меняю на 4 бит hi,low и ничего не показывает.
зачем писать подпрограмку, я пытаюсь изменить эти два фрагмента
Цитата:
Komanda
bcf PORTA,RS ; переход в режим записи
movwf PORTB
nop
nop
bsf PORTA,E ; команда записи
nop
nop
nop
bcf PORTA,E ; игнор команды из МК
nop
nop
return
и

Цитата:
Duomenys
bsf PORTА,RS ; тоже самое что и Команда
movwf PORTВ
nop
nop
bsf PORTА,E
nop
nop
nop
bcf PORTА,E
nop
nop
return
чтобы под 4 бита выводило. Может это невозможно ? а я тут пытаюсь.
Прочитал что данные нужно разбить на две части, первая часть идет высшая тетрада, а потом низшая. тока никак не выходит...
DrejAn вне форума   Ответить с цитированием
Старый 26.05.2008, 17:47   #12
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/95
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Ответ: LCD и PIC16F628

Цитата:
Сообщение от DrejAn Посмотреть сообщение
не получаеться почему то. Может я че не так симулирую? вроде когда на симуляторе устанавливаю 8 бит, то все показывает. Меняю на 4 бит hi,low и ничего не показывает.
зачем писать подпрограмку, я пытаюсь изменить эти два фрагмента
и
чтобы под 4 бита выводило. Может это невозможно ? а я тут пытаюсь.
Прочитал что данные нужно разбить на две части, первая часть идет высшая тетрада, а потом низшая. тока никак не выходит...
Я внимательно смотрел, но к сожалению между верхним и нижним примерами не увидел никакой разницы. Объясните в чем разница.
DL36 вне форума   Ответить с цитированием
Старый 26.05.2008, 19:03   #13
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

вот в чем разница
Цитата:
Komanda
bcf PORTA,RS ; переход в режим записи

и

Duomenys
bsf PORTА,RS ; тоже самое что и Команда
в первом случае мы вводим 0, а во-втором вводим 1 для RS.
DrejAn вне форума   Ответить с цитированием
Старый 26.05.2008, 19:52   #14
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/95
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Ответ: LCD и PIC16F628

Цитата:
Сообщение от DrejAn Посмотреть сообщение
вот в чем разница
в первом случае мы вводим 0, а во-втором вводим 1 для RS.
Непонятно как Вы выводите полубайты. Да и временные соотношения не видны.
DL36 вне форума   Ответить с цитированием
Старый 26.05.2008, 19:57   #15
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

обьясните что за полубайты?
Временные соотношения это вы про задержки? Ну задержек тут вроде нормально напихал, в инициализацию ЖКИ, а так в программе поубирал, чтобы симулировалось скорее.
Вся проблема в том что я же хочу отобразить часы и календарь, т.е цифры меняются постоянно.Никак неполучаеться, невыходит у меня эти 8 битов разбить на 4бита. и Вывести их на жки
DrejAn вне форума   Ответить с цитированием
Старый 26.05.2008, 20:13   #16
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/95
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Ответ: LCD и PIC16F628

Цитата:
Сообщение от DrejAn Посмотреть сообщение
обьясните что за полубайты?
Временные соотношения это вы про задержки? Ну задержек тут вроде нормально напихал, в инициализацию ЖКИ, а так в программе поубирал, чтобы симулировалось скорее.
Вся проблема в том что я же хочу отобразить часы и календарь, т.е цифры меняются постоянно.Никак неполучаеться, невыходит у меня эти 8 битов разбить на 4бита. и Вывести их на жки
Полубайт это пол байта.
Код:
swapf TMP,w
andlw 0x0F  ;так получаем старший полубайт
Код:
movf TMP,w
andlw 0x0F  ;так получаем младший полубайт
DL36 вне форума   Ответить с цитированием
Старый 26.05.2008, 20:28   #17
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

это разделение 8 битов?
смотрите вот мои попытки чтото сделать. Делаю вот по этому примеру, по сути я поменял несколько чисел в инициализации ЖКИ, установил 4 Бита в инициализации ЖКИ.
Цитата:
;****** LCD инициализация ******
call Velin200ms ;задержка 200мкс
movlw b'00110000' ;
call Komanda ;пп шлет сигналы в индикатор
call Velin5ms

movlw b'00110000'
call Komanda
call Velin5ms

movlw b'00110000'
call Komanda
call Velin5ms

movlw b'00100000' ; 4 Бит ЖКИ
call Komanda
call Velin5ms

movlw b'00100000' ; 4 Бит ЖКИ
call Komanda
call Velin5ms

movlw b'00001000' ; выбор числа строк
call Komanda
call Velin5ms

movlw b'00000000'
call Komanda
call Velin5ms

movlw b'00001000' ; дисплей выключен
call Komanda
call Velin5ms

movlw b'00000000'
call Komanda
call Velin5ms

movlw b'00001100' ; дисплей включен
call Komanda
call Velin5ms

movlw b'00000000'
call Komanda
call Velin5ms

movlw b'00000100'
call Komanda
call Velin5ms
а какие дальнейшие шаги нзн.
да и еще те мои две подпрограммы Komanda i Duomenys, мне нужно передеалть по этому принципу?
Цитата:
Для вывода символа на дисплей выполняется следующая последовательность действий:

1.RS = 0, R/W = 0, E= 1.
2. Установить адрес на информационные выводы.
3. Пауза 50 мкс.
4. RS = 0, R/W = 0, Е = 0.
5. Пауза 255 мкс.
6. RS = 1, R/W = 0, Е = 1.
7. Установить код символа на информационные выводы.
8. Пауза 50 мкс.
9. RS =1,R/W=0, E = 0.
DrejAn вне форума   Ответить с цитированием
Старый 26.05.2008, 20:57   #18
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/95
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Ответ: LCD и PIC16F628

Цитата:
Сообщение от DrejAn Посмотреть сообщение
это разделение 8 битов?
смотрите вот мои попытки чтото сделать. Делаю вот по этому примеру, по сути я поменял несколько чисел в инициализации ЖКИ, установил 4 Бита в инициализации ЖКИ.

а какие дальнейшие шаги нзн.
да и еще те мои две подпрограммы Komanda i Duomenys, мне нужно передеалть по этому принципу?
Похоже на то, единственно еще неплохо добавить задержку при старте для внутренней инициализации контроллера. Лично я ставлю 500мс.
DL36 вне форума   Ответить с цитированием
Старый 26.05.2008, 21:11   #19
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

ну это добавиться задержка, а что мне делать, как сделать чтобы данные шли через 4 бита данных. Никак невыходит у меня
DrejAn вне форума   Ответить с цитированием
Старый 26.05.2008, 21:26   #20
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,652
Вес репутации: 5137/157
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Ответ: LCD и PIC16F628

Цитата:
Сообщение от DrejAn Посмотреть сообщение
ну это добавиться задержка, а что мне делать, как сделать чтобы данные шли через 4 бита данных. Никак невыходит у меня
Как - разжёвано в даташите на индикатор.
Но пока - забей. Не выходит - так не выходит. Не созрел ещё...
Greg вне форума   Ответить с цитированием
Старый 26.05.2008, 21:37   #21
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

Инициализацию я все сделал для 4 битов сделал. А что дальше делать немогу понять, все попытки впустую. Забить немогу, выполняю задание, его нужно сделать. я простов панике 3 день сижу с этим уже наверно весь нет перелистал и перечитал, пересмотрел стока программ и ничего не вышло, везде написано не так просто как у меня. и понять немогу ..
DrejAn вне форума   Ответить с цитированием
Старый 26.05.2008, 21:40   #22
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Ответ: LCD и PIC16F628

Цитата:
Сообщение от DrejAn Посмотреть сообщение
ну это добавиться задержка, а что мне делать, как сделать чтобы данные шли через 4 бита данных. Никак невыходит у меня
Взять байт.Выделить старший полубайт так, что ABCD0000, сместить вправо 0ABCD000, сбросить в 0 биты RB3-RB6 порта В (AND'ом), вывести в порт В данные (OR'ом). E выставить, ... Е убрать. Выделить младший полубайт так, что 0000EFGH, свапить EFGH0000, сместить вправо 0 EFGH000, сбросить в 0 биты RB3-RB6 порта В (AND'ом), вывести в порт В данные (OR'ом). E выставить, ... Е убрать. Все.
Не забудь, что всегда должны выводиться оба полубайта подряд.
__________________

Vanizma вне форума   Ответить с цитированием
Старый 26.05.2008, 21:50   #23
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

Vanizma это все нужно описывать в одной подпрограмме? у меня веть в одной управляющие команды в "Komanda". а во-второй "Duomenys" уже вывод знаков в индикатор. Т.е мне сделать одну пп и заменить её мои вот эти две. А взять байт это который я хочу отобразить.
Или это сделать тока в пп где уже выводяться данные т.е. "Duomenys"

Последний раз редактировалось DrejAn; 26.05.2008 в 21:58.
DrejAn вне форума   Ответить с цитированием
Старый 26.05.2008, 22:04   #24
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Ответ: LCD и PIC16F628

Цитата:
Сообщение от DrejAn Посмотреть сообщение
Vanizma это все нужно описывать в одной подпрограмме? у меня веть в одной управляющие команды в "Komanda". а во-второй "Duomenys" уже вывод знаков в индикатор. Т.е мне сделать одну пп и заменить её мои вот эти две. А взять байт это который я хочу отобразить.
Ух, нет. я описал только вывод САМОГО байта данных в порт. Он же - команда и что угодно. Но, данные и команды различаются по сигналам RW, RS. К стати, RW надеюсь не подвешан в воздухе, а на земле?
Я делал так:
1) процедура преобразования байта и запись в ЖКИ полученных полубайт (с выставлением сигнала E) - то что описано выше;
2) процедура вывода данных, в которой RW=0,RS=1 и вызывается процедура 1.
3) процедура вывода команд, в которой RW=0,RS=0 и вызывается процедура 1.
да, и после выполнения 2), 3) - запуск таймера на выдержку времени выполнения команды или записи данных. А в начале 2), 3) - проверка завершения выдержки времени.
А для команд Clear Display и Return Home - отдельно выдержку делать.
__________________

Vanizma вне форума   Ответить с цитированием
Старый 26.05.2008, 22:24   #25
DrejAn
Member
 
Регистрация: 20.05.2008
Возраст: 32
Сообщений: 57
Вес репутации: 102/36
DrejAn will become famous soon enoughDrejAn will become famous soon enough
По умолчанию Ответ: LCD и PIC16F628

вроде нет я его для РА1 призначил. хмм написал вроде понятно, а думаю с чего начать может можешь выложить какой пример из своих работ а то без наглядного примера мне не доходит.
DrejAn вне форума   Ответить с цитированием
Ответ

Метки
2x16, lcd, жки, оптимизация асма


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод на LCD Nokia 3310 строковых переменных vsvetlov Продукция MICROCHIP 6 01.10.2009 00:06
Инициализация LCD Nokia 3310 vsvetlov Продукция MICROCHIP 6 10.03.2009 22:54
PIC16F628 and LCD DrejAn Продукция MICROCHIP 94 24.11.2008 14:28
LCD без контроллеров Tsimur Smolau Продукция MICROCHIP 16 24.09.2007 20:58
Соединение lcd и клавиатуры Transwall Продукция MICROCHIP 6 11.04.2007 00:45


Часовой пояс GMT +3, время: 20:41.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot