Como estamos desarrollando nuestra aplicación basada en el PIC18F66K22. Necesitamos una interfaz LCD con él. Tenemos la pantalla LCD trabajando con ella, pero el problema que estamos obteniendo es que la inicialización de la pantalla LCD dura unos 10 segundos y solo después se inicia la pantalla LCD hasta que incluso el microcontrolador no ejecuta ningún comando. Pero después de la inicialización funciona como se espera sin demora. . ¿Qué podría estar causando el problema? El controlador LCD es ili9163C. La hoja de datos se puede encontrar en enlace .
El siguiente es el código de inicialización.
void LCD_init()
{
Send_Command(0x11); //Exit Sleep
delay_ms(50);
Send_Command(0x26); //Set Default Gamma
Send_Data(0x04);
// Send_Command(0xF2); //E0h & E1h Enable/Disable
// Send_Data(0x00);
Send_Command(0xB1);
Send_Data(0x0C);
Send_Data(0x14);
Send_Command(0xC0); //Set VRH1[4:0] & VC[2:0] for VCI1 & GVDD
Send_Data(0x0C);
Send_Data(0x05);
Send_Command(0xC1); //Set BT[2:0] for AVDD & VCL & VGH & VGL
Send_Data(0x02);
Send_Command(0xC5); //Set VMH[6:0] & VML[6:0] for VOMH & VCOML
Send_Data(0x29);
Send_Data(0x43);
Send_Command(0xC7);
Send_Data(0x40);
Send_Command(0x3a); //Set Color Format
Send_Data(0x55);
Send_Command(0x2A); //Set Column Address
Send_Data(0x00);
Send_Data(0x00);
Send_Data(0x00);
Send_Data(0x7F);
Send_Command(0x2B); //Set Page Address
Send_Data(0x00);
Send_Data(0x00);
Send_Data(0x00);
Send_Data(0x9F);
Send_Command(0x36); //Set Scanning Direction
Send_Data(0xA8);
Send_Command(0xB7); //Set Source Output Direction
Send_Data(0x00);
Send_Command(0xf2); //Enable Gamma bit
Send_Data(0x01);
Send_Command(0xE0);
Send_Data(0x36);//p1
Send_Data(0x29);//p2
Send_Data(0x12);//p3
Send_Data(0x22);//p4
Send_Data(0x1C);//p5
Send_Data(0x15);//p6
Send_Data(0x42);//p7
Send_Data(0xB7);//p8
Send_Data(0x2F);//p9
Send_Data(0x13);//p10
Send_Data(0x12);//p11
Send_Data(0x0A);//p12
Send_Data(0x11);//p13
Send_Data(0x0B);//p14
Send_Data(0x06);//p15
Send_Command(0xE1);
Send_Data(0x09);//p1
Send_Data(0x16);//p2
Send_Data(0x2D);//p3
Send_Data(0x0D);//p4
Send_Data(0x13);//p5
Send_Data(0x15);//p6
Send_Data(0x40);//p7
Send_Data(0x48);//p8
Send_Data(0x53);//p9
Send_Data(0x0C);//p10
Send_Data(0x1D);//p11
Send_Data(0x25);//p12
Send_Data(0x2E);//p13
Send_Data(0x34);//p14
Send_Data(0x39);//p15
Send_Command(0x29); // Display On
}
Esta es la sección principal
void main()
{
OSCCONbits.IRCF0 = 1; //HFINTOSC 16MHz with PLLEN
OSCCONbits.IRCF1 = 1;
OSCCONbits.IRCF2 = 1;
OSCTUNEbits.PLLEN = 1;
delay_ms(5);
while(!OSCCONbits.IRCF2); //wait for HF-INTOSC oscillator frequency is stable
delay_ms(5);
Config_IO();
lcd_reset(); //LCD reset
delay_ms(5); //LCD reset complete delay'
LCD_init();
font_init();
TRISBbits.TRISB3 = 0;
TRISCbits.TRISC2 = 0;
RELAY_EN = 0;
FillFullLcd(WHITE);
//LCD_image (0,33,159,96,(unsigned char rom *)benchmark);
// sprintf(&FirmVerText[6],"%d.%d",FW[0]-0x30,FW[1]-0x30);
// setfont((void *)font_Calibri_10);
// LCD_OutText(50,97,FirmVerText,BLACK);
setfont((void *)font_Calibri_10); //added by shailesh
LCD_OutText(50,99,FirmVerText,BLACK);//added by shailesh
LCD_image (0,33,159,96,(unsigned char rom *)benchmark);
delay_ms(3000);
FillFullLcd(BLUE);
Hstart = 0;
Vstart = 0;
radius = 5;
Hend = 100;
Vend = 75;
color = BLUE;
LCD_draw_round_corner_box(2,33,157,96,75,LOGOC,1);
//LCD_Rectangle(2,33,157,96,LOGOC,1);
LCD_OutText(35,55, productstr,WHITE);
delay_ms(2000);
calibration();
while(1);
}
Aquí, en este código, se tarda unos 10 segundos en pintar toda la pantalla de azul. pero después de eso, todas las operaciones de lcd funcionan perfectamente bien y sin demora. ¿Qué podría estar causando el problema aquí?