Autor Tema: Controlar Pantalla TFT con Pic32 ?  (Leído 17950 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Vtronic

  • PIC16
  • ***
  • Mensajes: 121
Re: Controlar Pantalla TFT con Pic32 ?
« Respuesta #15 en: 18 de Diciembre de 2011, 18:02:01 »
Gracias manwenwe es que todavia me confunden este tipo de interface y las diferencias entre RGB y el 8080.

Desconectado manwenwe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2211
Re: Controlar Pantalla TFT con Pic32 ?
« Respuesta #16 en: 19 de Diciembre de 2011, 04:52:43 »
Échale un vistazo a este AP q es bastante aclaratorio:

http://ww1.microchip.com/downloads/en/AppNotes/01368a.pdf

Luego mira el datasheet de tu driver:

http://ww1.microchip.com/downloads/en/AppNotes/01368a.pdf

El modo que acepta tu pic es el que se conoce comunmente como DOTCLOCK. En el datasheet se refieren a él simpllemente como "RGB inteface". Luego busca el datasheet de tu módulo LCD y mira que pinout tiene. Verás que las lineas coinciden con las de tu pic. A parte, probablemente, tendrás 3 lineas más de interfaz serie que son las que tienes que utilizar para inicializar el driver LCD y configurar el modo operanción: si no es así es que sólo acepta un modo y  una resolución. Si tienes que configurarlo busca alguna librería gráfica de Microchip y modifica el código.

1 saludo.
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado Vtronic

  • PIC16
  • ***
  • Mensajes: 121
Re: Controlar Pantalla TFT con Pic32 ?
« Respuesta #17 en: 19 de Diciembre de 2011, 13:46:53 »
Lamentablemente es lo que ya venia pensando, mi TFT no tiene esos pines de control, los que tiene son RS, WR, RD, y CS que son los que use para la interface 8080 con otro pic, aunque en la datasheet del controlador ILI9325 aparecen los pines para la interface DOTCLOCK en el pin out de mi TFT ya no aparecen.

Al menos que pueda configurarlo por software algo que no creo que sea posible hacerlo pero seguire investigando y gracias por la Info.

Desconectado manwenwe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2211
Re: Controlar Pantalla TFT con Pic32 ?
« Respuesta #18 en: 19 de Diciembre de 2011, 15:40:42 »
Lamentablemente es lo que ya venia pensando, mi TFT no tiene esos pines de control, los que tiene son RS, WR, RD, y CS que son los que use para la interface 8080 con otro pic, aunque en la datasheet del controlador ILI9325 aparecen los pines para la interface DOTCLOCK en el pin out de mi TFT ya no aparecen.

Al menos que pueda configurarlo por software algo que no creo que sea posible hacerlo pero seguire investigando y gracias por la Info.

Sí que puedes. Bajate este projecto:

http://www.techtoys.com.hk/Displays/TY280T240320/src/AN1136Demo%20ILI9325L.rar

Busca el driver del ILI9325 (.c y .h) y los copias en un proyecto con las librerias actuales (las otras son de 2008). Corta, pega, pon el #define que toca y ya lo tienes!!!

Aún así es trabajas con 8080 te recomiendo un PIC32MX (80mips vs 16mips). Me debes una birra :P jeje

1 saludo.

PD. El amigo de techtoys tiene TFTs a precios mu razonables y además es mu serio (contrastado en 5 o 6 pedidos).

Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado Vtronic

  • PIC16
  • ***
  • Mensajes: 121
Re: Controlar Pantalla TFT con Pic32 ?
« Respuesta #19 en: 19 de Diciembre de 2011, 18:03:47 »
Vaya, Gracias por la ayuda no habia visto esas librerias, Yo estoy trabajando con el archivo de ejemplo que me dieron para la TFT actualmente lo modifique para que trabajara con 16 bits pero el archivo de imagen guardado en hex todavia esta en dos partes de 8 bits vere como hacerla a 16 bits para ahorrar algunas instrucciones y todavia soy novato en configurar el clock de este pic, la adjunto por si le sirve a alguien o si la corrigen mejor  :)

Código: [Seleccionar]
#include <p24FJ256DA210.h>

_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & FWDTEN_OFF & FWPSA_PR128 &
          WDTPS_PS32768);
//& ICS_PGx2
_CONFIG2(POSCMOD_HS & IOL1WAY_ON & OSCIOFNC_ON & FCKSM_CSDCMD & FNOSC_FRCPLL &
           PLL96MHZ_ON & PLLDIV_NODIV & IESO_OFF);

//DEFINICION DE COMANDOS CON NOMBRES COMUNES

#define FOSC 96000000LL
#define FCY       (FOSC/2)
#define delay_ms(x) __delay32(((x*FCY)/1000L))  // delays x ms


#define Bus_16                               //16bit Mode ,if you use the 8bit mode , don't define it. 
#define  LCD_DataPort PORTB        //PORTB    // High 8 bit,it will be used in 8 bit mode
//#define  LCD_DataPortL PORTA // Low 8 bit , it will not be uesd in 8 bit mode
#define LCD_RS   PORTDbits.RD4 //PORTD.4       // data and command switch
#define LCD_WR   PORTDbits.RD5 //PORTD.5        //Write control
//#define LCD_RD =P3^7;              //Read control
#define LCD_CS   PORTDbits.RD6 //PORTD.6             //chip select
#define LCD_REST PORTDbits.RD7 //PORTD.7         //reset


unsigned char image[3200]={ /*0X00,0X10,0X28,0X00,0X28,0X00,0X01,0X1B, */
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, etc....
};



void delayms(int count)  // /* X1ms */ ya no uso esto
{
        int i,j;
        for(i=0;i<count;i++)
                for(j=0;j<100;j++);
}

void LCD_Writ_Bus(int V)   //Write Data
{
   LCD_DataPort=V;   
   LCD_WR=0;
   LCD_WR=1;
}

void LCD_Write_COM(int V)    //send command
{   
   LCD_RS=0;
   LCD_Writ_Bus(V);
}

void LCD_Write_DATA(int V)  //send data
{
   LCD_RS=1;
   LCD_Writ_Bus(V);
}

void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{ int V;
    LCD_Write_COM(0x0020);V=(x1>>8);V+=x1;LCD_Write_DATA(V);   
    LCD_Write_COM(0x0021);V=(y1>>8);V+=y1;LCD_Write_DATA(V);
    LCD_Write_COM(0x0050);V=(x1>>8);V+=x1;LCD_Write_DATA(V);
    LCD_Write_COM(0x0052);V=(y1>>8);V+=y1;LCD_Write_DATA(V);
    LCD_Write_COM(0x0051);V=(x2>>8);V+=x2;LCD_Write_DATA(V);
    LCD_Write_COM(0x0053);V=(y2>>8);V+=y2;LCD_Write_DATA(V); 
    LCD_Write_COM(0x0022);                     
}

void LCD_Init(void)
{

   LCD_REST=1;
   delayms(5);   
   LCD_REST=0;
   delayms(5);
   LCD_REST=1;
   delayms(5);
   LCD_CS=0;  //enable cs
   //************* Start Initial Sequence **********//
   LCD_Write_COM(0x00E5); LCD_Write_DATA(0x78F0); // set SRAM internal timing
   LCD_Write_COM(0x0001); LCD_Write_DATA(0x0100); // set SS and SM bit
   LCD_Write_COM(0x0002); LCD_Write_DATA(0x0700); // set 1 line inversion
   LCD_Write_COM(0x0003); LCD_Write_DATA(0x1030); // set GRAM write direction and BGR=1.
   LCD_Write_COM(0x0004); LCD_Write_DATA(0x0000); // Resize register
   LCD_Write_COM(0x0008); LCD_Write_DATA(0x0207); // set the back porch and front porch
   LCD_Write_COM(0x0009); LCD_Write_DATA(0x0000); // set non-display area refresh cycle ISC[3:0]
   LCD_Write_COM(0x000A); LCD_Write_DATA(0x0000); // FMARK function
   LCD_Write_COM(0x000C); LCD_Write_DATA(0x0000); // RGB interface setting
   LCD_Write_COM(0x000D); LCD_Write_DATA(0x0000); // Frame marker Position
   LCD_Write_COM(0x000F); LCD_Write_DATA(0x0000); // RGB interface polarity
   //*************Power On sequence ****************//
   LCD_Write_COM(0x0010); LCD_Write_DATA(0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
   LCD_Write_COM(0x0011); LCD_Write_DATA(0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
   LCD_Write_COM(0x0012); LCD_Write_DATA(0x0000); // VREG1OUT voltage
   LCD_Write_COM(0x0013); LCD_Write_DATA(0x0000); // VDV[4:0] for VCOM amplitude
   LCD_Write_COM(0x0007); LCD_Write_DATA(0x0001);
   delayms(50); // Dis-charge capacitor power voltage
   LCD_Write_COM(0x0010); LCD_Write_DATA(0x1090); // 1490//SAP, BT[3:0], AP, DSTB, SLP, STB
   LCD_Write_COM(0x0011); LCD_Write_DATA(0x0227); // DC1[2:0], DC0[2:0], VC[2:0]
   delayms(50); // Delay 50ms
   LCD_Write_COM(0x0012); LCD_Write_DATA(0x001F); //001C// Internal reference voltage= Vci;
   delayms(50); // Delay 50ms
   LCD_Write_COM(0x0013); LCD_Write_DATA(0x1500); //0x1000//1400   Set VDV[4:0] for VCOM amplitude  1A00
   LCD_Write_COM(0x0029); LCD_Write_DATA(0x0027); //0x0012 //001a  Set VCM[5:0] for VCOMH  //0x0025  0034
   LCD_Write_COM(0x002B); LCD_Write_DATA(0x000D); // Set Frame Rate   000C
   delayms(50); // Delay 50ms
   LCD_Write_COM(0x0020); LCD_Write_DATA(0x0000); // GRAM horizontal Address
   LCD_Write_COM(0x0021); LCD_Write_DATA(0x0000); // GRAM Vertical Address
   // ----------- Adjust the Gamma Curve ----------//
   LCD_Write_COM(0x0030); LCD_Write_DATA(0x0000);
   LCD_Write_COM(0x0031); LCD_Write_DATA(0x0707);
   LCD_Write_COM(0x0032); LCD_Write_DATA(0x0307);
   LCD_Write_COM(0x0035); LCD_Write_DATA(0x0200);
   LCD_Write_COM(0x0036); LCD_Write_DATA(0x0008);//0207
   LCD_Write_COM(0x0037); LCD_Write_DATA(0x0004);//0306
   LCD_Write_COM(0x0038); LCD_Write_DATA(0x0000);//0102
   LCD_Write_COM(0x0039); LCD_Write_DATA(0x0707);//0707
   LCD_Write_COM(0x003C); LCD_Write_DATA(0x0002);//0702
   LCD_Write_COM(0x003D); LCD_Write_DATA(0x1D04);//1604
   
   //------------------ Set GRAM area ---------------//
   LCD_Write_COM(0x0050); LCD_Write_DATA(0x0000); // Horizontal GRAM Start Address
   LCD_Write_COM(0x0051); LCD_Write_DATA(0x00EF); // Horizontal GRAM End Address
   LCD_Write_COM(0x0052); LCD_Write_DATA(0x0000); // Vertical GRAM Start Address
   LCD_Write_COM(0x0053); LCD_Write_DATA(0x013F); // Vertical GRAM Start Address
   LCD_Write_COM(0x0060); LCD_Write_DATA(0xA700); // Gate Scan Line
   LCD_Write_COM(0x0061); LCD_Write_DATA(0x0001); // NDL,VLE, REV
   LCD_Write_COM(0x006A); LCD_Write_DATA(0x0000); // set scrolling line
   //-------------- Partial Display Control ---------//
   LCD_Write_COM(0x0080); LCD_Write_DATA(0x0000);
   LCD_Write_COM(0x0081); LCD_Write_DATA(0x0000);
   LCD_Write_COM(0x0082); LCD_Write_DATA(0x0000);
   LCD_Write_COM(0x0083); LCD_Write_DATA(0x0000);
   LCD_Write_COM(0x0084); LCD_Write_DATA(0x0000);
   LCD_Write_COM(0x0085); LCD_Write_DATA(0x0000);
   //-------------- Panel Control -------------------//
   LCD_Write_COM(0x0090); LCD_Write_DATA(0x0010);
   LCD_Write_COM(0x0092); LCD_Write_DATA(0x0600);
   LCD_Write_COM(0x0007); LCD_Write_DATA(0x0133); // 262K color and display ON
   LCD_CS=1; //disable  cs

}

void Pant(int V)
{
   int i,j;
   LCD_CS=0;
   Address_set(0,0,240,320);
    for(i=0;i<320;i++)
    {
     for (j=0;j<240;j++)
         {
            LCD_Write_DATA(V);
       }

     }
     LCD_CS=1; 
}

//#define Work pin_b4


//TRISD=0x0000;
//TRISA=0x0000;
/*LATA=0;
LATB=0;
LATD=0;*/


int main(void){
ANSB = 0x0000;
TRISB = 0x0000;
ANSD = 0x0000;
TRISD = 0;
int j,k,i;
int VV;
LCD_Init();
while(1)
   
   {
       
   Pant(0x0000);

  /* for(i=0;i<0xffff;i++)   
   {
Pant(i);                   
   }  */
   LCD_CS=0;
   for(k=0;k<8;k++)   
   {
         for(j=0;j<6;j++)
      {   
         Address_set(40*j,40*k,40*j+39,40*k+39);
          for(i=0;i<1600;i++)
          {
   VV=(image[i*2+1])<<8;VV+=(image[i*2]);
           LCD_Write_DATA(VV);
     
           }
       }
   }
   LCD_CS=1;
   delay_ms(1000);//delayms(1000);

    }

}



Ok te debo una lo unico es que no tengo idea de que es una birra  :D tengo que comprar varias TFT ya que tengo que dar una pequeña explicación de como utilizarlas pero por el momento solo dare con la interface I80 ya cuando tenga todo funcionando en dotclock la agrego.

Gracias por la info es de mucha ayuda.

Desconectado manwenwe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2211
Re: Controlar Pantalla TFT con Pic32 ?
« Respuesta #20 en: 19 de Diciembre de 2011, 18:07:27 »
Una birra es una cerveza jejejeje.

Mucha suerte con tu proyecto!!!
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -