Periferica LCD Driver nel PIC

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.

Tabella 1. Massimo numero di segmenti pilotabili con i PIC dotati di modulo LCD

Tabella 1. Massimo numero di segmenti pilotabili con i PIC 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à.

Figura 1. Strati di cui è costituito un display LCD: 1) Polarizzatore verticale; 2) Schermo di vetro con maschera delle zone scure; 3) Strato con i cristalli liquidi; 4) Strato di vetro con elettrodi; 5) Polarizzatore orizzontale; 6) Superficie riflettente

Figura 1. Strati di cui è costituito un display LCD: 1) Polarizzatore verticale; 2) Schermo di vetro con maschera delle zone scure; 3) Strato con i cristalli liquidi; 4) Strato di vetro con elettrodi; 5) Polarizzatore orizzontale; 6) Superficie riflettente

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.

Figura 2. Stato non eccitato dei cristalli liquidi

Figura 2. Stato non eccitato dei cristalli liquidi

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.

Figura 3. Caratteristica ‘contrasto vs tensione RMS’ di un display LCD. Il punto in cui il contrasto raggiunge il 10% è assunto come soglia di funzionamento (VOFF). Il valore per cui il contrasto raggiunge il 90% è indicato con VON

Figura 3. Caratteristica ‘contrasto vs tensione RMS’ di un display LCD. Il punto in cui il contrasto raggiunge il 10% è assunto come soglia di funzionamento (VOFF). Il valore per cui il contrasto raggiunge il 90% è indicato con VON

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à.

Figura 4. Circuito equivalente di un display LCD 1/3 MUX. Il valore di ogni capacità è compresa tra 1000 pF/cm2 e 1500pF/cm2

Figura 4. Circuito equivalente di un display LCD 1/3 MUX. Il valore di ogni capacità è compresa tra 1000 pF/cm2 e 1500pF/cm2

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.

Tabella 2. Confronto tra un display LCD statico e multiplexed. Dove è indicato 1 per backplanes si intende che il display è staticoTabella 2 Confronto tra un display LCD statico e multiplexed. Dove è indicato 1 per backplanes si intende che il display è statico

Tabella 2. Confronto tra un display LCD statico e multiplexed. Dove è indicato 1 per backplanes si intende che il display è staticoTabella 2 Confronto tra un display LCD statico e multiplexed. Dove è indicato 1 per backplanes si intende che il display è statico

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.

Tabella 3. Capacità di pilotaggio di un PIC16C92X

Tabella 3. Capacità di pilotaggio di un PIC16C92X

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.

Figura 5. Forme d’onda tipo A e B per il pilotaggio di un display LCD. Il tipo A è caratterizzato dal fatto che mantiene 0VDC su un singolo frame, mentre il tipo B su due frame successivi

Figura 5. Forme d’onda tipo A e B per il pilotaggio di un display LCD. Il tipo A è caratterizzato dal fatto che mantiene 0VDC su un singolo frame, mentre il tipo B su due frame successivi

La Figura 6 mostra le forme d’onda per il controllo di un LCD statico.

Figura 6. Forme d’onda per un display LCD statico

Figura 6. Forme d’onda per un display 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.

Figura 7. Forme d’onda per un display LCD 1/2 MUX e 1/3 bias

Figura 7. Forme d’onda per un display LCD 1/2 MUX e 1/3 bias

LA PRATICA

Interfaccia  LCD nei PICMicro

Il diagramma a blocchi di un driver LCD integrato nei PICMicro è costituito da 3 blocchi principali (Figura 8):

  1. 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.
  2. 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.
  3. 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.
Figura 8. Schema a blocchi del driver LCD per PICMicro: (1) registri LCDDATA; (2) controllo della temporizzazione; (3) la sorgente di clock

Figura 8. Schema a blocchi del driver LCD per PICMicro: (1) registri LCDDATA; (2) controllo della temporizzazione; (3) la sorgente di clock

Configurazione del modulo  LCD

La sequenza delle operazioni da seguire per configurare il modulo LCD del PIC consta di 6 punti fondamentalmente:

  1. Selezionare il frame clock mediante i bit LP3:LP0 del registro LCDPS (Tabella 4).
  2. Configurare i pin del PIC in modo da farli funzionare da driver dei segmenti, tramite i registro LCDSEn (Tabella 5).
  3. 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.
  4. Scrivere il valore iniziale nel registro dei dati, da LCDDATAx (Tabella 9).
  5. Azzerare il bit dell’interrupt dell’LCD (LCDIF) e se necessario abilitare l’interrupt con il bit LCDIE.
  6. Infine, abilitare il modulo LCD tramite il bit LCDEN del registro LCDCON.
Tabella 4. Registro LCDPS. (C = bit solo azzerabile, R = lettura, W = scrittura, U = non implementato, -n = valore dopo il reset)

Tabella 4. Registro LCDPS. (C = bit solo azzerabile, R = lettura, W = scrittura, U = non implementato, -n = valore dopo il reset)

Tabella 5. Registro LCDSEn

Tabella 5. Registro LCDSEn

Tabella 6. Registro LCDCON

Tabella 6. Registro LCDCON

Tabella 8. Valori possibili per i bit LMUX<1:0>. Essi permettono di impostare il MUX ed il bias dell’LCD

Tabella 8. Valori possibili per i bit LMUX. Essi permettono di impostare il MUX ed il bias dell’LCD

Tabella 9. Valori possibili per i bit CS<1:0>. Essi consentono di impostare la sorgente di clock dell’LCD

Tabella 9. Valori possibili per i bit CS. Essi consentono di impostare la sorgente di clock dell’LCD

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.

Figura 11. Regolazione del contrasto tramite regolatore buck. Questo metodo permette di rendere fisso il contrasto al variare della tensione di alimentazione.

Figura 9. Regolazione del contrasto tramite regolatore buck. Questo metodo permette di rendere fisso il contrasto al variare della tensione di alimentazione.

 

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.

 

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *