• Non ci sono risultati.

6.4 Interazione: Touch

6.4.1 Modulo Texas Instruments ADS7846

Il touch screen controller, in seguito indicato con la sigla TSC, è il dispositivo che permette la comunicazione tra un pannello touchscreen e un dispositivo di elabo-razione. Il TSC utilizzato in questo progetto è l’ADS7846 di Texas Instruments.

Esso rientra nella tipologia di controller basata su tecnologia command-based, ossia il controller funziona esclusivamente sotto il controllo del dispositivo di elabora-zione, definito anche host. Questo paragrafo si basa in larga parte sul materiale riportato nel datasheet del TSC utilizzato [19] e nelle note applicative fornite da Texas Instruments [20][21][22].

Sul display descritto precedentemente trova applicazione un touchscreen di tipo resistivo che utilizza il controller ADS7846 di Texas Instruments.

Come mostrato in figura 6.18, un controller touchscreen dispone di due interfacce:

1. L’interfaccia analogica, dalla quale transitano i dati dal pannello touchscreen al controller.

2. L’interfaccia digitale, dalla quale transitano i dati dal TSC al dispositivo di elaborazione.

Quest’ultima interfaccia permette il collegamento e lo scambio di dati con l’host tramite un bus SPI o I2C. L’ADS7846 utilizza il bus SPI per comunicare i dati relativi alle coordinate (x, y) del punto di pressione, agendo come slave e quindi

6.4 – Interazione: Touch

LCD Touch-screen

resistivo TSC Host

X+,X-,Y+,Y- Bus I2C/SPI

Interrupt

Interfaccia analogica Interfaccia digitale

Figura 6.18: Schema di un sistema contenente un touchscreen 4-wire

comunicando i dati all’host unicamente quando il TSC rileva una pressione sul pannello touchscreen.

Generalmente i TSC command-based richiedono la completa attenzione dell’host durante il rilevamento di una pressione sul touchscreen. La sequenza delle ope-razioni eseguite dall’ADS7846, nonché dei dispositivi TSC command-based, è la seguente:

1. In assenza di pressione sul pannello touchscreen il controller viene spento e non vi sono dati in transito né sull’interfaccia analogica né su quella digitale.

2. Quando si ha una pressione sul pannello si verificano i seguenti step:

(a) Il TSC rileva la pressione e invia all’host un interrupt (PENIRQ), solleci-tandone l’immediata attenzione.

(b) L’host riceve l’interrupt e avvia la corrispondente Interrupt Service Rou-tine (ISR).

(c) L’ISR invia un comando al TSC tramite il bus SPI (o I2C per controller diversi dall’ADS7846) e richiede al TSC di leggere una coordinata del punto di tocco, generalmente la coordinata x.

(d) Alla ricezione del comando indicato al punto (c), il TSC accende il driver relativo alla coordinata x.

(e) Il TSC acquisisce il segnale relativo alla coordinata x e converte il segnale analogico in digitale, inviando i dati all’host un bit alla volta.

(f) L’host riceve un’unità di dati relativi all’asse x, formata da 8 o 12 bit a seconda della configurazione del TSC. Se sono necessarie più unità di dati (ai fini di filtraggio o media) vengono ripetuti i passi (c) - (e).

(g) L’ISR invia un comando al TSC tramite il bus SPI (o I2C per altri con-troller) e richiede al controller di leggere un’altra coordinata del punto di tocco, generalmente la coordinata y.

(h) Alla ricezione del comando precedente, il TSC spegne il driver relativo alla coordinata x e accende il driver relativo a y.

(i) Il TSC acquisisce il segnale relativo alla coordinata y e converte il segnale analogico in digitale, inviando i dati all’host un bit alla volta.

(j) L’host riceve un’unità di dati relativi all’asse y. Se sono necessarie più unità di dati vengono ripetuti i passi (g) - (i).

(k) Alla fine della ricezione del set completo di coordinate (x, y) l’host abilita nuovamente PENIRQ e verifica se il pannello è ancora premuto. In caso affermativo ritorna al passo (b) per il prossimo set di coordinate.

3. Se non vi è più pressione sul pannello si ritorna allo step (1).

Nella figura6.19è rappresentato lo schema del funzionamento di base del controller utilizzato. In aggiunta alla coppia (x, y), l’ADS7846 fornisce due coordinate chia-mate z1 e z2, le quali permettono di ricavare l’informazione sul livello di pressione nel punto di tocco, utile ad esempio per implementare azioni diverse all’interno dei giochi sviluppati e descritti nei capitoli successivi.

Figura 6.19: Schema operativo di base dell’ADS7846. Fonte: Texas Instruments.

Quando si utilizza un touchscreen come human interface, tipicamente ci si aspetta da 100 a 500 set di campioni validi al secondo e un controller touchscreen command-based potrebbe non essere in grado di fornirne un numero sufficiente. Per un di-spositivo TSC che implementa il bus SPI, come l’ADS7846, anche se la velocità del bus generalmente non influenza il parametro SSPS (sample sets per second), a differenza di quanto può accadere nel caso del bus I2C, vi possono essere com-plicazioni dovute al traffico intenso sul bus che può causare problemi sull’host e/o consumare più corrente.

6.4 – Interazione: Touch

La velocità di trasmissione dei dati diventa un aspetto sensibile soprattutto quando vengono utilizzate tecniche di filtraggio o viene effettuata una media dei valori letti, che comporta più ripetizioni della sequenza di operazioni vista precedentemente.

Per quanto riguarda l’interfaccia analogica, nel caso dei controller touchscreen command-based, l’intervallo tra un campione e l’altro è determinato dalla velocità di risposta dell’host e dalla sua larghezza di banda. Inoltre, in presenza di rumore nel TSC, l’host deve effettuare un’operazione di media dei dati o un opportuno filtraggio, operazioni che richiedono almeno due campioni per ciascuna coordinata del sistema, ed anche in questo caso il numero di campioni è determinato dalla larghezza di banda dell’host e dalle sue risorse.

Le caratteristiche principali dell’ADS7846 sono le seguenti:

• risoluzione di 12 bit;

• tempo massimo di conversione di un campione pari a 12 cicli di clock;

• tempo minimo di acquisizione di un campione pari a 3 cicli di clock;

• throughput rate massimo di 125 kHz;

• tensione di alimentazione compresa tra 2,7 V e 5,25 V;

• consumo inferiore a 0,75 mW (typ 2,7 V).

La maggior parte degli errori che possono influire sull’accuratezza e l’affidabilità del touchscreen può essere attribuita a tre fonti. La prima riguarda il rumore elet-trico proveniente dal display, dalla retroilluminazione, dall’interazione con l’utente, dalle vibrazioni della superficie del pannello o dalle scariche elettrostatiche e da-gli impulsi elettromagnetici causati dada-gli utenti e dall’ambiente. Le restanti fonti riguardano invece i fattori di ridimensionamento e i disallineamenti meccanici che hanno origine nell’assemblaggio del touchscreen con il display.

In genere, il TSC e il display in un sistema non hanno la stessa risoluzione, pertanto è necessaria un’operazione di ridimensionamento, effettuata attraverso l’introduzio-ne di fattori di ridimensionamento. Ad esempio, in questo progetto il touchscreen si trova su un display LCD con una risoluzione di 320 pixel (x) × 240 pixel (y) mentre il controller ADS7846 ha una risoluzione a 12 bit, ovvero 4096 × 4096. I fattori di ridimensionamento per abbinare i dispositivi sono kX = SX/SX = 320/4096 = 0,078125 per la coordinata dell’asse x e kY = SY/SY = 240/4096 = 0,05859375 per la coordinata dell’asse y, con SX risoluzione dell’asse x dell’LCD, SX risoluzione dell’asse x del controller e analogamente SY e SY.

In una situazione in cui kX = 1 e kY = 0,9, un punto P (x, y) = (2, 2,22222) sul touchscreen dovrebbe essere fatto coincidere con il punto del display LCD di coor-dinate (y, y) = (2, 2). Pertanto, la coordinata x di un controller touchscreen, x,

dovrebbe coincidere con il valore dell’LCD (host) x = kX × x e analogamente per quanto riguarda la coordinata y.

L’operazione di riduzione o eliminazione di eventuali incongruenze prende il nome di calibrazione ed essa permette di tradurre le coordinate riportate dal controller del touchscreen in coordinate che rappresentano con precisione il punto e la posizione dell’immagine sul display sottostante.

Il risultato della calibrazione, nel caso del Raspberry Pi, consiste in un insieme di valori che opportunamente utilizzati dal driver del controller ADS7846, permettono di far coincidere la superficie del pannello touchscreen con quella effettiva del display sottostante, consentendone quindi un utilizzo naturale da parte dell’utente.

Per quanto riguarda il collegamento del controller al Raspberry Pi è stato utilizzato il bus SPI0, condiviso con il display LCD che si avvale del pin CE0. Come previsto dal protocollo di comunicazione SPI, i pin adoperati sono quattro: SPI0 MOSI, SPI0 MISO, SPI0 SCLK e SPI0 CE1. A questi si aggiungono i pin di alimentazione, condivisi con il display in quanto entrambi i componenti sono saldati sullo stesso PCB, e il pin relativo al segnale di interrupt, PENIRQ.