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