Va fatta qui una ben chiara distinzione, che, a prima vista,
è fonte di seria confusione. Alla visualizzazione di un simbolo partecipano
due elementi differenti:
Il dato contenuto nella DDRAM è un codice a 8bit, che è
stato inviato dall' host sul bus del controller.
Esso viene trattato automaticamente dal controller e messo in ingresso del generatore di caratteri,
alla cui uscita sono disponibili i 40 bit che formano la matrice del
carattere.
Quindi esiste una coincidenza tra un certo dato, che diventa indirizzo del
generatore di caratteri e l' uscita del CG, che corrisponde al dato in esso
contenuto in quella particolare area indirizzata.
La tabella che descrive questa corrispondenza è presente sul
foglio dati del controller.
|
Questo a lato è il set di caratteri A02 del controller HD44780.
Agli indirizzi di ingresso da 10h a FFh corrispondono lettere,
numeri e simboli ASCII, oltre a caratteri di alfabeti non europei,
lettere accentate, simboli vari.
Quindi, inviando, ad esempio, il codice 9Ah come dato, si presenterà
a display il carattere omega minuscolo; inviando il dato 3Fh si
visualizzerà il simbolo del punto interrogativo.
Ma se inviamo come dato un valore compreso tra 00h e FFh ?
Nella tabella, questi valori non hanno alcun carattere
corrispondente, dato che essi vengono deviati alla tabella della CGRAM,
dove corrispondono ai caratteri introdotti dall' utente. |
L' uscita del CG è costituita da una sequenza di 40 bit che
il controller dispone sulle linee COM e SEG che comandano rispettivamente
righe e colonne il pannello LCD
Dunque, i 40 bit di uscita del CG vanno a formare il simbolo
presentato in una zona di visualizzazione del display.
|
Un carattere 5x8 ha come base questa matrice. I punti
visibili, all' incrocio tra righe e colonne, possono essere scuri su fondo chiaro (tipico dei modelli non
retro illuminati) o chiari su fondo scuro (tipico dei pannelli dotati
di retro illuminazione).
In ogni caso, se il bit inviato è
a 1, il punto all' incrocio corrispondente si accenderà, mentre gli
altri resteranno invisibili. Ad esempio, nella figura a lato, la cifra
6 è presentata dai 40 punti di cui la prima fila ne ha solo tre
accesi, la seconda e la terza uno, la quarta tutti e così via. |
Essendo necessarie 8 righe, occorreranno 8 locazioni di ROM da 5
bit ciascuna per definire un carattere. Nell' esempio, il contenuto delle 8
celle sarà:
Locazione |
Punti |
Contenuto |
binario |
hex |
1 |
0 |
1 |
1 |
1 |
0 |
01110 |
0Eh |
2 |
1 |
0 |
0 |
0 |
0 |
10000 |
10h |
3 |
1 |
0 |
0 |
0 |
0 |
10000 |
10h |
4 |
1 |
1 |
1 |
1 |
1 |
11111 |
1Fh |
5 |
1 |
1 |
|
1 |
1 |
11011 |
1Bh |
6 |
1 |
1 |
|
1 |
1 |
11011 |
1Bh |
7 |
1 |
1 |
1 |
1 |
1 |
11111 |
1Fh |
8 |
0 |
0 |
0 |
0 |
0 |
00000 |
00h |
Dalla tabella vista prima possiamo osservare che il simbolo
'6' è accessibile inviando al CG l' indirizzo 36h.
Questo si effettua, come detto, scrivendo 06h in DDRAM come dato.
Per l' utente il processo di trasformazione di questo dato in
immagine sul pannello LCD è del tutto trasparente e si limita solamente a scrivere in DDRAM il codice a 8 bit
del simbolo da rappresentare.
Dal foglio dati del controller l' utente può conoscere la corrispondenza tra
dato inviato e simbolo ottenuto; anzi, se il simbolo voluto è un carattere
ASCII, solitamente le tabelle dei CG fanno corrispondere i
principali caratteri alfanumerici con il relativo valore ASCII standard,
facilitando al massimo la scrittura sul display. Quindi, ad esempio, volendo
scrivere sul display il simbolo ora visto, basterà:
movlw '6'
call senddatatolcd
La conversione in punti, l'invio dei punti all' LCD, le temporizzazioni, ecc.
sono tutte operazioni che il controller svolge autonomamente. Veramente
comodo, tanto da far guadagnare a questi moduli LCD la denominazione di "intelligent
display".