| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| 4-bit LCD Interface problem http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=417 |
Страница 1 от 1 |
| Автор: | PIC [ Пон Фев 21, 2005 12:33 pm ] |
| Заглавие: | 4-bit LCD Interface problem |
Здравейте, виждам че се разисква тема за HD44780. Аз използвам KS0066U и се появява много странен проблем. Работи с 4-битов интерфейс , като на портВ 4-7 са данните , а на портА 0-2 са управляващите битове. Така работи , но при смяна - управляващите битове от портА 0-2 към портВ 1-3 нищо не става ??? Идеята ми е да използвам само портВ при управлението на модула /така съм предвидил и платката/ но работи само по горе описания начин. Естествено съм проверил подреждането на изводите на ЛСД спрямо порта на пик-а и в програмата съм ги предефинирал правилно , а проблема остава? Използвам пик16Ф84А може би проблема идва от това , че всичко е на един порт? |
|
| Автор: | ToHu [ Пон Фев 21, 2005 1:01 pm ] |
| Заглавие: | |
Не,не е от това проблема, някъде в програмата ти е. кай да видим процедурите за управление ан дисплея, инициалзация и т.н. ... и м-у другото, като позлваш порт b надявам се си забранил LVP функцията . не помня тоя имаше лия, но ако я има трябва да е забранена, иначе B.3 няма да функционира нормално. |
|
| Автор: | PIC [ Пон Фев 21, 2005 1:34 pm ] |
| Заглавие: | |
Това е примерна програма за въртящо се съобщение на дисплея която е работеща в този случай. При предефиниране на битовете RS , R/W и E към портВ абсолютно нищо не излиза на дисплея. Не знам какво е LVP функция /ще съм благодарен ако обясниш/, но при този процесор не съм я срещал никъде. А и друго! Значи при работеща програма използвам изчакване по-голямо от посоченото за съответната инструкция вместо да проверавам флага за заетост защото при проверката той постоянно е зает /има го като подпрограма ,но не се ползва/. list p=16F84A ; PROCESSOR TYPE #include <p16F84A.inc> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ;*************** DEFINE CONSTANT AND VARIABLES ************** w EQU 0 f EQU 1 CBLOCK H'0C' BF_temp Counter Counter_2 Counter_Wr Reg_Data Reg_Note LCD_temp ENDC ;****************** DEFINE I/O PINS ********************* #define E PORTA,0 #define RW PORTA,1 #define RS PORTA,2 ;******************************************************* ORG H'0000' goto start ;******************** START PROGRAM ********************** start bsf STATUS,RP0 movlw B'11000111' movwf OPTION_REG clrf TRISB clrf TRISA bcf STATUS,RP0 clrf PORTB clrf PORTA goto main ;----------------------------------------------------------- ;:::::::::::::::: 4-bit : LCD ::::::::::::::::::::::::::::: ;----------------------------------------------------------- Init_LCD movlw D'35' movwf Counter loop call Wait_1mS decfsz Counter,f goto loop ;------------------------------------ ;************* FUNCTION SET ********* ;------------------------------------ movlw B'00100000' movwf PORTB bsf E bcf E call Wait_60uS ;------------------------ movlw B'00100000' movwf PORTB bsf E bcf E ;------------------------ movlw B'11000000' movwf PORTB bsf E bcf E call Wait_60uS ;------------------------------------ ;******* Display ON/OFF Control ***** ;------------------------------------ clrf PORTB bsf E bcf E ;------------------------ movlw B'11000000' movwf PORTB bsf E bcf E call Wait_60uS ;------------------------------------- ;************* Display Clear ********* ;------------------------------------- clrf PORTB bsf E bcf E ;------------------------ movlw B'00010000' movwf PORTB bsf E bcf E call Wait_1mS call Wait_1mS ;------------------------------------ ;*********** Entry Mode Set ********* ;------------------------------------ clrf PORTB bsf E bcf E ;------------------------ movlw B'01100000' movwf PORTB bsf E bcf E call Wait_60uS ;------------------------------------ ;********* Initialization end ******* ;------------------------------------ return ;::::::::::::::::4-bit interface :::::::::::::::::::::::: Send_instr_43 movwf LCD_temp ; 4-bit interface movf LCD_temp,w andlw H'F0' movwf PORTB bcf RW bcf RS bsf E bcf E swapf LCD_temp,w andlw H'F0' movwf PORTB bsf E bcf E call Wait_60uS return ;: 4-bit interface :::::::::::::::::::::::::::::::::::::: Send_instr_153 movwf LCD_temp ; 4-bit interface movf LCD_temp,w andlw H'F0' movwf PORTB bcf RW bcf RS bsf E bcf E swapf LCD_temp,w andlw H'F0' movwf PORTB bsf E bcf E call Wait_1mS call Wait_1mS return ;:::::::::::::::::::::::::::::::; 4-bit interface ::::::::::::::::::::::::::::::::::::::: Send_char movwf LCD_temp ; 4-bit interface movf LCD_temp,w andlw H'F0' movwf PORTB bcf RW bsf RS bsf E bcf E swapf LCD_temp,w andlw H'F0' movwf PORTB bsf E bcf E call Wait_60uS return ;----------------------------------------------------- Check_BF bsf STATUS,RP0 movlw H'FF' movwf TRISB bcf STATUS,RP0 bcf RS bsf RW bsf E bcf E movf PORTB,w movwf BF_temp btfsc BF_temp,7 goto Check_BF bcf RW bsf STATUS,RP0 clrf TRISB bcf STATUS,RP0 return ;----------------------------------------------------------- Wait_1mS movlw D'100' movwf Counter_Wr Again nop nop nop nop nop nop nop decfsz Counter_Wr,f goto Again return ;------------------------------------------------------------ Wait_60uS movlw D'10' ; wait exactly 65uS movwf Counter_Wr Wait_Wr_ag nop nop nop decfsz Counter_Wr,f goto Wait_Wr_ag return ;------------------------------------------------------------ Wait_1 movlw D'10' movwf Counter clrf TMR0 again_1 bcf INTCON,T0IF loop_1 btfss INTCON,T0IF goto loop_1 decfsz Counter,f goto again_1 return ;----------------------------------------------------------- Message ADDWF PCL,f retlw '*' retlw '*' retlw '*' retlw '*' retlw ' ' retlw 'D' retlw 'A' retlw 'L' retlw 'L' retlw 'A' retlw 'S' retlw ' ' retlw 'D' retlw 'S' retlw '1' retlw '8' retlw 'B' retlw '2' retlw '0' retlw ' ' retlw '*' retlw '*' retlw '*' retlw '*' ;---------------------------------------------------------- main call Init_LCD movlw H'90' call Send_instr_43 clrf Reg_Note UP_1 movf Reg_Note,w call Message call Send_char INCF Reg_Note,f movlw D'24' SUBWF Reg_Note,w btfss STATUS,Z goto UP_1 UP_2 call Wait_1 movlw B'00011000' ; Display Shift to Left call Send_instr_43 goto UP_2 sleep_1 nop goto sleep_1 END |
|
| Автор: | Predator_MF [ Пон Фев 21, 2005 2:53 pm ] | ||||||||||||||||||||||||||||||||||||
| Заглавие: | |||||||||||||||||||||||||||||||||||||
Проста работа Тука проблема ти е прост, решението също... 1. Забележи, че навсякъде в подпрограмите пращаш към PORTB битове 7:4, а не 3:0...Първо оправи това... 2. Тия тричките имат нужда от промяна...
По-точно ей тия редове:
...трябва да изглеждат така:
Пример за Send_instr_43:
Оттук нататък си ти... |
|||||||||||||||||||||||||||||||||||||
| Автор: | PIC [ Пон Фев 21, 2005 4:07 pm ] |
| Заглавие: | |
Данните при мен са на портВ 7-4 и ако ги умножа с 0F то според мен тези битове след операцията ще са нула? А и по този начин си работи само управлението е от друг порт. 10101010 and 00001111 00001010 MSB LSB |
|
| Автор: | Predator_MF [ Пон Фев 21, 2005 4:22 pm ] |
| Заглавие: | |
Значи извинявай, не съм те разбрал както трябва.... |
|
| Автор: | Predator_MF [ Пон Фев 21, 2005 4:33 pm ] | |||||||||
| Заглавие: | ||||||||||
Добре де....
Ша черпиш |
||||||||||
| Автор: | PIC [ Вто Фев 22, 2005 3:04 pm ] |
| Заглавие: | |
Благодаря ти приятелю! Утре ще пробвам... Интересно ми е защо се получава така , че при запис в регистъра на константа след това не можеш да променяш битовете поотделно...какъвто е случая с портВ...предполагам , че същото важи и за регистри с общо предназначение... |
|
| Автор: | Predator_MF [ Вто Фев 22, 2005 3:12 pm ] |
| Заглавие: | |
То си може побитово...bsf,bcf...ама струва ли си да губиш 30-ина реда да гласиш битове...отколкото 4 реда да маскираш тия дето няма да ги буташ. Всичко в тоя (тия) контролери става с елементарна булева алгебра (не че съм я учил..ама съм чел малко |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|