Posibilidad de cambiar pines en pantalla TFT touch

Hola.
Es el primer tema que escribo y espero hacerlo bien.

pantalla: https://www.amazon.es/Pulgadas-Pantalla-Resolución-480x320-Soporte/dp/B07N4KXP5X

Dispongo de esa pantalla, que hasta hace unos dias estaba conectada a un arduino UNO, por temas de espacio y añadir alguna pieza mas, he tenido que cambiar a un arduino mega.
El problema es que necesito liberar los pines PWM y alguno mas de los digitales para el funcionamiento de unos ventiladores de refrigeracion y control.

Las librerias que usa son estas:

Adafruit_GFX.h ..... GitHub - adafruit/Adafruit-GFX-Library: Adafruit GFX graphics core Arduino library, this is the 'core' class that all our other graphics libraries derive from
MCUFRIEND_kbv.h .......por tema de enlace: /prenticedavid/MCUFRIEND_kbv
TouchScreen.h ................por tema de enlace: /adafruit/Adafruit_TouchScreen

La pantalla es una ILI9486 o 0x1581, por si sirve de algo:

XP = 6, XM = A2, YP = A1, YM = 7.
TS_LEFT = 931, TS_RT = 182, TS_TOP = 955, TS_BOT = 191.

Pregunta: hay alguna manera de cambiar los pines bien en las librerias o en el codigo para usar otros pines en el arduino mega.

LCD_RD = A0
LCD_WR = A1
LCD_RS = A2
LCD_CS = A3
LCD_RST = A4
F_CS = A5

Los pines analogicos de arriba, quedarian como estan actualmente, pero esta otra parte de los pines digitales necesitaria modificarlos.

LCD_D2 = PIN 2, que necesito sea el pin 47
LCD_D3 = PIN 3, que necesito sea el pin 45
LCD_D4 = PIN 4, que necesito sea el pin 43
LCD_D5 = PIN 5, que necesito sea el pin 42
LCD_D6 = PIN 6, que necesito sea el pin 41
LCD_D7 = PIN 7, que necesito sea el pin 40

LCD_D0 = PIN 8, que necesito sea el pin 39
LCD_D1 = PIN 9, que necesito sea el pin 38
SD_SS = PIN 10,
SD_DI = PIN 11
SD_DO = PIN 12
SD_SCK = PIN 13.

Los pines de la tarjeta SD, irian al 50, 51, 52, 53 respectivamente.

Señor administrador si esta mal colocado o mal planteado el tema ruego lo mueva o modifique donde sea oportuno.
Un saludo y gracias
PD: por ser nuevo no me deja mas que poner 2 enlaces

Pero si tienes toda la bornera transversal con mas pines PWM para que semejante trabajo?

Surbyte, conozco los pwm de arduino mega perfectamente, se que hay otros 3 mas, concretamente 44, 45, 46...
Se necesitan entre 6 y 9 ventiladores de enfriamiento de 330 x 330mm, para enfrian una plancha de 1m2, estos ventiladores han de estar funcionando a mayor o menor revoluciones por minuto, deacorde a la temperatura que marquen en punta las pertinentes sondas.

La pregunta era simple y creo estaba bien planteada en referencia a los pines del 2 al 13 para su liberacion, no entiendo el porque una respuesta hacia la bornera transversal.
Si alguein tiene alguna idea o cree que se puede llegar a realizar, se lo agradeceria.
Un saludo

Simplemente porque esto que ahora pones no lo pusiste en el post#1 y no estoy delante de tu proyecto entonces en mi cabeza, tenias disponibles estos pines PWM y no se si hablo con un hobbista o con un ingeniero con experiencia, porque no se sabe por un nick con quien esta tratando uno al responderle, asi que uno empieza tratando a todo el mundo como que desconoce la disposición del arduino que tiene en frente. No es tu caso, mejor entonces porque dialogamos en otros términos, pero no tomes una respuesta de cualquiera de nosotros como un ataque porque no lo es. Si fuera asi, no ocuparía mi tiempo en intentar brindarte ayuda.

Para que veas otra opción solo para considerar, que tal usar un multiplexor I2C PWM de esos que terminan manejando 16 servos.
Este es de 8 ch

Y este el de 16ch

Te ahorrarías mucho trabajo creo y sería mas simple que las modificaciones que pretendes.

Otra opción: Yo he usado una placa TFT para MEGA pero se conecta a la bornera transversal y me dejaba libre los pines habituales.
Claro eso hace que tu TFT actual quede para otro proyecto.

Surbyte, no me tomo a mal nada, simplemente crei no estaba bien planteado el tema.

Los multiplexores es una opcion que no se ha tenido en cuenta la verdad, porque cada ventilador ha de funcionar a una velocidad independiente del resto y para la parte nueva si que se pueden utilizar.

En la parte a remodelar es casi imposible meterlos por el tema espacio.
En cuanto a la tft actual, no es una si no 20 las que se usan, pero si no es mucha molestia podias pasarme el enlace de esta tft tactil que usas o usaste en su momento, asi quedarian estas pantallas viejas para la parte moderna con los multiplexor y las nuevas si las encontramos para las viejas.

Me han comentado por el privado, que en el foro ingles o italiano han visto hace tiempo algo de un cambio de pines en la libreria, me he puesto a buscarlo y no he dado con ese tema.
En el rato que he tenido, me he puesto la ojear las 6 librerias que usa y he visto que solo los pines analogicos estan creados y descritos en la libreria, el resto no hay nada mas que X e Y, sospecho que la tft los toma directos, mañana si puedo probare a cablear la tft y el arduino en lugar del contacto directo y ver que sale al aplicar el ejemplo de touch modificando alguno de los pines.

No importa el enlace que te pongo, lo que importa es la idea y lo buscas donde te resulte comodo.
La TFT va conectada a este shield

Y la pantalla que tengo es de 3.2" como ahi publicitan.
La uso igualmente en el DUE.

Acá en alliexpress

Para la parte nueva, han decidido utilizar el escudo y pantallas para el.
En la parte vieja, no hay manera, tanto por hueco como por desarrollo, incluso se ha probado los multiplexores y no hay espacio.
Mirando la libreria mcufriend_shield.h

He localizado algo de los pines del arduino MEGA

//################################### MEGA2560 ##############################
#elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)       //regular UNO shield on MEGA2560
//LCD pins  |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 | |RD |WR |RS |CS |RST|
//AVR   pin |PH4|PH3|PE3|PG5|PE5|PE4|PH6|PH5| |PF0|PF1|PF2|PF3|PF4|
#define RD_PORT PORTF
#define RD_PIN  0
#define WR_PORT PORTF
#define WR_PIN  1
#define CD_PORT PORTF
#define CD_PIN  2
#define CS_PORT PORTF
#define CS_PIN  3
#define RESET_PORT PORTF
#define RESET_PIN  4

#define EMASK         0x38
#define GMASK         0x20
#define HMASK         0x78
#define write_8(x)   {  PORTH &= ~HMASK; PORTG &= ~GMASK; PORTE &= ~EMASK; \
                        PORTH |= (((x) & (3<<0)) << 5); \
                        PORTE |= (((x) & (3<<2)) << 2); \
                        PORTG |= (((x) & (1<<4)) << 1); \
                        PORTE |= (((x) & (1<<5)) >> 2); \
                        PORTH |= (((x) & (3<<6)) >> 3); \
					 }

#define read_8()      ( ((PINH & (3<<5)) >> 5)\
                      | ((PINE & (3<<4)) >> 2)\
                      | ((PING & (1<<5)) >> 1)\
                      | ((PINE & (1<<3)) << 2)\
                      | ((PINH & (3<<3)) << 3)\
                      )
#define setWriteDir() { DDRH |=  HMASK; DDRG |=  GMASK; DDRE |=  EMASK;  }
#define setReadDir()  { DDRH &= ~HMASK; DDRG &= ~GMASK; DDRE &= ~EMASK;  }
#define write8(x)     { write_8(x); WR_STROBE; }
#define write16(x)    { uint8_t h = (x)>>8, l = x; write8(h); write8(l); }
#define READ_8(dst)   { RD_STROBE; dst = read_8(); RD_IDLE; }
#define READ_16(dst)  { uint8_t hi; READ_8(hi); READ_8(dst); dst |= (hi << 8); }

#define PIN_LOW(p, b)        (p) &= ~(1<<(b))
#define PIN_HIGH(p, b)       (p) |= (1<<(b))
#define PIN_OUTPUT(p, b)     *(&p-1) |= (1<<(b))

Esta libreria tambien hace referencia a la libreria "mcufriend_special.h",

#if defined(USE_SPECIAL)

#include "mcufriend_special.h"
#elif defined(__AVR_ATmega2560__) && defined(USE_OPENSMART_SHIELD_PINOUT_MEGA)
//LCD pins  | D7 | D6 | D5 |  D4 |D3 | D2 | D1 |  D0 |, |RD |WR | RS | CS |RST|
//AVR    pin |PH4|PH3|PE3|PG5|PE5|PE4|PH6|PH5|, |PF0|PF1|PF2|PF3|PF4|
//MEGA pins| 7  |  6   |  5   |   4  |  3  |  2   |   9  |   8  | , |A0 | A1 | A2 | A3 |A4  |
#define RD_PORT PORTF
#define RD_PIN  0
#define WR_PORT PORTF
#define WR_PIN  1
#define CD_PORT PORTF
#define CD_PIN  2
#define CS_PORT PORTF
#define CS_PIN  3
#define RESET_PORT PORTF
#define RESET_PIN  1  // n/a. so mimic WR_PIN

#define BMASK         0b10110000 //D13, D11, D10
#define GMASK         0x20      //D4
#define HMASK         0x78      //D6, D7, D8, D9

#if defined(USE_BLD_BST_MEGA2560)
static __attribute((always_inline)) void write_8(uint8_t val)
{
	asm volatile("lds __tmp_reg__,0x0102" "\n\t"  //PORTH
	"BST %0,0" "\n\t" "BLD __tmp_reg__,5" "\n\t"
	"BST %0,1" "\n\t" "BLD __tmp_reg__,6" "\n\t"
	"BST %0,6" "\n\t" "BLD __tmp_reg__,3" "\n\t"
	"BST %0,7" "\n\t" "BLD __tmp_reg__,4" "\n\t"
	"sts 0x0102,__tmp_reg__" : : "a" (val));
	asm volatile("in __tmp_reg__,0x05" "\n\t"     //PORTB
	"BST %0,2" "\n\t" "BLD __tmp_reg__,4" "\n\t"
	"BST %0,3" "\n\t" "BLD __tmp_reg__,5" "\n\t"
	"BST %0,5" "\n\t" "BLD __tmp_reg__,7" "\n\t"
	"out 0x05,__tmp_reg__" : : "a" (val));
	asm volatile("in __tmp_reg__,0x14" "\n\t"     //PORTG
	"BST %0,4" "\n\t" "BLD __tmp_reg__,5" "\n\t"
	"out 0x14,__tmp_reg__" : : "a" (val));
}
#else
#define write_8(x) {  \
        PORTH = (PORTH&~HMASK)|(((x)& 0b11000000)>>3)|(((x)& 0b00000011)<<5); \
        PORTB = (PORTB&~BMASK)|(((x)& 0b00101100)<<2); \
        PORTG = (PORTG&~GMASK)|(((x)& 0b00010000)<<1); \
    }
#endif

#define read_8()(\
                 ((PINH & 0b00011000) << 3) | ((PINB & BMASK) >> 2) | \
                 ((PING & GMASK) >> 1) | ((PINH & 0b01100000) >> 5) )
#define setWriteDir() { DDRH |=  HMASK; DDRB |=  BMASK; DDRG |=  GMASK; }
#define setReadDir()  { DDRH &= ~HMASK; DDRB &= ~BMASK; DDRG &= ~GMASK; }

#define write8(x)     { write_8(x); WR_STROBE; }
#define write16(x)    { uint8_t h = (x)>>8, l = x; write8(h); write8(l); }
#define READ_8(dst)   { RD_STROBE; dst = read_8(); RD_IDLE; }
#define READ_16(dst)  { uint8_t hi; READ_8(hi); READ_8(dst); dst |= (hi << 8); }

#define PIN_LOW(p, b)        (p) &= ~(1<<(b))
#define PIN_HIGH(p, b)       (p) |= (1<<(b))
#define PIN_OUTPUT(p, b)     *(&p-1) |= (1<<(b))

pero por desgracia no entiendo el contexto de las 2 librerias, ni la posibilidad de cambiar los pines.

Alguien tiene alguna idea de como tambiarlos??

Necesitaria quedaran asi:
//LCD pins | D7 | D6 | D5 | D4 |D3 | D2 | D1 | D0 |, |RD |WR | RS | CS |RST|
//AVR pin |PL2|PL3|PL4|PL5 |PL6|PL7|PG0|PG1|, |PF0|PF1|PF2|PF3|PF4|
//MEGA pins| 47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 | , |A0 | A1 | A2 | A3 |A4 |

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.