Autor Tema: Calibración modulo tactil pantalla ipx 7" 800 X 480  (Leído 962 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Calibración modulo tactil pantalla ipx 7" 800 X 480
« en: 07 de Marzo de 2020, 13:06:00 »
Hola. Estoy Implementando una pantalla de este tipo con controlador Raio RA8875. Lo que toca ahora es el modulo táctil. Es resistivo.

  Lo que utiliza el chip para leer la posicion del toque son dos conversores analógico digital de 10 bits, similares a los de los pic.

  De momento lo primero que he hecho ha sido, imprimir en pantalla los valores de X y de Y que me da al tocar. por ejemplo, en el eje X el minimo valor que me da tocando lo mas a la izquierda posible con estabilidad es 60 (ADC = 60 de 1024 posible).  si fuerzo mas a tocar el borde ya empieza a darme cosas raras, me da picos de 800, de 1024, etc. lo mas estable es 60, así que para mi, establezco 60 como el pixel cero por ser lo mas a la izquierda que puedo tocar siendo estable la lectura.

  A la derecha lo mismo, pero el valor adc = 970 de 1024 posible.

  En el eje Y, lo mas arriba posible dentro de marco estable es adc = 120. y lo mas abajo posible dentro de marco estable es adc = 940.

  Para trabajar mas cómodo, me interesa convertir eso a pixeles de modo que tengo:

   eje x:  adc = 60 = pixel 0.
   eje x:  adc = 970 = pixel 800.

  eje y: adc = 120 = pixel 0.
  eje y: adc = 940 = pixel 480.

  Para adaptar el resultado del adc a los pixeles he hecho:

   eje X  970 - 60= 910 valores adc para representar a 800 pixeles. Si divido 910 / 800 =  1,13 unidades de adc por pixel. 
   eje Y  940 - 120 =  820 valores adc para representar 480 pixeles. Si divido 820 / 480 =  1,70 unidades de adc por pixel.

  Lo que hago es, cuando se produce un evento touch (interrupcion hardware por tocar la pantalla):

  Leo en adc del eje X, y su valor lo almaceno en una variable de 16 bits llamada X. luego le hago cast a float y divido el valor entre 1,13.  (Así se me queda en un entero el pixel al que corresponde ese valor adc).
  Leo en adc del eje Y y hago la misma operacion en una variable llamada Y. Cast a float, division y listo.

  En principio esto funciona.   

Para probarlo lo que hago es imprimir por serial el valor X e Y ahora en pixeles de donde estoy tocando.  El valor parecía muy variable, dejando el dedo quieto en un punto, oscila hasta 60 pixeles a un lado a otro, arriba y abajo, lo que hecho para estabilizar los valores es obtener una media de 70 lecturas seguidas (es lo máximo que puedo para no correr el riesgo de desbordar la variable X cuando su valor se acerque a los 910 de adc (65535 / 910 = 72), limito a 70 y santas pascuas.  El eje Y sin problema.

  He dibujado varios círculos en la pantalla en distintos sitios, en las esquinas, en el centro, en los bordes, etc. como conozco lo que miden los círculos y donde están sus centros exactamente lo comparo con lo que me dice el usart que estoy tocando..

   También he puesto los valores máximos y mínimos de ambos ejes que me dan para un mismo punto, es decir, toco con el dedo en el mismo punto varias veces (20 veces en cada prueba) y de estos 20 toques obtengo, el valor máximo de X, mínimo de X, máximo de Y y mínimo de Y. Luego hago una ponderación y obtengo mas o menos el radio de acción que tiene mi dedo sobre el lcd al tocar y así luego saber qué "rectángulo sensorial" asignar a cada objeto alrededor del mismo.

  Todo esto para calibrar.

 El resultado por ejemplo, para un circulo de 10 pixeles de radio dibujado con centro en el pixel x = 60, y = 100,  al tocarlo varias veces obtengo de media: x = 54  y = 97. Otro toque me dió: x = 55 y = 98,  otro toque dió: x = 52 y = 98....

    Creo que está bastante bien ¿no?. Es un display de 7" de 800 x 480 y la llema de mi dedo indice puede medir 10mm asi que.... 10 mm de esta pantalla equivalen fácilmente a esos pixeles de diferencia arriba, abajo, izq y dercha.

  Lo unico que le noto, es en el lado derecho. Cuanto mas a la derecha te vas mas se desvía el resultado del punto esperado a pesar de estar todo bien referenciado al adc.

  Por ejemplo,  ese mismo circulo pintado con centro en el pixel x = 700, y = 300 me da: x = 724, y = 311.  otros toques daban casi idénticos resultado.  Tampoco está nada mal, se desvía ligeramente arriba.

  ¿ Alguien ha trabajado con un táctil así?, de ser así,  ¿ lo ha implementado parecido?, ¿ lo haríais de otra forma?.

  Saludos.




 
« Última modificación: 07 de Marzo de 2020, 13:13:42 por remi04 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Calibración modulo tactil pantalla ipx 7" 800 X 480
« Respuesta #1 en: 07 de Marzo de 2020, 14:41:26 »
Yo solamente lo trabaje para curiosidad mia. Y la unica forma de tener una lectura "decente" fue:

- Promediar varias lecturas del ADC.
- Y calibrarlo de la misma forma que hiciste vos.

Tambien omiti ciertos rangos, yo no tuve el problema este de que menos de 60 pasaba a 700 por ejemplo... sino que me mostraba 0 , como que no apretaba, entonces la parte que no era lineal, la quite.