TODOPIC
Microcontroladores PIC => Pic32 => Mensaje iniciado 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.
-
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!!! ;)
-
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
-
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
-
sabes que tal velocidad de respuesta tienen?? esque estuve probando con una T6963C y veias como se iba dibujando la imagen
-
Hola a todos!
Tal vez tu pantalla se pueda controlar por medio de una interfaz LVDS :-/
-
PD: post del 2007 xD
-
nunca es tarde para el conocimiento :D
-
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.
-
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
:-/
-
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
-
Hola vtronic, adjunto una libreria que adapte del glcd de ccs para una pantalla 320x400 con controlador ILI9327.
saludos
-
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 :)
-
8 o 16 bits? Respecto a una libreria, busca en la red, seguro encuentras para un avr o arm, luego lo portas ;-)
-
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.
-
Gracias manwenwe es que todavia me confunden este tipo de interface y las diferencias entre RGB y el 8080.
-
É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.
-
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.
-
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).
-
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 :)
#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.
-
Una birra es una cerveza jejejeje.
Mucha suerte con tu proyecto!!!