Langue: FR

Le tactile XPT2046 ne marche pas - le tester sans toucher

Notes · Publié le

Un écran tactile de 3,2 pouces avec un stylet devant, qui affiche la photo d’un baby-foot

Les petits écrans SPI de 3,2” et 2,8” ont souvent une couche tactile résistive, lue par une puce XPT2046. Quand le tactile ne fait rien, le conseil habituel est de calibrer, de changer de bibliothèque ou d’appuyer plus fort. Sur ma visionneuse de photos sur ESP32, l’écran de calibrage affichait ses flèches et rien ne se passait, peu importe comment j’appuyais.

Le problème, c’est que les mesures tactiles sont difficiles à juger. De mauvais chiffres peuvent venir du câblage, du calibrage ou d’un appui trop léger. Il existe un moyen de tester la puce sans toucher l’écran du tout.

L’astuce - lire son thermomètre

En plus des entrées tactiles, la XPT2046 peut mesurer sa propre température. La commande 0x87 lance cette mesure et renvoie le résultat tout de suite. La valeur bouge à peine, c’est donc un signal de test parfait.

  • Une valeur stable veut dire que la puce entend vos commandes et que ses réponses arrivent à l’ESP32.
  • Des valeurs au hasard, 0 ou 8191, veulent dire qu’elle ne répond pas.

Sur mon module, une puce qui marche lit environ 830 à température ambiante. La vôtre peut donner un peu autre chose. Ce qui compte, c’est que la valeur reste stable.

Le sketch de test

Il n’utilise que la bibliothèque SPI. Les broches sont les miennes, avec la puce tactile sur le même bus que l’écran. Mettez les vôtres.

#include <SPI.h>

const int PIN_SCK = 18, PIN_MISO = 19, PIN_MOSI = 23;
const int PIN_TOUCH_CS = 33;
const int PIN_LCD_CS = 5;   // keep the display quiet on the shared bus

uint16_t readTemperature() {
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
  digitalWrite(PIN_TOUCH_CS, LOW);
  SPI.transfer(0x87);                       // start bit, temperature input, reference on
  uint16_t raw = SPI.transfer16(0x0000) >> 3;   // 12-bit result
  digitalWrite(PIN_TOUCH_CS, HIGH);
  SPI.endTransaction();
  return raw;
}

void setup() {
  Serial.begin(115200);
  pinMode(PIN_LCD_CS, OUTPUT);   digitalWrite(PIN_LCD_CS, HIGH);
  pinMode(PIN_TOUCH_CS, OUTPUT); digitalWrite(PIN_TOUCH_CS, HIGH);
  SPI.begin(PIN_SCK, PIN_MISO, PIN_MOSI);
}

void loop() {
  Serial.println(readTemperature());
  delay(500);
}

Le résultat fait 12 bits, une vraie mesure vaut donc au plus 4095. Une valeur de 8191 veut dire que tous les bits sont revenus à 1. Personne ne pilote la ligne, et elle flotte simplement à l’état haut.

Ce que disent les chiffres

Sortie série Sens
Une valeur stable (environ 830 chez moi) La puce marche. Le problème est le calibrage, la broche IRQ ou la bibliothèque
Toujours 0 MISO est tenu bas, souvent par une autre puce du bus
Toujours 8191 Personne ne répond. Vérifiez T_CS, T_CLK et T_DO
Des valeurs qui sautent Un faux contact

Dans mon cas, la puce ne répondait pas, et la cause était deux fils inversés. Pour en être sûr, inversez MOSI et MISO dans le code et relancez le test.

SPI.begin(PIN_SCK, PIN_MOSI, PIN_MISO);   // MISO and MOSI swapped, for the test only

Si la puce répond maintenant avec une valeur stable, T_DIN et T_DO sont inversés dans le câblage. Sur un bus partagé, la broche 23 de l’ESP32 (MOSI) doit aller à la fois sur SDI de l’écran et sur T_DIN, et la broche 19 (MISO) sur SDO de l’écran et sur T_DO. Sur une plaque d’essai, déplacer un fil dans un autre trou de la même rangée ne change rien, car toute la rangée est reliée.

Si la puce répond mais que le tactile échoue encore

  • La broche IRQ (T_IRQ) passe à l’état bas quand on appuie sur l’écran. Beaucoup de bibliothèques sautent la mesure tant qu’elle est haute, donc une mauvaise broche IRQ ressemble exactement à un tactile mort. Vérifiez-la dans les réglages de votre bibliothèque.
  • Sur certains modules, la broche SDO de l’écran ne libère pas MISO et fausse les mesures tactiles. Débranchez le SDO de l’écran. Beaucoup de bibliothèques d’affichage n’ont jamais besoin de lire l’écran.
  • Ensuite, calibrez. Les valeurs brutes ne deviennent des coordonnées d’écran qu’après le calibrage.

Liens

← Retour aux articles