I progetti HMI relativi ai sistemi embedded stanno evolvendo rapidamente in quanto il costo di produzione legato a interfacce sempre più accattivanti ed eleganti continua a diminuire. Alcune applicazioni già combinano interfacce a rilevamento tattile capacitivo - come tasti, cursori e touchscreen a feedback tattile - con un ricco set di funzioni di visualizzazione grafica. Tali applicazioni sono basate sull'ultima generazione di microcontrollori single chip equipaggiati con controller di visualizzazione grafica e periferiche, per lo sviluppo di controller per rilevamento tattile capacitivo, touchscreen e Usb. Le nuove Mcu consentono potenzialmente di ottenere costi di sistema più bassi e una gamma più ampia di opzioni per una maggiore integrazione di sistema. Tuttavia, se da un lato consentono ai progettisti di ridurre i costi hardware a livello di sistema, di produzione e di scorte, esse comportano una maggiore complessità di sviluppo per quanto riguarda il software. Ciò può avere un impatto determinante sul time-to-market. A questo si aggiunge il fatto che il software è chiamato a garantire una robusta integrazione tra touchsensing e le altre funzioni di interfacciamento uomo-macchina presenti a bordo dell’Mcu. In primo luogo, è necessario chiarire l'origine di questi aspetti. Prendiamo, per esempio, il rilevamento tattile capacitivo. Quando sono stati introdotti i primi i tasti sensibili al tatto, i progettisti si sono presto resi conto che non erano così semplici da implementare, come i pulsanti tradizionali. I tasti sensibili al tatto devono essere trattati allo stesso modo dei sensori analogici: il rumore irradiato, o il rumore condotto da fonti ambientali (come comuni elettrodomestici, lampade fluorescenti compatte, alimentatori, telefoni cellulari e motori) deve infatti essere gestito attentamente. Per ottenere dei tasti solidi e reattivi è necessario ricorrere a specifiche tecniche software di rilevamento, filtraggio, antirimbalzo e così via. Oltre a questo è necessario garantire un buon layout per l'acquisizione del segnale ma anche prevedere - a livello di interfaccia uomo-sistema - l’aggiornamento dell’Lcd (segmentato o grafico) quando viene ricevuto un input dell'utente. Restituire dei costrutti grafici - come forme geometriche o testi - su un display Tft o Oled implica una certa larghezza di banda del processore. Vi è anche da considerare l'interfaccia utente per le applicazioni che integrano funzioni touch-screen di ingresso in aggiunta alla visualizzazione grafica e ai tasti sensibili al tatto.
Infine, viene in genere richiesta un'interfaccia di comunicazione, per esempio un’interfaccia Usb. La sfida, dunque, sta nello sviluppare le funzioni necessari per l’elaborazione in tempo reale degli input dell'utente generati da tasti sensibili al tatto e dal sensore touch-screen, le funzioni di trasmissione dati Usb, nonché le funzioni di aggiornamento del display. La soluzione si divide in due categorie, determinanti per l'hardware e il software sottostanti.
Implementazione Hardware
Esistono numerose Mcu che combinano – su un unico chip - un controller Lcd e una periferica dedicata al rilevamento tattile. Tipicamente però il controller Lcd pilota un display segmentato e non un Lcd grafico. Gli Mcu di ultima generazione, quali il PIC24FJ256DA210 di Microchip portano l’integrazione su nuovi livelli combinando un controller di visualizzazione grafica, una periferica Usb 2.0 On-The-Go e una speciale periferica analogica che può essere sfruttata per il rilevamento tattile. Per supportare la visualizzazione grafica, il PIC24FJ256DA210 dispone di una tabella colori di look-up integrata, di una Ram da 96KB, di una Gui (Graphic processing unit) e di un’interfaccia diretta verso display Stn, Tft e Oled. La grossa Ram on-board consente di immagazzinare al suo interno dati grafici a 256-colori a 8-bit per pixel per un display Qvga da 320x240. Le pallette di colori – utilizzate nella tabella di look-up – possono essere trasformate per utilizzare un set differente di 256 colori su organizzazioni d’immagine differenti. Il Gpu consente di riprodurre semplici oggetti – quali linee, testi Ascii e immagini PNG-like decompresse – con un unico comando. Questo riduce allo 0% il sovraccarico della Cpu. La Fig. 2 mostra anche la periferica analogica Ctmu (Charge Time Measurement Unit). Il rilevamento tattile capacitivo rappresenta una delle tante applicazioni supportate dalla periferica Ctmu. La Ctmu mette a disposizione una fonte di corrente costante e un timer che possono essere utilizzati per caricare un pad di rilevamento. La tensione del pad può essere misurata dall’Adc (Analogue-to-Digital Converter) on-chip. Quando il dito dell’utente passa sul pad, la variazione di capacità sul sensore viene rilevata dall’Adc sotto forma di cambiamento di tensione. Nell’implementazione più semplice ciascun canale Adc può essere connesso a un ingresso legato a un tasto sensibile al tatto. Con i suoi 24 canali Adc il PIC24FJ256DA210 mette a disposizione un numero sufficiente di risorse sensibili al rilevamento capacitivo per coprire le esigenze della maggior parte delle applicazioni. A livello hardware vi è una considerazione ulteriore: se l'applicazione ha sia un input da touchscreen resistivo sia dei tasti sensibili al tatto (utili per esempio come scorciatoia alle funzioni del menu) il display Lcd grafico è ricoperto da uno strato di rilevamento tattile resistivo. Se il controller del touchscreen è integrato nella Mcu principale, le uscite del sensore touchscreen - che sono in genere a 4 o 5 fili - possono essere collegate ai canali analogici della Mcu. In questo caso, la risorsa Adc sulla Mcu è condivisa tra le funzioni relative ai tasti sensibili al tocco e al touchscreen. Le misure Adc vengono utilizzate per stimare le coordinate X & Y percepite sul touchscreen.
Implementazione del software
Tipicamente, i firmware per il driver di visualizzazione grafica e per il touch sensing capacitivo risiedono in librerie separate. Per una efficace integrazione di queste librerie, è richiesta una routine master funzionante in modo simile a un sistema operativo Real-Time, che permetta di stabilire la priorità e la frequenza di schedulazione di ogni task. Per le task che condividono delle risorse hardware comuni, la routine principale deve anche prevedere un meccanismo di aggiornamento non distruttivo dei registri di controllo e dati relativi alla risorsa condivisa, prima che questa sia trasferita tra le varie attività. Nell'esempio di cui sopra, sia il touch-screen sia i tasti sensibili al tocco vanno ad alimentare l’Adc. La velocità di campionamento dell'Adc, i canali campionati e il numero di campioni necessari sono differenti per il sensore touch-screen e per i tasti. Pertanto è necessario che la routine principale sia in grado di salvare questi parametri prima di commutare tra i due task. Poiché l'utente può, in qualsiasi momento, operare sia sul touch-screen sia sui tasti, potrebbe essere necessario nella routine un meccanismo a divisione di tempo che permetta di campionare entrambi i sensori con una frequenza adeguata. Il display invece potrebbe avere bisogno aggiornamenti periodici nel caso in cui, ad esempio, l'applicazione richiedesse la riproduzione di una grafica animata. Se invece il display viene aggiornato solo quando l'utente effettua le selezioni di menu, non vi è conflitto sulle risorse della Cpu tra le funzioni di touch-sensing e le funzioni di pilotaggio del display. Poiché il dispositivo utilizzato a titolo di esempio (PIC24FJ256DA210) dispone di un hardware di accelerazione grafica, la campionatura delle funzioni tattili e grafiche è un problema minore. Su questo dispositivo, la riproduzione di un box, di una linea o di un testo Ascii richiede semplicemente un unico comando di Cpu. Un progetto dimostrativo che illustra l'integrazione dei tasti sensibili al tocco, del sensore touchscreen e del display grafico (usando librerie software distinte) è disponibile per il download gratuito unitamente alla mTouch Capacitive-Touch Library e può essere eseguito sulla scheda di sviluppo PIC24FJ256DA210.
Insieme al rilevamento tattile esistono altre funzioni che possono essere integrate su un singolo chip. Per esempio, la periferica Ctmu può essere sfruttata per il rilevamento della temperatura, per la strumentazione medica, per la misurazione del tempo o per altre applicazioni. In un'applicazione quale un termostato, è possibile utilizzare la periferica Ctmu per il rilevamento della temperatura, oltre che per il touch-sensing, utilizzando un diodo esterno. Poiché la misurazione della temperatura deve essere eseguita di rado è possibile condividere questa periferica tra le due funzioni.
Comunicazioni Usb
L’integrazione tra Usb e touchsensing è relativamente facile se si seguono delle semplici regole. Quando l'applicazione è collegata a un host Usb, essa passa attraverso una fase di conteggio che assorbe gran parte della larghezza di banda della Cpu. Una volta che la fase di conteggio è stata completata le funzioni di rilevamento tattile possono essere avviate nuovamente, ma questo può avvenire nel giro anche di un paio di minuti. A conteggio ultimato, le funzioni Usb consumano una quantità molto piccola della larghezza di banda della Cpu, di solito inferiore al 2%. A questo punto, la routine principale può scegliere se servire la funzione di ricezione Usb periodicamente, ogni millisecondo o seguendo un approccio interrupt-driven. Molte applicazioni dotate di interfacce sensibili al tatto hanno iniziato a integrare funzioni di feedback tattile. L'integrazione del feedback tattile in un’applicazione è una sfida più di tipo meccanico che altro. Tipicamente essa richiede una semplice periferica di Pwm (Pulse Width Modulation) per pilotare un piccolo vibratore o un motore. È ipotizzabile che, in alcune applicazioni, la periferica Pwm on-chip sia usata anche per pilotare un altoparlante. In questi casi, un’integrazione efficace può richiedere basi di tempo separate per il canale Pwm che sta guidando il feedback tattile e per il canale dedicato al diffusore audio.