240x320 2.4" SPI TFT LCD Touch Panel ILI9341 5/3.3V

Gracias amigos, pero desisto a la p_ta basura, llevo mas de 15 dias probando todo y nada, volveré a las LCD de texto. un saludo pueden cerrar el post.

Digo yo, y compraste el SHIELD TFT de casualidad?

Surbyte, compre la TFT junto con algunos otros elementos, placa de reles, reloj, sensor de distancia, etc, por aquel que dice de representar en una TFT los datos mejor, y poder inter-actuar a través de la pantalla táctil, poner las bombas en automático en manual etc y ahorrar interruptores y selectores. No fue de casualidad.

Descarge de la pagina elecfreaks un ejemplo para mi pantalla por la imagen veo que es la misma.

http://www.elecfreaks.com/store/24-tft-lcd-tft0124sp-p-785.html
http://www.elecfreaks.com/store/download/product/TFT/TFT01-2.2S/_24_SPI.zip

y en este caso no pide ni librerías ni nada? Tampoco me funcionó
Muchas gracias y un saludo

Nota: ¿Hay algún método para revisar paso a paso la TFT? No se revisar la comunicación serie, revisar envió datos, reloj y otros, insertando serialprint en alguna parte del código para verificar el estado, no quizas esto no es funcional pero es lo que he usado para depurar el codigo cuando me fallaba algo .

no me entendiste, ya te lo puse pero lo voy a repetir, el SHIELD TFT no es el TFT sino una placa que hace la interfaz 5 (del arduino) a 3.3V del TFT. Si conectas directo al TFT lo quemas y no obtienes nada.

Este es el shield.

y cuando dije

y compraste el SHIELD TFT de casualidad?

quise decir:

compraste la interfaz que hace falta entre tu TFT y el arduino?

No funciona mi placa con 5V?, yo entendí que el 5/3.3v significaba que funcionaba con los 2 voltajes.

Tu placa si pero tu TFT es 3.3. asi que tu sabras como lo tienes conectado.
No dijiste nada de eso?

Hola surbyte;

Asi lo conecto en Mega

Arduino D4 TFT RESET
Arduino D5 TFT CS
Arduino D6 TFT D/C
Arduino D7 TFT LED (3.3V conectado directo con un potenciometro para constraste
Arduino D51 TFT MOSI
Arduino D50 TFT MISO
Arduino D52 TFT SCK

Vcc 3.3V y GND

En UNO cambian los pines, pero no he aplicado ningun conversor de tensiones, porque crei que no era necesario.

Un saludo y gracias por contestar.

Suena interesante la interfase que propone surbyte, usando un shield-TFT para MEGA. Como tengo esos elementos a la mano me puse a hacer experimentos.

  • Arduino MEGA
  • TFT LCD Mega Shield V2.2 (ElecFreaks, 12/10/2012)
  • TFT 2.4" ILI9341 con touch panel

Así quedó la definición de hardware para la librería UTFT

// Pines del TFT 24SPI               MOSI,    SCK,  CS, RESET, D/C
// Pines del TFT-Shield MEGA        SD_DIN, SD_SCK, DB0, DB1,  DB2           
//           UTFT myGLCD(ILI9341_S5P,MOSI,    SCK,   37,  36,   35);
// Números de los pines del shield:    37     36     21   22    23
//                                  GND  1
//                                  VCC  2
//                                  LED  19

UTFT myGLCD(ILI9341_S5P,MOSI,SCK,37,36,35);

Así la de Adafruit_ILI9341

#define TFT_DC 35
#define TFT_CS 37
#define TFT_RST 36

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

En conclusión: consigue un Shield TFT para MEGA y podrás disfrutar del TFT :grinning:

PD: reconsideré mi postura respecto al MEGA, ya tiene planes a futuro XD.

Muchas gracias a los dos. Ya funciona, al final he añadido un integrado CD4050BE para cambiar la lógica de tensión de 5 a 3.3V como comentaba "TFTLCDCyg". Ahora toca la parte táctil de la pantalla que espero se me de mejor. Gracias y un saludo.

Que bien que ya lo hiciste funcionar.

La pantalla táctil la puedes manejar mediante la libreria Utouch, los 5 hilos del TFT basta con conectarlos en 5 pines digitales del arduino.

PD: no sé si también ellos deban ser conectados a otro CD4050BE ...

Pues en eso estoy. En este esquema parece que solo se utiliza un hilo (el pin8)?¿ incluye la libreria #include <Adafruit_STMPE610.h>

Perdon me corrijo ya veo que la STMPE610 es para una shield de adafruit..

El controlador de la táctil es el XPT2048. Se puede activar y calibrar con la librería Utouch

Pues ya he probado la librería Utouch y va correcta con la Mega 1280. Los pines para la conexión y la TTF que he usado son estos UTFT myGLCD(TFT01_24SP,51,52,5,4,6);, ahora me falta el touch, j_der lo que me ha costado salir del atolladero. Estoy investigando si los pines para la touch también tienen que pasar por un CD4050BE, si es así tendré que esperar unos días pues solo compre 1. Un saludo

Funciona directamente sin CD4050BE. Un saludo, ahora queda el proyecto por hacer pero esto es otro tema. Tambien queda la tarjeta SD pero no tengo en principio pensado usarla.

Que bien que has podido hacer funcionar tus fierros jejejeje y ya que nos habías aventado todos los tratos XD.

No hay que deseperarse, es mejor atacar el problema desde otra perspectiva. Igual dejé un rato el tema del lector SD.

PD: por la posición del lector SD del TFT, decidí anexar un lector microSD externo, de esta forma no tengo que tocar o mover la pantalla a cada rato. La pienso instalar en un soporte de acrílico y para la micro SD haré una ranura un lado de la pantalla.

Pues había echado las campanas al vuelo muy rápido, por que todavía no he conseguido calibrarla para que funcione con lo otros ejemplos.
La calibración me sales esto y he modificado el archivo UTouchCD.h

#define CAL_X 0x04110763UL
#define CAL_Y 0x00B89454UL
#define CAL_S 0x000EF13FUL

Pero lo puntos que se dibujan en pantalla parecen estar siempre fuera.

Me dices que el controlador de la táctil es el XPT2048, pero entiendo que no hay que modificar nada salvo el tipo de pantalla y las patillas de touch, asi por ejemplo;

UTFT myGLCD(TFT01_24SP,51,52,5,4,6);
UTouch myTouch( 12, 11, 10, 9, 8);

He verificado la calibracion en la pagina Electronics - Henning Karlsen..
UTouch Calibration Data Verification

Displaytype : ElecFreaks - TFT01-2.4
Your CAL_X : 0x041047B3UL
Your CAL_Y : 0x00C5104FUL
Your CAL_S : 0x000EF13FUL

Results:
• Orientation is correct...
• Display size parameters are correct...
• CAL_X data sequence is correct...
• CAL_X data is not in the expected range...
• CAL_Y data sequence is not correct...

La calibración debes hacerla con un lápiz táctil o algún bolígrafo que te permita tocar el centro de cada una de las 8 marcas que da el sketch de calibración.

Como has hecho, guarda los datos de calibración en el archivo UtouchCD, procurando dejar solo una tripleta de calibración. Si deseas conservar las previas tendrás que comentarlas, como en el ejemplo siguiente:

//HY32D  TFT-TÁCTIL 3.2"       ------   En el controlador Cyg
//#define CAL_X 0x001F0F40UL
//#define CAL_Y 0x00188E95UL
//#define CAL_S 0x000EF13FUL

// 24SPI TFT ILI9341 -Touch        -------- Rotación 1  
#define CAL_X 0x004D4E8AUL
#define CAL_Y 0x039280F9UL
#define CAL_S 0x000EF13FUL

Con el sketch que te dejo, se puede corroborar que el espacio visible de la pantalla TFT coincide con la pantalla táctil. Una buena calibración debería dar estos resultados cuando se toca cada esquina visible del TFT con orientación X>320, Y>240:

  • Esquina superior izquierda: 0,0
  • Esquina superior derecha: 319,0
  • Esquina inferior izquierda: 0,239
  • Esquina inferior derecha: 319,239
//Verificar XY en pantalla y puerto serie
#include <UTFT.h>
#include <UTouch.h>

//24SPI
  UTFT myGLCD(ILI9341_S5P,MOSI,SCK,10,NOTINUSE,42);
  UTouch  myTouch(12,11,9,8,7);  //   

extern uint8_t BigFont[];
int x, y;

void setup() 
{
  Serial.begin(9600);
  
  myGLCD.InitLCD(LANDSCAPE);                   
  myGLCD.clrScr();                             
  myGLCD.fillScr(0,0,0);
  myGLCD.setFont(BigFont);  
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.setColor(0, 255, 0);

  myTouch.InitTouch();
  myTouch.setPrecision(PREC_HI);  
}

void loop()
{
  while (true)
  {
    if (myTouch.dataAvailable())
    {
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();

 // TFT-output
      myGLCD.print("x=       ", 50, 100);
      myGLCD.printNumI(x, 85, 100);
      myGLCD.print("y=       ", 185, 100);  
      myGLCD.printNumI(y, 220, 100);
            
// Serial-output            
      Serial.print("x= ");
      Serial.print(x);    
      Serial.print("   y= ");            
      Serial.print(y);  
      Serial.println("   ");    

    }
  }
}

Te dejo la calibración que obtuve de las tres pantallas de 2.4 que tengo:

//Táctil 24SPI1
#define CAL_X 0x03CF40D0UL
#define CAL_Y 0x0033CE96UL
#define CAL_S 0x000EF13FUL

//Táctil 24SPI2
#define CAL_X 0x03BCC0B5UL
#define CAL_Y 0x00290E63UL
#define CAL_S 0x000EF13FUL

//Táctil 24SPI3
#define CAL_X 0x03AE810CUL
#define CAL_Y 0x00444E1AUL
#define CAL_S 0x000EF13FUL

A ver si coincide alguna con tu pantalla táctil

Pues no lo consigo y siento pedir ayuda otra vez...
Como no sabia si el problema estaba en las tensiones he comprado otro CD4050BE y lo he intercalado, en las señales del Touch panel, pero en este caso se queda como si estuviera pulsado siempre por lo que creo que no es este el problema.

Con todas las calibraciones que me has dejado no funciona y con muchas de estas consigo X=-1 y=-1, solo en alguna de las que he guardado he conseguido datos aleatorios y entre ellos otra vez los -1, -1.

veo que en la touch pone 2408-SZ que entiendo que es el tipo de touch screen que tengo en la TFT. He mirado la placa y el chip es el XPT2046 1419.

Puedes decirme otro software para probarlo que no se UTF.

Un saludo y disculpa por pedirte ayudan tantas veces.

En cada sketch se me ocurre que podrías modificar la precisión de la pantalla táctil. La librería utouch tiene 4 tipos

#define PREC_LOW			1
#define PREC_MEDIUM			2
#define PREC_HI				3
#define PREC_EXTREME		4

En el área del setup de cada sketch en el que se activa la táctil, está la siguiente instrucción:

  myTouch.InitTouch();
  myTouch.setPrecision(PREC_HI);

En el Arduino Due esa precisión no causa problemas, quizás en el MEGA habría definirla como:

  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);

Podrías intentar por allí. Intenta esas modificaciones con y sin el chip CD4050 a ver que resultados obtienes.

No conozco otra librería que permita acceder al XPT2048.

PD: hice pruebas con el MEGA, el shield TFT para MEGA y parece que la táctil funciona bien, te iba a sugerir la posibilidad de que consigas un shield para MEGA, pero cuesta casi lo mismo que un arduino Due clon...

Gracias lo he probado y no funciona. El chip se llama XPT2046, creo que es lo que leo en la placa.?