La necessità di dispositivi human interface in applicazioni consumer ed industriali ha determinato una sempre più crescente domanda di display a cristalli liquidi. Microchip ha fatto fronte a questa necessità con diverse serie di microcontrollori PIC con driver LCD on-board. I PICMicro offrono la possibilità di realizzare un controller LCD. Questo comporta una sensibile riduzione di costi e tempo poiché non è più necessario impiegare un controller esterno. In questo articolo vengono presentati i concetti fondamentali e le tecniche generali di implementazione.
INTRODUZIONE
A partire dalle serie PIC16F91X, PIC18F6390/6490/8390/8490 e PIC16F65J90/85J90 è possibile pilotare display con un numero di segmenti sempre maggiore e per le più disparate applicazioni. La possibilità di utilizzare lo stesso micro per pilotare il display e per eseguire i tasks di gestione dell’algoritmo, permette di ridurre i costi e l’area occupata per il PCB. Diversamente, sarebbe necessario prevedere un chip separato che gestisca il display e che comunichi con il micro. Inoltre, la gestione di appropriate forme d’onda e la possibilità di configurare diverse sorgenti di clock assicura flessibilità e affidabilità del progetto. Per applicazioni portatili è poi previsto il pilotaggio anche con il micro in modalità sleep, assicurando bassi consumi. La Tabella 1 riassume il numero massimo di segmenti che è possibile pilotare con i diversi micro dotati di modulo LCD.
Termini come multiplexed, statico e bias saranno affrontati e descritti nel corso dell’articolo; si esamineranno anche gli aspetti fondamentali che caratterizzano un display LCD e come interfacciarlo con un PICMicro dotato di driver LCD.
LA TEORIA
Come funziona un LCD
Un pannello LCD è costituito da diversi layers, ciascuno dei quali svolge una funzione ben precisa. La Figura 1 li riassume, dandone una visione tridimensionale che corrisponde al modo in cui essi sono assemblati nella realtà.
Lo strato con i cristalli liquidi (LC) è formato da molecole di forma lunga e cilindrica. Gli strati più esterni di tali molecole sono orientati secondo i layers polarizzatori. Poiché le polarizzazioni di quest’ultimi sono a 90° tra loro, normalmente (cioè, senza nessun potenziale applicato) lo strato LC forma una sorta di elica, per passare da uno stato di polarizzazione a quello ortogonale. Questo fenomeno è schematizzato nella Figura 2, in cui le molecole LC sono rappresentate con dei cilindri grigi.
Un fascio di luce entrante nel segmento, subisce una variazione della polarizzazione di 90° passando attraverso lo strato LC. Lo stesso fascio di luce arrivato al riflettore compirà lo stesso percorso ma al contrario, dando l’impressione che il segmento sia spento (OFF). Se invece si applica un potenziale agli estremi dello strato LC, allora le molecole ricevono l’energia necessaria per disporsi parallelamente al campo elettrico. In questa condizione il percorso della luce non subisce alcuna variazione di polarizzazione e quindi al riflettore non giunge nulla. Il segmento in questo caso appare annerito e quindi risulta acceso (ON).
Parametri tipici di un LCD
La prima causa di danneggiamento di un LCD è l’applicazione di una tensione continua. Una DC provoca il deterioramento del fluido LC, in modo che esso non può più essere energizzato. Per questo motivo, un driver LCD è fatto in modo tale da aver una componente continua nulla (VDC = 0). Tra le altre specifiche di questi display ci sono anche le tensioni VOFF e VON. Esse rappresentano le tensioni RMS (Root Mean Square) da applicare per spegnere e accendere, rispettivamente, il pixel. Un terzo valore di tensione è la VTH, che indica il punto in corrispondenza del quale il contrasto raggiunge un livello del 10%. Spesso si assume VTH come VOFF. Invece, VON si definisce come il punto in cui il contrasto è pari al 90%. La Figura 3 mostra la tipica caratteristica di un display LCD.
L’altro parametro importante nella valutazione di un display è il tasso di discriminazione (DR), definito come il livello di contrasto che esso riesce a raggiungere. Oltre alle caratteristiche statiche è importante tener conto anche di quelle dinamiche, tra cui l’ON time, ossia il tempo necessario perché un pixel spento si accenda. Analogamente, si definisce l’OFF time. Come spesso accade nei dispositivi elettronici, la temperatura gioca un ruolo importante nei tempi di risposta. Questo è uno dei motivi per cui non esistono pannelli LCD nei distributori di gas in Alaska senza un sistema di riscaldamento opportuno! Lo svantaggio dei riscaldatori è che per ogni pollice quadrato di LCD sono necessari 2-3 watts. Ciascun segmento può essere modellato come una capacità non lineare. La sua dimensione incide sul valore di tale capacità. Valori tipici sono 1000-1500pF/cm2. La Figura 4 mostra un esempio di pannello di tipo 1/3 MUX (in seguito sarà chiarito il significato di tale dicitura) con le relative capacità.
Si comprende come il driver per il backplane (COMn) deve essere in grado di pilotare una capacità superiore a quella di ogni singolo segmento. Con i PIC16C92x, ad esempio, è possibile pilotare backplanes fino a 5000pF/cm2 e segmenti fino a 500pF/cm2.
Classificazione degli LCD
Gli LCD possono essere classificati in due differenti categorie: statici o multiplexed. Il primo tipo è caratterizzato dal fatto che ciascun pixel ha un driver indipendente. Esiste un unico backplane ed il bias è pari ad 1. Si definisce bias l’inverso del numero dei livelli di tensione necessari per creare l’immagine meno 1. Per un LCD statico sono necessari solo due livelli, quindi 1/(2 livelli -1) = 1. Questo tipo di display ha il miglior contrasto possibile, su tutto il range di temperatura. L’altra categoria è rappresentata dagli LCD multiplexed. In questo caso il driver risulta più complesso poiché deve generare un segnale di ampiezza variabile e sincronizzato sia per i segmenti che per i backplanes. Si noti che si è usato il plurale per il backplane, poiché è proprio questa la caratteristica rilevante di questi display: si riesce a ridurre il numero di linee, creando più piani comuni. Il loro numero è indicato con il termine MUX. Quando si dice che un display è di tipo 1/3 MUX e 1/4 bias significa che è dotato di 3 backplanes e 5 livelli di tensione per il controllo. La Tabella 2 evidenzia i vantaggi di usare un multiplexed anziché uno statico, fermo restando che quest’ultimo presenta un contrasto superiore. Sensibile risulta la riduzione di linee utilizzate per un pannello grafico 128x240.
Nel caso di LCD statico sarebbero necessarie 30721 linee, mentre con un multiplexed a 128 backplanes servono solo 368 linee: una riduzione del 99%. Le capacità di pilotaggio di un PIC16C92X sono riportate nella Tabella 3.
Il bias massimo consentito è 1/3, ossia non più di 4 livelli di tensione. Questi valori (VLCD1, VLCD2, VLCD3) devono essere selezionati dall’esterno, tranne VLCD0 che è collegato internamente con la massa del micro.
Come sono pilotati gli LCD
Si è visto che un display LCD è caratterizzato da due valori, il bias ed il MUX. In realtà, esiste un terzo parametro: la forma d’onda per pilotarlo: tipo A e tipo B. Relativamente a tali forme d’onda si definisce il periodo di frame, ossia:
Periodo di frame = periodo LCD / MUX
dove periodo LCD rappresenta la frequenza con cui varia lo stato sul backplane o sul segmento. L’intervallo di valori in cui può variare è compreso tra 25Hz e 250Hz o più generalmente tra 50 e 150Hz. Valori troppo bassi provocano effetti di flicker, troppo alti invece richiedono troppa potenza al driver. A questo punto è possibile specificare la differenza tra forme d’onda tipo A e B. La prima mantiene 0VDC su un singolo frame, mentre la seconda su due frame. La Figura 5 mostra un esempio di entrambi i tipi.
La Figura 6 mostra le forme d’onda per il controllo di un LCD statico.
Come si nota esso ha un unico backplane (MUX = 1) e necessita di due soli livelli di tensione (V1 e V0). La frequenza di frame corrisponde con quella dell’LCD. La Figura 7 mostra, invece, il caso di un LCD multiplex. Il periodo di frame è pari al doppio del periodo LCD.
LA PRATICA
Interfaccia LCD nei PICMicro
Il diagramma a blocchi di un driver LCD integrato nei PICMicro è costituito da 3 blocchi principali (Figura 8):
- Registri LCDDATA: essi contengono i bit che corrispondono ai singoli segmenti che saranno visualizzati. Un totale di 24 registri consente di controllare fino a 24 · 8 = 192 pixel.
- Controllo della temporizzazione: questo blocco serve per generare le forme d’onda appropriate. I registri interessati sono LCDCON, LCDPS e sei registri per l’abilitazione dei segmenti (LCDSE0- LCDSE5). Possono essere generate sia forme d’onda tipo A che tipo B, per display statici oppure con MUX 1/2, 1/3 e 1/4.
- Sorgente di clock: questo blocco è indispensabile per generare il segnale di cui sopra. Sono assicurate tre differenti sorgenti di clock: FOSC/8192, T1OSC/32 e LFINTOSC/32. Se il PIC è in modalità sleep, il display funziona ugualmente purché non si utilizzi come clock quello principale.
Configurazione del modulo LCD
La sequenza delle operazioni da seguire per configurare il modulo LCD del PIC consta di 6 punti fondamentalmente:
- Selezionare il frame clock mediante i bit LP3:LP0 del registro LCDPS (Tabella 4).
- Configurare i pin del PIC in modo da farli funzionare da driver dei segmenti, tramite i registro LCDSEn (Tabella 5).
- Tramite il registro LCDCON (Tabella 6) impostare le seguenti funzioni:
- Modalità di multiplex e bias mediante i bit LMUX1:LMUX0.
- Sorgente della temporizzazione tramite CS1:CS0 (Tabella 8).
- Generazione delle tensioni, abilitata con il bit VGEN.
- Modalità sleep abilitata tramite il bit SLPEN.
- Scrivere il valore iniziale nel registro dei dati, da LCDDATAx (Tabella 9).
- Azzerare il bit dell’interrupt dell’LCD (LCDIF) e se necessario abilitare l’interrupt con il bit LCDIE.
- Infine, abilitare il modulo LCD tramite il bit LCDEN del registro LCDCON.
Il listato 1 riporta i passi appena descritti in linguaggio assembler. Si noti come sia semplice pilotare i singoli segmenti. Ad esempio, per spegnere il pixel relativi al primo registro dati è sufficiente l’istruzione CLRF LCDD00. La possibilità impostare un interrupt che definisce la temporizzazione del frame, serve per sincronizzare la scrittura dei pixel con l’inizio del nuovo frame. Per ridurre al minimo i consumi di corrente causati dal pilotaggio dei segmenti e dei backplanes, è stata prevista una modalità di sleep in cui può operare il modulo LCD. Impostando ad 1 il bit SLPEN del registro LCDCON si manda il modulo in sleep.
BCF PIR1,LCDIF ; Azzera il bit dell’interrupt dell’LCD BCF STATUS,RP0 BSF STATUS,RP1 MOVLW 0x06 ; Imposta la frequenza di frame a ~37Hz MOVWF LCDPS MOVLW 0xff ; Attiva tutti i pin per pilotare I segmenti MOVWF LCDSE MOVLW 0x17 ; Abilita il pilotaggio in SLEEP mode MOVWF LCDCON ; Sorgente di clock dal Timer1, 1/4 MUX CLRF LCDD00 ; Azzera tutti I registri dati CLRF LCDD01 ; In questo modo tutti I pixel risultano spenti CLRF LCDD02 CLRF LCDD03 CLRF LCDD04 CLRF LCDD05 CLRF LCDD06 CLRF LCDD07 CLRF LCDD08 CLRF LCDD09 CLRF LCDD10 CLRF LCDD11 CLRF LCDD12 CLRF LCDD13 CLRF LCDD14 CLRF LCDD15 BSF PIE1,LCDIE ; Abilita l’interrupt dell’LCD BSF LCDCON,LCDEN ; Abilita il modulo LCD BCF STATUS,RP1
Listato 1 |
Modalità Sleep
Per applicazioni in cui è importante visualizzare continuamente i dati sul display, è possibile mettere il PIC in modalità Sleep mentre il controller LCD continua a funzionare. Per fare ciò sono necessarie due semplici operazioni:
- Selezionare una sorgente di clock differente dall’oscillatore principale, poiché in sleep mode esso viene fermato.
- Impostare ad 1 il bit SLPEN del registro LCDCON.
Il codice riportato nel Listato 1 attiva questa modalità e seleziona come clock del driver il Timer1.
Generazione delle tensioni per l’LCD
Come è stato mostrato, mentre un LCD statico necessita di soli due livelli di tensione (0V e 5V), un multiplexed necessita di 3 o 4 livelli di tensione. Tali tensioni devono essere fornite dall’esterno, tramite opportuni pin del micro (VLCD1, VLCD2, VLCD3). Il modo più semplice per fare questo consiste nel l’usare una rete di resistori per creare le varie tensioni, partizionandole dall’alimentazione come mostrato in Figura 9.
Da notare che non esiste il pin VLCD0 poiché questo corrisponde con la massa. Il metodo presentato in Figura 9 è il più semplice possibile, ma non consente di effettuare un controllo sul contrasto dell’LCD. Per rendere disponibile questa funzione si può usare un semplice trimmer che varia le tensioni portate sui pin VLCDi del PIC. L’utilizzo di un partitore resistivo presenta, però, un altro svantaggio: non consente di mantenere il contrasto costante su un certo range di tensioni di alimentazione. Per evitare questo è possibile effettuare un controllo mediante regolatore buck, sfruttando il comparatore interno del PIC.