Bahasa: ID

Sentuhan XPT2046 tidak berfungsi - uji tanpa menyentuh

Catatan · Terbit

Layar sentuh 3,2 inci dengan stylus di depannya, menampilkan foto meja sepak bola mini

Display SPI murah ukuran 3,2” dan 2,8” sering dilengkapi lapisan sentuh resistif, yang dibaca oleh chip XPT2046. Saat sentuhan tidak berfungsi, saran yang biasa adalah kalibrasi, ganti library, atau tekan lebih keras. Di penampil foto ESP32 saya, layar kalibrasi menampilkan panahnya dan tidak terjadi apa-apa, sekeras apa pun saya menekan.

Masalahnya, hasil bacaan sentuh sulit dinilai. Angka yang salah bisa karena kabel, kalibrasi, atau tekanan yang terlalu ringan. Ada cara menguji chip tanpa perlu menyentuh layar sama sekali.

Triknya - baca termometernya

Selain input sentuh, XPT2046 bisa mengukur suhunya sendiri. Perintah 0x87 memulai pengukuran itu dan langsung mengembalikan hasilnya. Nilainya hampir tidak berubah, jadi ini sinyal uji yang sempurna.

  • Nilai yang stabil berarti chip mendengar perintahmu dan jawabannya sampai ke ESP32.
  • Nilai acak, 0 atau 8191, berarti chip tidak menjawab.

Di modul saya, chip yang berfungsi terbaca sekitar 830 di suhu ruang. Punyamu bisa sedikit berbeda. Yang penting nilainya tetap stabil.

Sketch uji

Hanya memakai library SPI. Pin-pinnya milik saya, dengan chip sentuh di bus yang sama dengan display. Ganti dengan pin kamu.

#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);
}

Hasilnya 12 bit, jadi bacaan yang asli paling besar 4095. Nilai 8191 berarti semua bit kembali sebagai 1. Tidak ada yang menggerakkan jalurnya, jadi jalur itu mengambang di high.

Arti angkanya

Output serial Artinya
Nilai stabil (sekitar 830 di modul saya) Chip berfungsi. Masalahnya di kalibrasi, pin IRQ, atau library
Selalu 0 MISO tertahan low, sering oleh chip lain di bus
Selalu 8191 Tidak ada yang menjawab. Cek T_CS, T_CLK dan T_DO
Melompat-lompat Kontak longgar

Dalam kasus saya, chip tidak menjawab, dan penyebabnya dua kabel yang tertukar. Untuk memastikan, tukar MOSI dan MISO di kode lalu jalankan tesnya lagi.

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

Kalau chip sekarang menjawab dengan nilai stabil, T_DIN dan T_DO tertukar di kabel. Di bus bersama, pin 23 ESP32 (MOSI) harus ke SDI layar dan T_DIN, dan pin 19 (MISO) ke SDO layar dan T_DO. Di breadboard, memindahkan kabel ke lubang lain di baris yang sama tidak mengubah apa pun, karena satu baris itu tersambung semua.

Kalau chip menjawab tapi sentuhan masih gagal

  • Pin IRQ (T_IRQ) menjadi low saat layar ditekan. Banyak library melewati pembacaan selama pin ini high, jadi pin IRQ yang salah terlihat persis seperti sentuhan yang mati. Cek di pengaturan library-mu.
  • Di beberapa modul, pin SDO layar tidak melepas MISO dan merusak bacaan sentuh. Cabut SDO layar. Banyak library display tidak pernah perlu membaca dari layar.
  • Lalu lakukan kalibrasi. Nilai mentah baru menjadi koordinat layar setelah kalibrasi.

Tautan

← Kembali ke semua tulisan