Tutorials - Elettronica

 

 

LCD con caratteri a matrice


Il software di gestione: la scrittura

Scrivere sul display vuol dire inviare dato o comandi al suo controller.

Questo avviene in relazione con i tre segnali di controllo:
- R/W che deve essere a livello 0
- RS che deve essere a 1 per dati e a 0 per i comandi
- E, che va portato a livello alto e poi a livello basso, con un impulso minimo di 230 ns

Il diagramma, dal foglio dati di HD44780U, esemplifica il timing dei segnali in scrittura:  

 

Questa parte dei fogli dati solitamente è del tutto trascurata nella scrittura di un driver, ma ha una importanza non secondaria.

Dal diagramma vediamo che sono evidenziati alcuni elementi sensibili; la tabella riporta le temporizzazioni per HD44780U con alimentazione di 5 V e minore :

Tempo Funzione Durata
[ns]
Note
5V < 5V
tcyc Enable cycle time  500
(min)
1000
(min)
Il ciclo di una operazione sul pin E non deve essere minore di 0.5 us  a 5V
tPW Enable pulse width, high 230
(min)
500
(min)
La lunghezza dell' impulso su E non deve essere più breve di 230 ns
ter / tef Enable rise/fall time  20
(max)
25
(max)
Il fronte di salita e discesa dell' impulso su E deve essere minore di 20-25 ns
tas Address setup time 40
(min)
60
(min)
RS e RW devono essere validi prima dell' impulso su E
tah Address hold time 10
(min)
20
(min)
RS e R/W devono essere  stabili almeno 10 ns dopo la fine dell' impulso su E
tdsw Data setup time 80
(min)
195
(mjn)
Effettuando una scrittura, i dati sulle linee bit7:0 (o bit7:4 in modalità 4 bit) devono essere validi prima che l' impulso su E vada basso
th Data hold time, write 10
(min)
10
(min)
Effettuando una scrittura, i dati sulle linee devono essere validi almeno 10ns dopo che E è andato basso
   
Questi tempi sono quelli rilevabili dal foglio dati, ma va aggiunto che è possibile trovare vari costruttori che dichiarano tempi leggermente differenti, sopratutto se utilizzano controller compatibili.
   
In ogni caso, possiamo osservare che il diagramma fissa alcune temporizzazioni importanti.
In particolare :
  • tcyc : questo tempo indica che un ciclo composto dal segnale E che va a livello alto e poi ritorna a livello basso deve essere lungo almeno 500 ns, ovvero un ciclo successivo non può riportare E a livello alto prima di questo tempo. Il tempo del ciclo si raddoppia se la tensione di alimentazione scende.
  • tpw : questo indica che l' ampiezza dell' impulso su E deve essere almeno 230 ns con una alimentazione tra 4.5 e 5 V (HD44780S-U) oppure 500 ns con alimentazione minore (tra 2.7 e 4.5V con HD44780U)
  • tsu1 : RS e RW devono essere validi PRIMA dell' impulso su E, quindi non è corretto variare queste tre linee in una sola istruzione
  • tas : i dati sulle linee devono essere validi PRIMA dell' impulso positivo su E, quindi non è corretto variare queste linee in una sola istruzione
  • th : i dati sulle linee devono essere validi per breve tempo DOPO l' impulso su E, quindi non è corretto togliere i dati dal bus prima di avere riportato E a livello basso
  • ter/ef : i fronti dell' impulso su E devono avere una pendenza minima. 

Il rispetto di questi tempi diventa fondamentale se il modulo display viene inserito come periferica sul bus di un microprocessore, dato che i cicli di accesso al bus sono determinati dal clock e potrà essere necessario introdurre stati di wait. 
Quando, però, si utilizzi un microcontroller, l' accesso dovrà essere effettuato attraverso l' I/O parallelo; in questo caso i tempi sono rispettati praticamente sempre per basse frequenze di clock del microcontroller a cui il modulo display è collegato, dato che ogni variazione di un segnale corrisponde alla necessità di comandare la variazione di livello di un bit in un port. 

Però,  tcyc, tpw, tas potrebbero trovarsi in situazione delicata se il clock ha una frequenza elevata.

A 4 MHz di clock un PIC esegue una istruzione in 1000 ns e, di conseguenza, non ci sono problemi, ma i PIC più recenti possono superare i 40 MHz; a questa frequenza il ciclo si riduce a 100 ns. Dato che nei driver i tempi di impulso sul pin E o di trasferimento dei dati sul bus sono determinati dal tempo di esecuzione delle istruzioni, ecco che occorrerà una verifica sulla reale durata di questi tempi generati dalle istruzioni del driver in funzione della durata del ciclo di istruzione.

Solitamente non si fa caso a questi parametri in quanto si tratta di limiti massimi; principalmente gli esempi sul WEB fanno riferimento a microcontroller con clock tanto bassi da non presentare problemi, anche perchè, generalmente, un display di buona qualità risponde in tempi anche minori di quelli del foglio dati. Però bisogna ricordare che prodotti diversi possono presentare caratteristiche anche significativamente diverse e che un PIC16F84 a 4 MHz ha un ciclo di istruzione ben diverso da un PIC18F a 48 MHz.

Un ulteriore cenno a ter :se il display è fissato sullo stesso circuito stampato del microcontroller, la lunghezza delle connessioni è minima e non dovrebbero esserci problemi con la trasmissione dei segnali. Però è comune collegare il display al microcontroller con un cavo e, in questo caso, è opportuno non esagerare con la sua lunghezza in quanto la capacità/induttanza parassita introdotta dalla connessione potrebbe deformare i fronti di commutazione rendendo problematica la gestione del display. Solitamente, cavi piatti non più lunghi di una una ventina di cm non danno problemi, ma è sempre il caso di fare prove esaustive per verificare che, in condizioni particolari, la lunga connessione non crei problemi.

Dopo la scrittura, il controller richiede un certo tempo per eseguire il comando o caricare in dato in memoria. Durante questo tempo il controller non riceve altri dati; questo è segnalato da un flag, detto Busy Flag (BF), che è accessibile in lettura.
Ricordiamo che il controller dell' LCD lavora molto lentamente rispetto al microcontroller che comanda il display ed è necessario che siano rispettate le temporizzazioni dei segnali e le attese di esecuzione.
 

Ricordiamo che il controller dell' LCD lavora molto lentamente rispetto al microcontroller a cui è collegato il modulo display ed è necessario che siano rispettate le temporizzazioni dei segnali e le attese di esecuzione.

  • Un primo problema che occorre avere presente non è quello di inviare dati o comandi al display che non può riceverli e quindi vanno persi, ma piuttosto il rischio di inviare al controller dei bytes a cavallo tra stati di busy e non, dove l' interpretazione parziale o errata può rendere impossibile proseguire l' uso ordinato del display.
     
  • Un secondo problema riguarda le temporizzazioni dei segnali dall' I/O del microntroller al display: cambiando il clock del microcontroller cambia il tempo di esecuzione delle istruzioni !
    E un driver scritto per un certo clock potrà essere del tutto inadatto per un clock superiore.

Ad esempio, con l' Assembly dei PIC, possiamo scrivere un tratto di programma che effettua l' impulso sul pin E.

; impulso positivo su E

durata ciclo istruzione
a seconda del clock 

4 MHz 8 MHz 20 MHz 40 MHz
     bsf  Epin    ; E = 1 1 us .5 us 200 ns 100 ns
     bcf  Epin    ; E = 0 1 us .5 us 200 ns 100 ns
     ...
durata impulso 1 us 500 ns 200 ns 100 ns

Possiamo subito notare che, se a 4 o 8 MHz di clock il tempo minimo di 230 ns per l' impulso di E è ampiamente rispettato, non lo è quando il clock va a 20 MHz o più, cosa ben possibile e comune per i microcontroller attuali. Anche se i controller dei display possono avere caratteristiche solitamente migliori di quelle indicate nel foglio dati, non si vede la necessità di rischiare che il comando o il dato possano essere presi malamente a causa di una temporizzazione scorretta.
Inoltre va considerato che spesso tra il display e l' I/O del microcontroller è interposto un cavo, la cui lunghezza è inversamente proporzionale alla qualità del segnale, a causa delle capacità e delle induttanze parassite. 
Quindi sarà necessario aggiungere nop in quantità tale da rendere sicura la scrittura alla frequenza utilizzata.
Uguale cura va posta per le manovre sui segnali in cui il foglio dati impone dei tempi di esecuzione minimi.

In particolare, a meno di avere la possibilità di verificare con un oscilloscopio la corretta temporizzazione, è opportuno introdurre dei nop con lo scopo di stabilizzare i livelli che sono variati prima di procedere con le ulteriori operazioni che dipendono da queste variazioni.  Quindi, meglio:

; impulso positivo su E
     bsf  Epin    ; E = 1
     nop          ; stabilizzazione
     bcf  Epin    ; E = 0
            nop          ; stabilizzazione

anche se il clock del processore è basso, dato che le brevi attese dei nop garantiscono che i segnali sono arrivati ai livelli voluti prima di procedere oltre. Questa piccola attesa di un ciclo, anche se teoricamente non necessaria, spesso risolve problemi di accesso.
Ovviamente, se la connessione è lunga e i segnali arrivano fortemente deformati o ritardati, più che un aumento indiscriminato dei nop è consigliabile rivedere la tipologia del cablaggio.


Se la Vcc è minore di 5V

Minore è la tensione di alimentazione, maggiore è il dilatarsi dei tempi necessari al controller per eseguire le funzioni richieste.

In generale, con alimentazione inferiore a 4.5 V (2.7-4.5 V) i fogli dati danno tempi circa raddoppiati rispetto a quelli con alimentazione a 5 V (4.5-5.5 V).

Si renderà necessario consultare il foglio dati del componente per verificare i tempi critici con tensioni di alimentazione inferiori a 4.5 V.


Non tutti i moduli sono nati uguali...

 

Inoltre va ricordato che molti moduli basati sulla versione HD44780A (ad esempio Hitachi serie LMxxx) riportano sul foglio dati tempi di risposta più lenti di HD44780U:  
 

Tempo Funzione Durata
[ns]
5V
tcyc Enable cycle time  1000
(min)
tPW Enable pulse width, high 450
(min)
ter / tef Enable rise/fall time  25
(max)
tas Address setup time 140
(min)
tah Address hold time 10
(min)
tdsw Data setup time 195
(min)

ovvero gli stessi che ha HD44780U a tensione di alimentazione ridotta.
Chi intende utilizzare questi componenti, dovrà tenere presente queste condizioni ed aggiungere sufficienti ritardi nel driver per ottenere le giuste temporizzazioni.

Situazione analoga si verifica anche per moduli basati su altri controller compatibili, tanto da poter trovare dei tempi  indicati sul foglio dati del controller e altri doppi indicati sul foglio dati del modulo.

In ogni caso di dubbio, sarà opportuno consultare il foglio dati.

In mancanza di questo, un driver di sicurezza per il modulo dovrà considerare i tempi più lunghi, salvo poi la possibilità dell' utente di ridurli dove possibile.
 

 


Scrittura senza l' uso di BF


Nel caso in cui non si voglia utilizzare la lettura di BF, abbiamo accennato che la linea R/W può essere collegata alla massa. In queste condizioni è possibile solamente scrivere sul display, ma non leggere, risparmiando però una linea di I/O.
L' accesso corretto al display si ottiene semplicemente effettuando la scrittura, quindi attendendo il tempo richiesto per il completamento dell' operazione prima di avviare la successiva.

 

  • Il tempo di attesa non è costante, ma dipende dal comando eseguito. 

In particolare:

OPERAZIONE Tempo di
esecuzione
clear display, return home 1,532 - 1.64 ms
set modalità operative 37 - 40 us
scrittura su RAM 37 - 40 us

Il foglio dati riporta i tempi minimi definiti dal costruttore, ai quali vale la pena di attenersi, anche se da prove pratiche vari display richiedono tempi minori.

Va  considerato i tempi indicati sono calcolati per un clock del controller di circa 270 kHz. Quindi, utilizzando il display con controller che hanno altre frequenze di clock occorrerà verificare se i tempi impostati dal software sono adeguati.
Anche la temperatura influisce su questi tempi e display che lavorano all' aperto necessitano di una messa a punto più accurata.

 


 


  • Copyright © afg. Tutti i diritti riservati.
    Aggiornato il 12/01/13.