Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
21.02.2007, 14:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Управление жки на основе HD44780
Сделал програмку вывода надписи на экран,восьми разрядную шину к жки,все работает и знаки в память записывыю вывожу,переключаю на 4 разрядную(меняю в программе команду на жки,установку на 4 разрядность данных и вывод сначало старшие потом младшие полубайты) получается какая то белеберда
что не так?
LIST P=P16F84A
#INCLUDE ‹P16F84A.INC›
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
RADIX HEX
;УЧЕБНАЯ ПРОГРАММА ,УПРАВЛЕНИЕ ИНТИЛИКТУАЛЬНЫМ ЖКИ,НА ОСНОВЕ КОНТРОЛЕРА
; 44780,ВЫВОДИТ НА ИНДИКАТОР СЛОВО "PARALLAX" В ПРЯМОМ И ЗЕРКАЛЬНОМ ВИДЕ
TEMP EQU 0X10
TEMP2 EQU 0X11
COUNTER EQU 0X12
SYN EQU 0X13
#DEFINE LCD_PWR PORTA,3
#DEFINE RS PORTA,2
#DEFINE RW PORTA,1
#DEFINE E PORTA,0
#DEFINE SHIFT STATUS,RP0
ORG 0
START BSF SHIFT
CLRF TRISA
CLRF TRISB
BCF SHIFT
BCF LCD_PWR
;ИНИЦИАЛИЗАЦИЯ
CLRF PORTB
BCF E
BCF RS
BCF RW
;---------------------------------------------------------------------
BSF LCD_PWR
CALL WAIT
;С УЧЕБНИКА ИНИЦИАЛИЗАЦИЯ ПОРТА
MOVLW 0X030
MOVWF PORTB
BSF E
NOP
BCF E
CALL WAIT2 ;ЗАДЕРЖКА 5 МС
MOVLW 0X030
MOVWF PORTB
BSF E
NOP
BCF E
CALL WAIT1 ;ЗАДЕРЖКА 160МКС
MOVLW 0X030
MOVWF PORTB
BSF E
NOP
BCF E
CALL BUSE
MOVLW B'00101000' ;РАЗРЯДНОСТЬ ДАННЫХ 8
MOVWF SYN ;ЧИСЛО СТРОК 2
CALL COMAND ;РАЗМЕР ЗНАКОМЕСТА 5Х7
MOVLW B'00001100' ;ВКЛЮЧ БЕЗ КУРСОРА
MOVWF SYN
CALL COMAND
MOVLW B'00001110' ;ИНКРЕМЕНИРОВАНИЕ КУРСОРА
MOVWF SYN
CALL COMAND
MOVLW B'00000001' ;ОЧИСТИТЬ ДИСПЛЕЯ
MOVWF SYN ;
CALL COMAND ;
MOVLW B'01000000' ;ПЕРЕВОД КУРСОРА В ОБЛАСТЬ ОЗУ
MOVWF SYN ;НАЧНАЯ С АДРЕСА 0
CALL COMAND
CLRF COUNTER
ZAPIS MOVF COUNTER,W
CALL MY_CHARS
MOVWF SYN
CALL DANNUE
INCF COUNTER,F
MOVLW .32 ;СКОЛЬКО ЗНАКОВ ЗАНОСИМ В ОЗУ НА КАЖДЫЙ ЗНАК 8 ЗНАЧЕНИЙ
SUBWF COUNTER,W
BTFSS STATUS,Z
GOTO ZAPIS
MOVLW B'10000000' ;ПЕРЕВОД КУРСОРА НА
MOVWF SYN
CALL COMAND ;ЭКРАН ДИСПЛЕЯ
VIVOD CLRF COUNTER
LOOP MOVF COUNTER,W
CALL VIVA
MOVWF SYN
CALL DANNUE
INCF COUNTER
MOVLW .16 ;ВЫВОДИМ 16 ЗНАКОВ
SUBWF COUNTER,W
BTFSS STATUS,Z
GOTO LOOP
GOTO $
;================================================= ============
;ПОДПРОГРАММА ДАННЫЕ В ЖКИ
;================================================= ============
DANNUE
CALL BUSE ;ПРОВЕРКА ГОТОВНОСТИ ЖКИ
BCF RW ;ЗАПИСЬ В ЖКИ
BSF RS ;ДАННЫЕ
MOVF SYN,W
MOVWF PORTB
NOP
BSF E
NOP
BCF E
SWAPF SYN,F
MOVF SYN,W
MOVWF PORTB
NOP
BSF E
NOP
BCF E
RETLW 0
;ПОДПРОГРАММА ЗАПИСИ НА LCD КОМАНД(КОМАНДЫ НАХОДЯТСЯ В TEMP)
COMAND CALL BUSE
BCF RW ;ЗАПИСЬ В LCD
BCF RS ;КОМАНДЫ
MOVF SYN,W
MOVWF PORTB
NOP
BSF E ;РАЗРЕШЕНИЕ ОБМЕНОМ ИНФОРМАЦИИ
NOP
BCF E ;ЗАПРЕТ
SWAPF SYN,F
MOVF SYN,W
MOVWF PORTB
NOP
BSF E
NOP
BCF E
RETLW 0
;================================================= ===========
;ПОДПРОГРАММ ПРОВЕРКИ ГОТОВНОСТИ ЖКИ
;================================================= ============
BUSE BSF RW
BCF RS
BSF SHIFT
MOVLW 0XFF ;ПЕРЕКЛЮЧАЕМ НА ВВОД
MOVWF TRISB ;ПОРТ В
BCF SHIFT
BSF E ;РАЗРЕШЕНИЕ ОБМЕНОМ ИНФЫ
NOP
MOVF PORTB,W
NOP
MOVWF TEMP
BCF E ;ЗАПРЕТ НА ОБМЕН ИНФОРМАЦИЕЙ
BTFSC TEMP,7 ;ПРОВЕРКА БИТА ЗАНЯТОСТИ LCD(ЕСЛИ 1 ТО ЗАНЯТ)
GOTO BUSE
BSF SHIFT
CLRF PORTB ;ПЕРЕВОД ПОРТА В НА ВЫВОД
BCF SHIFT
RETURN
;ПОДПРОГРАММА ЗАДЕРЖКИ СБРОСА ИНДИКАТОРА НАДО 15 МС
WAIT MOVLW .121
MOVWF TEMP
MOVLW .20
MOVWF TEMP2
LOOP1 DECFSZ TEMP
GOTO LOOP1
DECFSZ TEMP2
GOTO LOOP1
RETLW 0
;ЗАДЕРЖКА 100 МКС
WAIT1 movlw .33
movwf TEMP
wr decfsz TEMP, F
goto wr
RETLW 0
;delay = 4'000 machine cycles
WAIT2 movlw .48
movwf TEMP2
movlw .6
movwf TEMP
wr1 decfsz TEMP2, F
goto wr1
decfsz TEMP, F
goto wr1
RETLW 0
;ПОДПРОГРАММА ВЫБОРА БУКВ ДЛЯ ВЫВОДА
VIVA ADDWF PCL,F
RETLW 'M'
RETLW 0XA5
RETLW 'X'
RETLW 'A'
RETLW B'00100000'
RETLW 0XA1
RETLW 'A'
RETLW 0XE0
RETLW 2
RETLW 0
RETLW 0
RETLW 2
RETLW 1
RETLW 2
RETLW 3
RETLW 4
;ПОДПРОГРАММА ЗАНЕСЕНИЯ СПЕЦ ЗНАКОВ
MY_CHARS ADDWF PCL,F
RETLW B'000110' ;L В ЗЕРКАЛЬНОМ ВИДЕ
RETLW B'000100'
RETLW B'000100'
RETLW B'000100'
RETLW B'000100'
RETLW B'000100'
RETLW B'001110'
RETLW B'000000'
RETLW .0 ;R В ЗЕРКАЛЬНОМ ВИДЕ
RETLW .0
RETLW .13
RETLW .19
RETLW .1
RETLW .1
RETLW .1
RETLW .0
RETLW .0 ;A В ЗЕРКАЛЬНОМ ВИДЕ
RETLW .0
RETLW .14
RETLW .16
RETLW .30
RETLW .17
RETLW .30
RETLW .0
RETLW .15
RETLW .17
RETLW .17
RETLW .15
RETLW .1
RETLW .1
RETLW .1
RETLW .0 ;P В ЗЕРКАЛЬНОМ ВИДЕ
END
|
|
|
|
22.02.2007, 09:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
ЧО ТО ГЛЮЧИТ ПРОТЕУС,ПРИ ПЕРЕВОДЕ НА 4 РАЗРЯДНУЮ ШИНУ,ЖАЛЬ НЕТУ ЖКИ ЧТОБ СОБРАТЬ ПРОВЕРИТЬ В РЕАЛЕ
|
|
|
|
22.02.2007, 10:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
НО ПРИМЕР(ИЗ ПРОТЕУСА) НА ЯЗЫКЕ СИ РАБОТАЕТ
|
|
|
|
02.03.2007, 01:25
|
|
Частый гость
Регистрация: 22.12.2006
Сообщений: 31
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Мучался целый день, на второй завелось. Причина может быть в том, что он хочет, чтоб как в рекомендациях к оригинальному контроллеру сперва выдать ему 30h в управляющий регистр, потом ждать вроде миллисекунд 5, потом опять то же самое, ждать уже 100мкс, потом еще раз, сколько ждать уже не написано. Флаг занятости не читать. А вот в следующей команде уже писать 4х разрядную шину, хотя чего это я. Вот из оригинала:
Цитата:
|
Несколько слов о процессе инициализации ЖКИ-модуля. Производитель контроллера рекомендует выполнять следующую последовательность действий для инициализации. Выдержать паузу не менее 15 мс между установлением рабочего напряжения питания (› 4,5 В) и выполнением каких-либо операций с контроллером. Первой операцией выполнить команду, выбирающую разрядность шины (это должна быть команда $30 независимо от того, какой разрядности интерфейс вы собираетесь использовать в дальнейшем), причем перед выполнением этой операции не проверять значение флага BF. Далее опять выдержать паузу не менее 4,1 мс и повторить команду выбора разрядности шины, причем перед подачей команды вновь не производить проверку флага BF. Следующим шагом необходимо вновь выдержать паузу, на этот раз 100 мкс, и в третий раз повторить команду установления разрядности шины, вновь без проверки BF. Эти три операции являются инициализирующими и призваны вывести контроллер в исходный режим работы (то есть перевести в режим работы с 8-ми разрядной шиной) из любого состояния. Следом за ними нормальным порядком (без выдерживания пауз, но с проверкой флага BF) выполняется инициализация режимов работы с выдачей инициализирующей последовательности, аналогичной указанной в таблице 7 (содержащей в том числе команду выбора необходимой разрядности шины).
Необходимо помнить, что когда Вы объявляете режим работы с 4-х разрядной шиной, то есть выдаете команду $20, то делаете это обычно из 8-ми разрядного режима, который устанавливается автоматически после подачи напряжения питания, а значит вы не сможете адекватно объявить необходимое значение флагов N и F, располагающихся в младшей тетраде команды установки разрядности шины. Поэтому команду необходимо повторить в уже установившемся 4-х разрядном режиме путем последовательной передачи двух тетрад, то есть для 4-х разрядного режима образом.
|
__________________
Ничто так не говорит об отсутствии доказательств, как слова: бесспорно, очевидно, общеизвестно...
|
|
|
|
02.03.2007, 07:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
проверю как время будет
спасибо за помощь
|
|
|
|
04.03.2007, 20:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Переделал,работает на вывод(в 4 разрядном формате),но как только хочу записать свои знаки,записывает в память,но на экран не выходит потом,в чем дело,не пойму
вот в этом куске,после записи в память индикатора
BTFSS STATUS,Z
GOTO ZAPIS
MOVLW B'10000000' ;ПЕРЕВОД КУРСОРА НА
MOVWF SYN ;ЭКРАН ДИСПЛЕЯ
CALL COMAND ;ДОЛЖНО ВЫСВЕТИТСЯ КУРСОР НА ЭКРАНЕ,А ЕГО НЕТ,В ЧЕМ ДЕЛО?
MOVLW B'00000010' ;ОЧИСТИТЬ ДИСПЛЕЯ
MOVWF SYN ;
CALL COMAND ;
ВСЕ ПРОГРАМУ,НИЖЕ В АРХИВЕ,ТАМ ЖЕ ШЛУ РУССКИЙ ТЕКСТ НА ЖКИ,ТАМ МОЖНО ЛЮБОЙ СИМВОЛ СДЕЛАТЬ
Прикрепленный файл: 2160486.rar
|
|
|
|
04.03.2007, 20:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
НА ЖКИ ДЛЯ ПРОТЕУСА
Прикрепленный файл: 5538751.rar
|
|
|
|
04.03.2007, 20:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
lisergin_ у тебя записались символы в жки и вывел на экран?
|
|
|
|
04.03.2007, 20:37
|
|
Частый гость
Регистрация: 22.12.2006
Сообщений: 31
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Тяжковато читать, ну ничего.
Смотри, идея какая. Если охота отладить юзер интерфейс, просто заменяю символы русские на аглицкие, по количеству. Потом, уже в девайсе, достраиваю. Протеусовские экраны глючит и даже не в отсутствии русского дело. Просто даже для той же инициализации достаточно записать 0х30 раз, подождать 5мс и потом выдать команду для четырехразрядной шины. А с тем, чтоб писать туда что-то вообще не парился. Не для протеуса дело это а для макета.
В общем, не парся, протеус - хорошо, макет - нужно...
__________________
Ничто так не говорит об отсутствии доказательств, как слова: бесспорно, очевидно, общеизвестно...
|
|
|
|
05.03.2007, 05:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
понятно,спасибо за объяснения,я пока изучаю жки,пробую сам програмки делать,а как жки появится состряпаю что нибудь полезное.Попробую слепить что нибудь со сдвиговым регистром,управлять по двум проводам(извиняюсь за правописание )
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Не запускается ЖКИ на KS0066 ЖКИ WH2002L
|
jtlex |
Микроконтроллеры, АЦП, память и т.д |
0 |
04.04.2008 12:09 |
LCD на контроллере HD44780
|
yga |
Микроконтроллеры, АЦП, память и т.д |
8 |
03.12.2007 16:50 |
PIC16F84A и LCD HD44780
|
I_0 |
Микроконтроллеры, АЦП, память и т.д |
16 |
20.09.2006 12:06 |
вОПРРОС ПРО HD44780
|
sergunrussia |
Микроконтроллеры, АЦП, память и т.д |
7 |
26.08.2006 00:25 |
инициализация KS0066U (или HD44780).
|
xelos |
Микроконтроллеры, АЦП, память и т.д |
9 |
21.11.2004 13:06 |
Часовой пояс GMT +4, время: 01:14.
|
|