Tutorials - Elettronica

 

 

LCD con caratteri a matrice


Siccome sono possibili scritture di dati o di indirizzi della RAM, questo avviene semplicemente sotto controllo della linea RW=0, mentre RS indica se si stanno scrivendo dati o indirizzi.
Una scrittura di dati richiederà RS=1:
 
Istruzione Controllo Bus Funzione
RS R/W D7 D6 D5 D4 D3 D2 D1 D0
Scrittura dato 1 0 Dato da scrivere Scrive un dato nella CGRAM o nella DDRAM

Così si può trasferire un intero byte (8 bit), dato che il bus conterrà solamente questo.

Si può scrivere sia nella CGRAM che nella DDRAM, ma non esiste nell' operazione un selettore per le due aree. Questa selezione va fatta in precedenza indicando un indirizzo. Quindi:


Prima della scrittura della RAM occorre avere selezionato a quale RAM ci si riferisce, inviando un comando di indirizzo (Set Address).

Se il comando riguarda la CGRAM, la successiva scrittura sarà diretta lì; e così per la DDRAM.
Quindi una scrittura di un dato in RAM richiede la sequenza:

Scrivere indirizzo della CGRAM o DDRAM
Scrivere il dato da memorizzare

Se si è puntata la CGRAM, la scrittura avverrà in questa; lo stesso per la DDRAM.


Per la lettura dei dati dalla RAM non sono impiegate particolari istruzioni, ma l' operazione è governata via hardware dallo stato delle linee RS e R/W:
 
Istruzione Controllo Bus Funzione
RS R/W D7 D6 D5 D4 D3 D2 D1 D0
Lettura BF e indirizzo 0 1 BF AC - Address Counter Lettura Busy Flag e Address Counter della locazione corrente
Lettura dato 1 1

Dato da leggere

Legge un dato dalla CGRAM o dalla DDRAM

Ovvero, occorre portare il pin RW a livello alto per effettuare le operazioni di lettura (Read).


E' quindi evidente che se la linea RW non viene usata nell' interfaccia con il controller, NON sono possibili operazioni di lettura dalla memoria del display.

Mantenendo RW a livello basso (collegato a Vss) sono possibili solamente scritture.

Con RW a livello alto, RS è il selettore della lettura della RAM o dello STATUS, che comprende il flag BF e il contatore AC. Se il dato in CGRAM o in DDRAM è a 8 bit, l' indirizzo del contatore AC è a soli 7 bit, per cui il costruttore ha aggiunto come settimo bit il flag BF:

Read busy flag & address RS=0
RW=1

Read data from CGRAM RS=1
RW=1

Anche per la lettura occorre fare una osservazione importante: si può leggere sia dalla CGRAM che dalla DDRAM, ma non esiste nell' operazione un selettore per le due aree. Quindi:

Prima della lettura della RAM occorre avere selezionato a quale RAM ci si riferisce, inviando un comando di indirizzo.

Se il comando riguarda la CGRAM, la successiva lettura sarà diretta lì; e così per la DDRAM.
Quindi una lettura di un dato in RAM richiede la sequenza:

Scrivere indirizzo della CGRAM o DDRAM
Leggere il dato voluto

Se si è puntata la CGRAM, la lettura avverrà da questa; lo stesso per la DDRAM.

Sul tema, alcune note importanti:


  1. Prima della lettura o scrittura della RAM occorre avere selezionato a quale RAM ci si riferisce, inviando un comando di indirizzo.
      
  2. Non sono possibili scritture o letture a burst, ma i dati sono letti o scritti uno alla volta. Ma:
           
  3. La scelta di CGRAM o DDRAM resta quella determinata dall' ultimo Set Address fino a che non viene sostituita da un altro comando di Set Address
     
  4. Quindi scritture successive in cui non è cambiata la specifica della RAM, sono indirizzate a locazioni successive della stessa area, dato che il contatore di indirizzo è incrementato automaticamente dopo ogni lettura o scrittura

Questa situazione è molto comoda, ad esempio, nel caricamento dei font in CGRAM, dove ogni carattere è costituito da 8 bytes successivi. Allora basta puntare la locazione di inizio del carattere in CGRAM ed eseguire 8 scritture consecutive con gli 8 bytes necessari senza dover toccare ulteriormente il puntatore dell' indirizzo delle locazioni, che avanza automaticamente ad ogni scrittura.

 


In una serie di scritture o letture successive, ogni lettura o scrittura è una operazione a se stante.

Quindi occorre verificare il flag di busy BF (se si utilizza questo modo) oppure attendere il tempo necessario (se non si utilizza il flag) tra ogni singola operazione.

 


Ultima osservazione riguarda i tempi di esecuzione: le operazioni di scrittura, tanto di dati quanto di comandi richiedono un certo tempo in quanto:

  • i comandi che vanno ad agire sul display richiedono tempi sensibili di esecuzione perchè, come abbiamo detto, il display LCD è una periferica piuttosto lenta e il liquido nematico richiede un certo tempo per assestarsi. I comandi di clear sono quelli che impiegano il tempo maggiore di esecuzione e, di nuovo, la cosa è comprensibile, ricordando che la cancellazione della visualizzazione è effettuata scrivendo un 20h - ASCII space - in tutte le celle della DDRAM: i controller degli LCD a caratteri sono dispositivi previsti per il minimo consumo di corrente e quindi lavorano con frequenze di clock molto basse (200-500 kHz), con cicli di istruzione piuttosto lunghi.
     

  • La scrittura in RAM è un accesso ai registri interni dell' HD44780, il che richiede nanosecondi, ma è accompagnato dalla necessità di aggiornare più punti e solitamente anche il display, per cui la specifica indica qualche decina di micro secondi di attesa prima del completamento delle operazioni interne.
     

  • In lettura, invece, si accede ai registri del controller senza che questo debba effettuare alcuna altra operazione sul display e quindi basta un tempo minore. 

 


Ecco una tabella di riepilogo dei comandi principali:

FUNZIONE
Hex
Dec
Clear Screen e cancellazione DDRAM
1
1
Cursor home  (senza cancellare)
2
2
Entry mode set

4-7  (vedere dettagli sopra)

Display non visibile (senza cancellare)
8
8
Cursore non visibile
0Ch
12
Cursore visibile
0Eh
14
Cursore visibile e lampeggiante
0Fh
15
Muove cursore una posizione verso sinistra
10h
16
Muove cursore una posizione verso destra
14h
20
Scroll display una posizione verso sinistra
18h
24
Scroll display una posizione verso destra
1Eh
28
Function set (bus a 4 bit, 1 linea, font 5*7)
20h
32
Function set (bus a 4 bit, 2 linee, font 5*7)
28h
40
Function set (bus a 8 bit, 1 linea, font 5*7)
30h
48
Function set (bus a 8 bit, 2 linee, font 5*7)
38h
56
Posiziona cursore  nella DDRAM
80h + addr
128 + addr
Posiziona puntatore nella CG RAM
40h + addr
64 + addr

Questi codici, elencati in esadecimale e nell' equivalente decimale, inviati come comandi al controller HD44780 (RW = 0, RS = 0), avranno come risposta le funzioni relative.


Il comando 0

In effetti i controller dovrebbero poter rispondere anche ad un comando 0.

Questo comando non è documentato nella maggior parte dei fogli dati e la cosa è sensata in quanto esso non esegue alcuna operazione sul display, se non quella di mandare busy il controller per un tempo pari a quello dei comandi "brevi", cioè attorno ai 30-40us. 
Ovvero, inviando 0x00 al display, si otterrà solamente di dover attendere un certo tempo prima di poter eseguire un altro comando.

Quindi il comando 0 non presenta alcuna utilità nè teorica nè pratica (non può essere usato neppure come riferimento di tempo in quanto il periodo di busy dipende dal tipo di controller, dalla sua frequenza di clock, dalla temperature, dalla tensione di alimentazione): non ha senso parlare di un "comando 0".

 


 

 


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