TODOPIC

Microcontroladores PIC => Pic32 => Mensaje iniciado por: endSly en 24 de Noviembre de 2007, 08:11:32

Título: Controlar Pantalla TFT con Pic32 ?
Publicado por: endSly en 24 de Noviembre de 2007, 08:11:32
Buenas, quiero controlar una pantalla TFT de 640x240 pixels de 16bits con uno de los futuros Pic32. Creeis que tendra velocidad suficiente para controlarla?? Alguien sabe que tipo de controlador emplean estas pantallas y como se utilizan??

Gracias de antemano.
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: vszener en 24 de Noviembre de 2007, 09:01:22
Yo supongo que si te dará para controlarla, sinó el siguiente paso que te queda ya, es la arquitectura basada en núcleos ARM.


Suerte!!! ;)
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: endSly en 24 de Noviembre de 2007, 09:16:29
He encontrado en microchip un driver para controlar una QVGA con un pic24X a si que si que deveria bastar con un Pic32 voy a ver si consigo encontrar las especificaciones del controlador
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: Nocturno en 25 de Noviembre de 2007, 02:38:13
Yo he visto esas TFT en directo controladas por un PIC24F y funcionan estupendamente. Incluso son táctiles y Microchip facilita librerías para dibujar objetos en ellas tipo Botones, ventanas, Text Box e incluso permitir que el usuario dibuje a mano alzada sobre la misma.
Aquí un link a la Application Note de la librería:
http://ww1.microchip.com/downloads/en/AppNotes/01136a.pdf

Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: endSly en 25 de Noviembre de 2007, 13:55:40
sabes que tal velocidad de respuesta tienen?? esque estuve probando con una T6963C y veias como se iba dibujando la imagen
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: zxk en 25 de Septiembre de 2011, 18:07:55
Hola a todos!
Tal vez tu pantalla se pueda controlar por medio de una interfaz LVDS  :-/
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: MerLiNz en 25 de Septiembre de 2011, 19:07:08
PD: post del 2007 xD
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: zxk en 28 de Septiembre de 2011, 03:06:38
nunca es tarde para el conocimiento  :D
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: manwenwe en 28 de Septiembre de 2011, 03:16:29
Con PIC24D puedes controlar 640x480 8bpp pero necesitas RAM externa. Acaban de sacar tb una librería para emular un controlador gráfico en modo DOTCLOK con PIC32 pero desconozco la resolución máxima.

Luego te puedes ir a un controlador externo y pasar los datos en paralelo usando 8080 o 6080. La librería gráfica de microchip te lo permite. Los controladores más comunes son los de Solomon. En cuanto a la velocidad: si lo que quiers es pintar widgets te irá decentillo en cambio si quieres renderizar imagenes te va ir algo lento.

1 saludo.
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: zxk en 29 de Septiembre de 2011, 00:23:52
Hola manwenwe!
No sabia que ya había librerías para los pic
yo lo que estaba haciendo era conectar la LCD a mi fpga por medio de la interfaz LVDS igual con una resolución de 640x480
 :-/
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: Vtronic en 17 de Diciembre de 2011, 15:49:58
Que tal manwenwe, me podrias explicar como configurar la libreria para que transmita los datos en paralelo usando la interface 8080, Yo todavia estoy atascado en eso  :? tengo el 24fj256da210 con una tft que usa el controlador ILI9325, Gracias
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: KALLITOS en 17 de Diciembre de 2011, 17:02:26
Hola vtronic, adjunto una libreria que adapte del glcd de ccs para una pantalla 320x400 con controlador ILI9327.

saludos
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: Vtronic en 18 de Diciembre de 2011, 00:29:36
Gracias KALLITOS me ha servido de mucho, pero se me olvido mencionar que mi controlador esta conectado a una TFT de 2.4" full color, sera que la puedo iniciar asi? porque la verdad si me ahorraria mucho codigo y tiempo  :)
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: Suky en 18 de Diciembre de 2011, 00:47:52
8 o 16 bits? Respecto a una libreria, busca en la red, seguro encuentras para un avr o arm, luego lo portas   ;-)
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: manwenwe en 18 de Diciembre de 2011, 10:30:54
Que tal manwenwe, me podrias explicar como configurar la libreria para que transmita los datos en paralelo usando la interface 8080, Yo todavia estoy atascado en eso  :? tengo el 24fj256da210 con una tft que usa el controlador ILI9325, Gracias

Vtronik,

el 24fj256da210 ya tiene cntrolador gráfico integrado así que no hace falta que accedas por 8080. Puedes hacerlo directamente por RGB.  8080 o 6080 son útiles cuando tu micro no tiene controlador gráfico (ej.: PIC32MX).

1 saludo.
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: Vtronic 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.
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: manwenwe 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.
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: Vtronic 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.
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: manwenwe 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).

Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: Vtronic 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.
Título: Re: Controlar Pantalla TFT con Pic32 ?
Publicado por: manwenwe en 19 de Diciembre de 2011, 18:07:27
Una birra es una cerveza jejejeje.

Mucha suerte con tu proyecto!!!