Problem s LCD

Pavel Prochazka.zde.cz hacesoft@mujmail.cz
Sobota Listopad 5 21:01:50 CET 2005


Dobry den,
uz jsem se setkal s LCD displayem ktery BF neposilal... Tak jsem to 
udelat tak ze jsem tam dal cekani. A hotovo. Cekam 9 milisekund. A neni 
to poznat na LCD display.
Jinak, musite display prepnou na cteni, a potom muzete cekat na BF (busy 
flag). Nejprve lezou bity 7 az 4 a potom 3 az 0. To pokud pouzivate 
4+bit komunikaci.
Postupujte nasledovne:

Nastavte:
Nastavime port na vstupni
xxx:
 RS = 0
RW = 1
EN =1
//tu jsou k dispozici bity 7 az 4
zde cist port
EN = 0
EN = 1
// tu jsou k dispozici bity 3 az 0. Ale jsou nam k nicemu
EN = 0
zde muzem provest test na BF priznak. Pokud neni tak skoc na navesti XXX
Pokud jsem se priznaku BF dockali provedem
RW = 0
A muzem port konfigurovat na vystupni


To nahore je pocesteni nasledujiciho kodu, ktery je napsan pro PIC 
jednocip v jazyce C. Zde si muzete vsimnou ze mam zdrojak pripraveny pro 
obe eventuality. Jak test na cekani priznaku  BF, tak i testovani. Ktera 
se pouzije si zvolim pri prekladu kodu.

void lcd_busy (void){
#if _BF_FLAG==true //Nektere displaye neposilaji informaci o dokonceni
    TRISB1 = 1; //Nastavani RB1 na vstupni PIN
    TRISB2 = 1; //Nastavani RB2 na vstupni PIN
    TRISB4 = 1; //Nastavani RB4 na vstupni PIN
    TRISB5 = 1; //Nastavani RB5 na vstupni PIN
   
    asm ("xxx: nop");   
    //for(;;) {
        LCD_RS = 0;
        LCD_RW = 1;
        LCD_EN = 1;
        asm ("movf _PORTB,w");
        LCD_EN = 0;
        LCD_EN = 1;
        LCD_EN = 0;
        asm ("andlw _LCD_BF"); //Test na BF příznak.
        asm ("btfsc _STATUS,2"); //TEST na ZERO
        asm ("goto xxx"); //TEST na ZERO
    //    }
    LCD_RW = 0;
    TRISB1 = 0; //Nastavani RB1 na vystupní PIN
    TRISB2 = 0; //Nastavani RB2 na vystupní PIN
    TRISB4 = 0; //Nastavani RB4 na vystupní PIN
    TRISB5 = 0; //Nastavani RB5 na vystupní PIN
#else
    DelayMs(9);
#endif



Pavel Prochazka.zde.cz


snad jsem vam trochu pomohl......




Radim Hořínek napsal(a):

>Zdravim konferenci!
>Narazil jsem na "zajimavy" problem s LCD displejem. K jeho obsluze  
>pouzivam funkce z CodeVisionAVRv C. Pri simulaci v AVR studiu se mi ale  
>program docela casto zacyklil. Nakonec jsem prisel na to, ze funkce na  
>cekani na zapis vypada takto:
>#asm
>     .equ __lcd_direction=__lcd_port-1
>     .equ __lcd_pin=__lcd_port-2
>     .equ __lcd_rs=0
>     .equ __lcd_rd=1
>     .equ __lcd_enable=2
>     .equ __lcd_busy_flag=7
>#endasm
>
>__lcd_busy:
>     rcall __lcd_delay
>     sbi   __lcd_port,__lcd_enable ;EN=1
>     rcall __lcd_delay
>     sbic  __lcd_pin,__lcd_busy_flag
>     rjmp  __lcd_busy
>     cbi   __lcd_port,__lcd_enable ;EN=0
>
>Ale pritom brány 4-7 jsou a maji byt vyuzity pro posilani dat do  
>displeje.To znamena, ze pokud poslu do displeje jakakoli data, ktera  
>nastavi bit 7 na 1 (napr znak "o" a spousta dalsich) dojde k zacykleni,  
>prouoze je nasteven "busy_flag". Jak mam toto osetrit? Napadlo mejednoduse  
>to testovani vypustit, ale potom asi nebude dodrzeno spravne casovani....  
>Jaky bit mam tedy testovat?
>Prosim o radu a zaroven dekuji.
>Radim Horinek
>
>
>  
>



Další informace o konferenci Hw-list