TouchScreen chip GT928 con NANO via I2c

Buenas tardes.

Necesito manejar un touchscreen desde un Aruino NANO vía I2c.

El chip del controlador Touchscreen es un GT928.

Lo he identificado con I2cdetect, la dirección es 0x5d.

Veo una librería TAMC_GT911 (Arduino Library for GT911 Touch Panel)

Tengo varias dudas:

1.- Es válida para el GT928?

2.- Veo además de los pines SCL, SDA otros dos: INT y RESET.

Donde debo conectarlos y qué función realizan.

Gracias por vuestras respuestas.

¡Teléfono para @TFTLCDCyg !
:grinning_face_with_smiling_eyes:

El panel táctil capacitivo GT928 soporta hasta 10 puntos táctiles, el GT911 solo 5 puntos.

Que bien que has podido obtener la dirección i2C de tu panel, me parece que es la misma que la del GT911.

En principio podrías utilizar la librería TAMC_GT911 como base, pero debes considerar que el árbol de registros es diferente, por lo que primero debes profundizar un poco en las diferencias entre ambos chips, por lo tanto el primer paso con la librería es modificar los registros para adaptarlo al chip GT928.

Luego de esa revisión quizás podría ser que ambos grupos de registros sean compatibles, pero es mejor que aprendas algunos detales del panel que quieres usar.

GT928 datasheet
GT928 manual de programación

GT911 datasheet
GT911 manual de programación

Recuerda que debes definir el tamaño del panel en las líneas de configuración de la librería usados en el sketch, considerando el tamaño del TFT para que obtengas una mejor precisión

Gracias gatul por pasarle la llamada a TFTLCDCyg...No sé si el estará tan contento.

Tengo definido el NANO como ATMega 328P OldBootloader.
Por cierto... con #include "TAMC_GT911.h" y con un setup solo definiendo el serial y el loop con delay 3000.
Me dice al subir el sketch .
ATENCIÓN: la librería TAMC_GT911 pretende ejecutarse sobre arquitectura(s) esp32 y puede ser incompatible con tu actual tarjeta la cual corre sobre arquitectura(s) avr.

Pues nada ... me pondré a currar...
Saludos

Yo se que él sabe mucho del tema (buscá sus publicaciones).
Hay que sacarle provecho su ayuda desinteresada. :wink:

Saludos

Con gusto para ayudar.

En efecto hay una advertencia respecto a placas AVR.

De hecho hay un error en el llamado de la librería wire, dentro del archivo TAMC_GT911.ccp, ésta función debe quedar así:

void TAMC_GT911::begin(uint8_t _addr) {
  addr = _addr;
  //Wire.begin(pinSda, pinScl);  //linea que dá error
  Wire.begin();
  reset();
}

Con esa corrección el ejemplo compila sin errores, me llama la atención que persiste la advertencia de que fue creado para arquitectura esp32...

Alguna instrucción dentro de la librería quizás deba ser modificada, pero hasta no cargar al sketch persistirá la duda

PD: Si el problema es el tamaño de la placa, te sugeriría miraras la posibilidad de conseguir alguna placa teensy 3.2 o una teensy 4 o una STM32F411CE, son bastante diminutas y con mayor espacio de memoria y frecuencia en el microcontrolador. Hice pruebas de compilación en una placa teensy 4.1 y en una F411CE sin ver errores, solo la advertencia de la arquitectura para esp32.

Gracias ante todo por vuestro tiempo.

He investigado el tema de ESP o AVR y en github he encontrado que hay dos librerías WIRE.

Una para cada arquitectura.

name=Wire

version=1.0

author=Arduino

maintainer=Ivan Grokhotkov ivan@esp8266.com

sentence=Allows the communication between devices or sensors connected via Two Wire Interface Bus. For esp8266 boards.

paragraph=

category=Signal Input/Output

url=http://arduino.cc/en/Reference/Wire

architectures=esp8266

name=Wire

version=1.0

author=Arduino

maintainer=Arduino info@arduino.cc

sentence=This library allows you to communicate with I2C and Two Wire Interface devices.

paragraph=It allows the communication with I2C devices like temperature sensors, realtime clocks and many others using SDA (Data Line) and SCL (Clock Line)

category=Communication

url=http://www.arduino.cc/en/Reference/Wire

architectures=avr

La de AVR define:

void begin(uint8_t);
void begin(int);

La de ESP define:

void begin(int sda, int scl);
void begin(int sda, int scl, uint8_t address);

Por lo tanto dependiendo de si es AVR o ESP se debe de utilizar una u otra librería WIRE.

Otra cosa es como hacerlo en el IDE de Arduino o debe hacerlo automático.

Así que creo la mejor solución para mí, es utilizar la de AVR.

Me queda trabajo…. Al final tendré que rehacer las TAMC_GT911.h y cpp

¿Qué opináis?.

Tras la modificación de @TFTLCDCyg esta es la salida repetidamente:
Touch 1: x: 65535 y: 65535 size: 255
Touch 2: x: 65535 y: 65535 size: 255
Touch 3: x: 65535 y: 65535 size: 255
Touch 4: x: 65535 y: 65535 size: 255
Touch 5: x: 65535 y: 65535 size: 255
Touch 6: x: 65535 y: 65535 size: 255
Touch 7: x: 65535 y: 65535 size: 255
Touch 8: x: 65535 y: 65535 size: 255
Touch 9: x: 65535 y: 65535 size: 255
Touch 10: x: 65535 y: 65535 size: 255
Touch 11: x: 65535 y: 65535 size: 255
Touch 12: x: 65535 y: 65535 size: 255
Touch 13: x: 65535 y: 65535 size: 255
Touch 14: x: 65535 y: 65535 size: 255
Touch 15: x: 65535 y: 65535 size: 255

Aparentemente está todo a "1"

Solicito ayuda...
Saludos

¿Qué ocurre con los datos que miras en el monitor serie cuando presionas el panel táctil?, ¿se mantienen igual o cambian?.

Mira el manual de programación, los dispositivos i2C son muy sensibles a los valores de sus registros específicos. Me parece que ambos comparten similitudes, las que difieren entre los dos son las que te darán la clave.

De acuerdo con el manual de programación del GT928, las direcciones del dispositivo deberían ser:

(página 8)
"... GT928 has 2 sets of slave address 0xBA/0xBB & 0x28/29..."

Los datos no cambian.

La dirección detectada con i2cescaner e i2cdetect es la 0x5d.
Hay que cambiarle la dirección a las que aparecenen eel manual, yo creía que eran un ejemplo.

Necesito conectar INT y RST? ahora no los tengo conectados.
Este es el dispositivo.
Saludos.

Que bien que hayas subido una foto del hardware, en principio deberías conectar todos los pines, ya que la librería realiza un reset por 50 ms y llama a esos dos pines RST e INT.

Respecto a las direcciones es muy importante saber cuales tiene el panel, deberías conectar todos los pines y primero pasar un escaneo de dispositivos i2C para saber si está bien conectado.

Conectados todos los pines y he pasado i2cescaner con este resultado.

Escaner I2C
Buscando...
Se ha encontrado dispositivo I2C en la dirección 0x14 !
Se ha encontrado dispositivo I2C en la dirección 0x94 !
¡Listo!

Antes detectaba solo la 0x5d y ahora estas dos.
Dos direcciones es posible??

Saludos y gracias por vuestra colaboración.

Continúo con el GT928 sin hacer que funcione.

La dirección está configurada a 0x5D.

Aparecen en monitor serie las coordenadas de toques los primeros 2 / 3 segundos después de iniciar el programa después nada de nada. pointInfo no varía, se queda a 0.

uint8_t pointInfo = readByteData(GT911_POINT_INFO);

No soy capaz de conocer la configuración correcta que debo de cargar.

Adjunto fichero con los valores que tengo cargados.

El valor en 0x80FF (Chksum) revisado correcto y puesto a 1 Config_Fresh, lee los primeros toques del panel, lo que me confirma el ok.
TFTLCDCyg Te funciona bien a ti?
No encuentro librería para el GT928 y avr, así que utilizo esto de github.
TAMCTec/gt911-arduino/blob/main/examples/TouchPrint/TouchPrint.ino

TAMCTec/gt911-arduino/blob/main/TAMC_GT911.h y .cpp

con la librería WIRE (Wire.h y Wire.cpp) descargada de aquí es para “avr”:

/arduino/ArduinoCore-avr/blob/master/libraries/Wire/src/Wire.cpp

Agradecería que alguien me diga los valores a configurar para poder leer las coordenadas de los toques. Hay Muchos datos que no llego a entender para que valen.

Saludos.
GT928 Device TouchScreen.zip (899 Bytes)

Bueno, esto ya parece que funciona mejor :wink:
Hay una cosa que necesito mejorar:
Quiero incrementar el tiempo para dar por valido un toque.

Blockquote

23:06:27.349 -> -------------------------------------------->Touch 1: x: 336 y: 865 size: 12
23:06:27.349 -> -------------------------------------------->Touch 1: x: 336 y: 865 size: 12
23:06:27.382 -> -------------------------------------------->Touch 1: x: 336 y: 865 size: 12

Blockquote

Que el GT928 no reporte aquellos toques con duración menor de 400mS (por ejemplo)

He intentado con varias modificaciones del registro.
Me podeis orientar como afectan por ejemplo estas?
0x8097 Key_Area
0x807C Noise_Detect_Times

Gracias..