Simplificar pines para controlar TFT táctil 2.4" por SPI

Hola a todos,

Estoy planificando un proyecto con una pantalla TFT táctil de 2.4" con protocolo SPI conectado a un arduino UNO.
Para practicar con él he seguido las indicaciones de una página en la que indica qué pines hay que conectar para que muestre imagen y los pines para manejar la función táctil. La página es:

He cargado el sketch y ha funcionado correctamente.

El problema a surgido al querer simplificar el número de pines a utilizar. Según he leído el protocolo SPI puede manejar varios dispositivos conectando en común el SCK SDO y SDI sin embargo el resultado ha sido que la TFT muestra imagen pero no responde la función táctil.

Esta es la parte del código original:

#include <SPI.h>
#include <UTouch.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
 
//Pines TFT
#define TFT_DC 9
#define TFT_CS 10

//Pines Touch
#define t_SCK  3
#define t_CS   4
#define t_MOSI 5
#define t_MISO 6
#define t_IRQ  7
 
//Instanciamos la TFT
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
 
//Instancimos el Touch
UTouch ts(t_SCK, t_CS, t_MOSI, t_MISO, t_IRQ);

y este el modificado por mi:

#include <SPI.h>
#include <UTouch.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
 
//Pines TFT
#define TFT_DC 9
#define TFT_CS 10

//Pines Touch
#define t_SCK  13
#define t_CS   4
#define t_MOSI 11
#define t_MISO 12
#define t_IRQ  7
 
//Instanciamos la TFT
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
 
//Instancimos el Touch
UTouch ts(t_SCK, t_CS, t_MOSI, t_MISO, t_IRQ);

Gracias de antemano por la ayuda

De ningun modo estos

#define t_SCK  3
#define t_CS   4
#define t_MOSI 5
#define t_MISO 6

son los pines SPI. Los pines SPI son siempre 11, 12 y 13 y solo puedes cambiar el CS Chip Select.

Asi que definelos como corresponde

En tu tutorial tienes una tabla muy clara que dice

Conexión entre la pantalla TFT y Arduino
MODULO TFT ARDUINO UNO, NANO O PRO MINI
SDO (MISO) Pin 12
SCK Pin 13
SDI (MOSI) Pin 11

y luego el CS

CS Pin 10
que es el que si puedes cambiar.

Gracias por tu respuesta surbyte

Lo curioso es que el ejemplo de la web define los pines 3,4,5 y 6 para el SPI de la touch y he comprobado que funciona.

Sin embargo cuando defino correctamente los pines 12, 13 y 11 para SDO, SCK y SDI de la touch, la touch no funciona.

Saludos

Bueno tu TFT tiene un controlador touche XPT2046, mira esta librería XPT2046 TouchScreen Library

En el ejemplo se usa el SPI directamente.
Tal vez mezclando ambas librerías lo logres

Es el error de esas pantallas, el controlador es bastante longevo y por lo tanto un poco difícil de manejar con los estándares de velocidad actuales, sin embargo los costos de producción son bastante bajos, lo que ha permitido masificar su uso a costos bastante bajos.

Al fabricante no le preocupa si la pantalla dejará de responder o si te faltan pines para conectarla. Debo decir que esa pantalla funciona muy bien en placas como la MEGA o el Due pero el controlador táctil barato lleva un error de diseño: el controlador tiene una tasa de refresco máxima de 125 KHz, muy inferior al estándar SPI en arduino UNO de unos 8 MHz!!!

Lo ideal sería un controlador táctil realmente SPI que funcione a frecuencias elevadas como los táctiles capacitivos.

Esos fallos asociados al chip resistivo no te los dirá el fabricante y mucho menos el vendedor.

Pero mas alla de ese comentario @TFTLCDCyg que pocos saben (yo no lo sabía ) me llamó la atención que usara un pseudo SPI y ahora comprendo por qué lo hace!!
Es parte de nuestra responsabilidad evitar que se compren esas placas ya que por costos son atractivas pero luego dar dolor de cabeza. Y la vende Adafruit!!! o sea.. un gran dealer de productos Arduino/Raspi/Otros micros

Ciertamente surbyte, el mercado de las táctiles resistivas baratas aparentemente sigue dando buenos dividendos a los vendedores, ya que acudimos a ellas cuando optamos por ir más allá, controlando con medios táctiles algunos leds, un servo y ya entrados algún sistema que maneje múltiples menús o hasta lo podamos conectar a una red Wifi.

Los chips táctiles capacitivos son algo más caros y se refleja en el costo final de la pantalla, lo vemos en una página en la que podemos configurar todo lo que queremos en un TFT: interface, medidas de la pantalla, chip con fuentes extra, voltaje de alimentación, y por en algunos casos tipo de chip tactil.

Por tomar un ejemplo: si configuramos una ILI9341 de 3.2" con chip tactil resistivo hay que agregar 1 USD al precio base, si esa misma pantalla la queremos con chip tactil capacitivo, hay que agregar 5 USD extra al precio base.

Hay que recordar que no solo es el chip táctil, el sistema cuenta con una pantalla transparente extra, de la cual prácticamente no conocemos nada y que desafortunadamente, me da la impresión que ha mermado su calidad con el paso de los años.

Si a eso le agregamos gastos de envío y aduanas, obviamente que los precios de venta puestos en nuestra puerta se multiplicarán bastante, un aficionado como nosotros que recién inicia en este hobby y que quiere avanzar a medida que aprende más, se topa con pantallas bastante accesibles, pero que luego de unos meses ya ni voltearemos a ver :o por algún defecto o una falla que no podemos entender...

Retomando el problema del compañero Rediew, en arduino UNO estas pantallas lo llevan al límite de sus recursos y como has visto te dan pocos grados de libertad. No te recomiendo conectarla a SPI ya que como tal el chip tactil tiene un bus SPI de 4 hilos y la pantalla tiene un bus SPI de tres hilos, el pin MISO que no usa la pantalla le transfiere muchos problemas de inestabilidad si no lo conectas correctamente.

Recuerda que el bus SPI es sensible a la distancia de los hilos que usas, es un bus que funciona bien con longitudes de cableado desde 4 o 5 cm hasta máximo 20 cms, más allá de eso el sistema se torna inestable.

Por el formato de tamaño similar al del arduino UNO, es recomendable que te apoyes de un F103VET6, teensy 3.2, un teensy 3.6, una STM32F407, una Core7XXI, una Core4XXI; o si no te afecta el formato, una nucleo F767ZI, que incluye una interfase tipo arduino uno además de los pines morpho; por su velocidad y memoria de programación, es más cómodo trabajar con las pantallas resistivas.

El "pero" sigue siendo el chip táctil resistivo, si cuentas con algo de presupuesto extra, definitivamente una pantalla de chip tactil capacitivo es mi recomendación, ya no como medio para avanzar, sino por salud mental; más de una pantalla con táctil resistiva estuvo a punto de salir volando por la ventana...

A pesar de todo, tenemos a la mano excelentes librerías en el foro que pueden ayudarnos a sacar el mayor provecho a estas pantallas, mi sugerencia es que la conectes en un arduino Due, en el UNO siempre te vas a quedar muy justo de recursos como ya lo has comprobado.

PD: fabricantes de TFT hay varias opciones, el tema es lo que piden por sus esfuerzos de investigación: matrixorbital, Riverdi, Newhaven display, Mikroelektronika, Gameduino3; tienen pantallas SPI de 4 hilos con pantallas táctiles capacitivas y resistivas 100% SPI y con gran variedad de precios, es una pena que la paridad de la moneda de mi país con los USD se mueva como palmera en playa...