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

Hola buenas noches; he adquirido una TFT "240x320 2.4 SPI TFT LCD Touch Panel Serial Port Module with PBC ILI9341 5/3.3V", pero no consigo que funcione, he descargado diferentes librerias, pero no consigo compilarlas por diferentes errores. He descargado las librerias de "github.com" y adafruit, pero como comento siempre tengo errores de compilación. He consultado tambien el foro en ingles pero veo diferentes métodos de comunicación DMA, UDF.
Gracias y un saludo.

Para pantallas con controlador: ILI9341

En arduino Due

En UNO y MEGA

Tengo una pantalla de esas como panel primario del proyecto con un arduino Due:

Demo 1 con librería ILI9341_due

Demo 2 con la librería UTFT

Calibración de la pantalla táctil

Gracias amigo pero sigo igual, he aplicado todo los temas del enlace para uno y mega que son las dos placas de arduino que tengo pero sigue sin rular.. Te adjunto foto de la placa por si se me escapa algo. Gracias

Vayamos por lo más básico: ¿cuál es conexionado pin a pin que has hecho con el MEGA? y de allí partimos para averiguar la falla.

Muchas Gracias por contestar lo primero.

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

3.3V y GND

Y en este momento este codigo aunque ya he probado muchos

// UTFT_ViewFont (C)2012 Henning Karlsen
// web: Electronics - Henning Karlsen
//
// This program is a demo of the included fonts.
//
// This demo was made for modules with a screen resolution
// of 320x240 pixels.
//
// This program requires the UTFT library.
//

#include <UTFT.h>
#include <SPI.h>

// Declare which fonts we will be using
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

UTFT myGLCD;

void setup()
{
myGLCD.InitLCD();

myGLCD.clrScr();
}

void loop()
{
myGLCD.setColor(0, 255, 0);
myGLCD.setBackColor(0, 0, 0);

myGLCD.setFont(BigFont);
myGLCD.print(" !"#$%&'()*+,-./", CENTER, 0);
myGLCD.print("0123456789:;<=>?", CENTER, 16);
myGLCD.print("@ABCDEFGHIJKLMNO", CENTER, 32);
myGLCD.print("PQRSTUVWXYZ[\]^_", CENTER, 48);
myGLCD.print("`abcdefghijklmno", CENTER, 64);
myGLCD.print("pqrstuvwxyz{|}~ ", CENTER, 80);

myGLCD.setFont(SmallFont);
myGLCD.print(" !"#$%&'()*+,-./0123456789:;<=>?", CENTER, 120);
myGLCD.print("@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_", CENTER, 132);
myGLCD.print("`abcdefghijklmnopqrstuvwxyz{|}~ ", CENTER, 144);

myGLCD.setFont(SevenSegNumFont);
myGLCD.print("0123456789", CENTER, 190);

while(1) {};
}

Yo creo que tu problema esta en algo mas simple de lo que te imaginas.
Y es que debes decirle a la libreria #include <UTFT.h> que tu TFT es tal ILI9341
SImple. Si miras la librería comienza con la defnicion de al menos 30 controladores, pero debes comentar el actual y quitar el comentario al tuyo.
SIno lo que haces es compilar para un controlador que no esta presente fisicamente.

A ver si es por ahí?

Justo andaba con las pruebas del MEGA que tengo como pisapapeles y el TFT 24SPI. Como menciona surbyte, en tu código hace falta el hardware específico.

En este caso la linea sería:

para SPI en el Due:

UTFT myGLCD(ILI9341_S5P,MOSI,SCK,5,4,6)

Para MEGA quedaría: 

UTFT myGLCD(ILI9341_S5P,51,50,5,4,6);

Usé ambas lineas con el MEGA y la pantalla se queda en blanco. Probé con la librería Adafruit ILI9340, usando estas definiciones:

#define _sclk SCK
#define _miso MISO
#define _mosi MOSI
#define _cs 5
#define _dc 6
#define _rst 4

Adafruit_ILI9340 tft = Adafruit_ILI9340(_cs, _dc, _rst);

Y el TFT en el MEGA no da señales de vida.

Revisé varios posts del segundo link de referencia, que menciono lineas atrás. La conclusión es que este tipo de TFT funcionan con lógica de 3.3V, por lo que se requiere de un circuito extra para que la lógica de 5 V sea compatible con la lógica de 3.3V del TFT

Además en el conexionado hay dos puntos que se deben considerar:

  • El pin RESET del TFT se debe conectar al RESET del Arduino, usar un pin digital causa desconexiones aleatorias en el TFT. Esto me ocurre cuando abre imágenes desde el lector SD, al mandar a RESET del Due ya no he visto ese comportamiento en la pantalla.

  • El pin MISO del TFT se puede dejar desconectado o se puede unir al pin MOSI del TFT, en caso de que la pantalla funcione de forma errática. En mi caso funcionó mejor para el Due la segunda opción, uní MISO con MOSI del TFT.

Usé las lineas de declaración de hardware lineas atrás y la pantalla funcionó sin problemas en el arduino Due :astonished:

Con el MEGA, el TFT no me funcionó llegué a la misma conclusión que ya tenía: seguir usándolo como pisapapeles.

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