In questa seconda parte della serie "Display touch per Arduino" analizziamo il display. Si tratta di un display a colori che, anche se molto economico, fornisce delle ottime prestazioni, come avremo modo di verificare con gli esempi applicativi che verranno introdotti a breve.
Caratteristiche tecniche
Le principali caratteristiche tecniche del componente, visibile in Figura 1, sono le seguenti:
- compatibilità, a livello hardware, con entrambe le tensioni di alimentazione a 5V e a 3,3V. Questa caratteristica è molto importante, in quanto consente di collegare il display, indifferentemente, a schede con livelli di tensione sui GPIO pari a 5V (come Arduino Uno R3 o Arduino Mega 2560) oppure a schede con livelli di tensione sui GPIO pari a 3,3V (ad esempio il Raspberry Pi). Non è necessario, quindi, ricorrere all’utilizzo di resistenze di limitazione o di circuiti traslatori di livello. Questa funzionalità è resa possibile dalla presenza, sul PCB del display, di un regolatore di tensione da 5V (ingresso) a 3,3V (uscita);
- interfaccia dati parallela a 8 oppure 16 bit. L’utilizzo di un’interfaccia parallela ha indubbiamente lo svantaggio di richiedere un numero maggiore di collegamenti (cavetti da “tirare” tra i connettori della scheda Arduino e il connettore del modulo display) rispetto a un’interfaccia seriale (come ad esempio SPI oppure I2C). Per contro, il display può essere facilmente controllato da una vasta gamma di microcontrollori o microprocessori, a condizione che dispongano del numero di GPIO richiesti. Il motivo per cui è prevista una doppia interfaccia (8 bit oppure 16 bit) è legato alle dimensioni del bus del display controller, il chip ILI9325;
- presenza di uno slot per ospitare una scheda di memoria SD;
- compatibilità con le librerie grafiche UTFT (torneremo su questo punto quando analizzeremo la componente software del progetto).
In Tabella 1 è riportata la descrizione dei segnali presenti sul connettore a 40 pin del display.
Pin | Tipo | Descrizione |
GND | G | Ground |
Vcc | P | Alimentazione 5V |
NC | - | Non collegato |
RS | I | Selezione Dati / Comando |
WR | I | Segnale di abilitazione scrittura, attivo basso |
RD | I | Segnale di abilitazione lettura, attivo basso |
DB8 | I | Bus Dati |
DB9 | I | Bus Dati |
DB10 | I | Bus Dati |
DB11 | I | Bus Dati |
DB12 | I | Bus Dati |
DB13 | I | Bus Dati |
DB14 | I | Bus Dati |
DB15 | I | Bus Dati |
CS | I | Chip Selection, attivo basso |
LED_A | P | Retroilluminazione |
DB0 | - | Non collegato (modalità a 8 bit) |
I | Bus Dati | |
DB1 | - | Non collegato (modalità a 8 bit) |
I | Bus Dati | |
DB2 | - | Non collegato (modalità a 8 bit) |
I | Bus Dati | |
DB3 | - | Non collegato (modalità a 8 bit) |
I | Bus Dati | |
DB4 | - | Non collegato (modalità a 8 bit) |
I | Bus Dati | |
DB5 | - | Non collegato (modalità a 8 bit) |
I | Bus Dati | |
DB6 | - | Non collegato (modalità a 8 bit) |
I | Bus Dati | |
DB7 | - | Non collegato (modalità a 8 bit) |
I | Bus Dati | |
T_CLK | I | Touch Clock |
T_CS | I | Touch Chip Selection |
T_DIN | I | Touch Data Input |
T_DO | O | Touch Data Output |
T_IRQ | O | Touch Interrupt |
SD_DO | O | SD Data Output |
SD_DIN | I | SD Data Input |
SD_CLK | I | SD Clock |
SD_CS | I | SD Chip select |
REST | I | Reset |
Tabella 1: Layout del connettore a 40 pin del modulo display
Legenda: I=input, O=output, P=alimentazione positiva, G=ground
Il display controller
Il controller del display grafico è rappresentato dal chip ILI9325, un System on Chip (SoC) in grado di pilotare display a cristalli liquidi di tipo TFT con risoluzione di 240x320 pixel (QVGA) e 262144 colori. Il circuito integrato comprende una memoria RAM per la grafica di 172800 byte e circuito di alimentazione. Il chip ILI9325 è in grado di supportare diverse tipologie di interfacce: parallela a (8-/9-/16-/18-bit), interfaccia VSYNC, interfaccia seriale SPI e interfaccia RGB a 6-/16-/18-bit. Come già anticipato in precedenza, il modulo display utilizzato nell’articolo utilizzerà un’interfaccia di comunicazione di tipo parallelo. L’ILI9325 opera con una tensione di I/O pari a 1,65V ed è dotato internamente di un circuito inseguitore di tensione per generare i livelli richiesti dall’LCD. È inoltre supportata una modalità di funzionamento del display a soli 8 colori, abbinabile alle modalità sleep e standby a basso assorbimento. Queste funzionalità rendono il chipset ILI9325 la soluzione ideale per dispositivi elettronici portatili di piccole e medie dimensioni, dove una lunga durata della batteria è un requisito imprescindibile. In Figura 2 possiamo osservare uno schema a blocchi del chipset ILI9325 con in evidenza le varie funzionalità interne.
Il touch controller
Il touch controller presente nel modulo display è rappresentato dal chipset XPT2046, un controller per touchscreen di tipo resistivo che incorpora un convertitore analogico-digitale ad approssimazioni successive con risoluzione di 12 bit e frequenza operativa di 125 kHz. L’XPT20246 ha una tensione operativa di 2,2V, ma supporta valori di tensione sull’interfaccia di I/O digitale compresi tra 1,5V e VCC, in modo tale da consentire il collegamento con microcontrollori a bassa tensione. Il chipset è in grado di rilevare il punto di touch eseguendo due conversioni A/D; oltre al punto di contatto sul display, viene determinata anche la pressione eseguita sullo stesso. La tensione di riferimento VREF fornita dal chip può essere utilizzata per servire un ingresso ausiliario di tipo analogico, oppure per monitorare la temperatura (tramite il sensore integrato) o la tensione di una batteria. L’XPT2046 è disponibile in package QFN a 16 pin e basso profilo, con range di temperature compreso tra -40°C e +85°C. Lo schema a blocchi dell’integrato XPT2046 è visibile in Figura 3. Le due coppie di pin (XN, YN) e (XP, YP) sono i segnali utilizzati per la gestione del touch.
Cablaggio
Possiamo ora analizzare i cablaggi richiesti per il collegamento con la scheda Arduino Mega 2560, dei pin relativi al display e di quelli relativi all’interfaccia touch. Verrà ignorato in questa sede il collegamento dei pin relativi alla scheda di memoria SD, in quanto non utilizzata in questa sede. Per comodità, in Tabella 2 sono riassunti i collegamenti relativi al display, mentre in Tabella 3 i collegamenti richiesti dalla funzionalità touch.
Pin modulo display | Pin scheda Arduino Mega 2560 |
LED_A | 5V |
VCC | 5V |
RD | 3,3V |
GND | GND |
da DB0 a DB7 (1) | da D37 a D30 (1) |
da DB8 a DB15 (1) | da D22 a D29 (1) |
RS | D38 |
WR | D39 |
CS | D40 |
REST | D41 |
Tabella 2: Elenco dei collegamenti tra scheda Arduino Mega 2560 e connettore display
Nota: relativamente al cablaggio dei 16 pin che compongono il data bus, occorre fare un’importante osservazione. Se si vogliono utilizzare tutti e 16 i pin del data bus (opzione che offre i tempi di aggiornamento del display più rapidi), occorre eseguire tutti i cablaggi dei pin da DB0 a DB15 come indicato in Tabella 2. Se invece ci si accontenta di utilizzare soltanto 8 pin del bus dati (opzione leggermente meno performante rispetto alla precedente, ma che semplifica enormemente il cablaggio) occorrerà collegare soltanto i pin da DB8 a DB15 come indicato in Tabella 2. Dalle informazioni riportate in Tabella 1 sappiamo infatti che i pin da DB8 a DB15 sono sempre utilizzati (in entrambe le modalità a 8 e a 16 bit), mentre i pin da DB0 a DB7 sono utilizzati solo nella modalità a 16 bit.
Pin modulo display | Pin scheda Arduino Mega 2560 |
T_CLK | D6 |
T_CS | D5 |
T_DIN | D4 |
T_DO | D3 |
T_IRQ | D2 |
Tabella 3: Elenco dei collegamenti tra scheda Arduino Mega 2560 e connettore display (relativamente alla funzionalità touch)