CONTROLLO DI DISPLAY LCD

Figura 1

In questo articolo intendo illustrare come utilizzare i display lcd basati su controller Hitachi HD44780 e compatibili.

Le caratteristiche più importanti del controller HD44780 sono:

I segnali disponibili dall’esterno per la programmazione sono 11: otto linee per i dati (DB0-DB7, pin 7 a 14), un segnale di lettura/scrittura (R/W, pin 5), un segnale di selezione tra registro dati e registro istruzioni (RS, pin 4) e un segnale di abilitazione (E, pin 6). Nei display lcd sono poi presenti altri tre pin: un terminale di massa (pin 1), uno di alimentazione (5V, pin 2) e uno per il contrasto (pin 3).

Nella Tabella 1 è visibile l'interfaccia "tipica" dei display. La prima parte riguarda tutti quei display che hanno un numero di caratteri totali minore o uguale di 80 e la seconda parte è per un display da 40x4 che adotta lo stesso sistema di programmazione ma monta due HD 44780 (e quindi ha due segnali di abilitazione). Si consiglia comunque di riferirsi sempre al databook del display per un controllo.

Tabella 1

Pin No.

Symbol

Level

Function

Pin No.

Symbol

Level

Function

1

Vss

--

Power supply (0V)

1

Vss

--

Power supply (0V)

2

Vdd

--

Power supply (5V)

2

Vss

--

Power supply (0V)

3

VL

--

 

3

Vdd

--

Power supply (5V)

4

RS

H/L

H: Data input

L: Instructin data input

4

VL

--

 

5

R/W

H/L

H: Data read

L: Datra write

5

RS

H/L

H: Data input

L: Instructin data input

6

E

H.H® L

Enable signal

6

R/W

H/L

H: Data read

L: Datra write

7

D0

H/L

 

7

E1

H.H® L

Enable signal

8

D1

H/L

 

8

E2

H.H® L

Enable signal

9

D2

H/L

 

9

D0

H/L

 

10

D3

H/L

 

10

D1

H/L

 

11

D4

H/L

Data bus line

11

D2

H/L

 

12

D5

H/L

 

12

D3

H/L

 

13

D6

H/L

 

13

D4

H/L

Data bus line

14

D7

H/L

 

14

D5

H/L

 

 

 

 

 

15

D6

H/L

 

 

 

 

 

16

D7

H/L

 

Organizzazione interna

L'HD44780 ha al suo interno due registri: un registro per le istruzioni (IR) e un registro per i dati (DR). Il registro delle istruzioni contiene i comandi mandati al display (cancella schermo, muovi cursore, posizione cursore, ecc) e può essere scritto ma non letto dalla porta MPU (porta del microcontrollore o della CPU). Il registro dei dati contiene temporaneamente i caratteri scritti nella DD Ram (memoria caratteri) o nella CG Ram (memoria grafica). Ogni dato scritto dentro a questo registro viene automaticamente ricopiato nella memoria di destinazione. Questo registro può essere scritto e letto. In fase di lettura viene caricato il dato dalla DD Ram o dalla CG Ram e posto in DR (la posizione di lettura è impostata tramite l'IR). A ogni lettura viene incrementato automaticamente il puntatore AC. L'indirizzamento di questi registri avviene come indicato in Tabella 2.

Tabella 2

RS

R/W

Operazione

0

0

Scrittura di IR (comando interno)

0

1

Lettura del bit di busy (impegnato o libero) e del contatore AC della memoria (DB0-6)

1

0

Scrittura di DR

1

1

Lettura di DR

 

Prima di inviare un qualsiasi comando bisogna assicurarsi che il busy flag sia 0, in caso contrario il comando inviato sarà ignorato.

All'interno dell'HD44780 è presente un contatore di indirizzo (AC) che punta alla posizione corrente del cursore. Il suo valore può essere modificato mandando una istruzione all'IR. Questo puntatore punta alla CG Ram o alla DD Ram a seconda di dove si sta lavorando. Ad ogni operazione viene incrementato di uno o decrementato di uno a seconda di come si è programmato il display (sia per la CG che la DD Ram).

La DD Ram è utilizzata per contenere i caratteri visualizzati sul display (un po’ come la memoria video di un pc). Al massimo può contenere 80 caratteri da 8 bit ciascuno e le locazioni non usate per i caratteri da visualizzare si possono usare per altri scopi.

Gli indirizzi sono indicati in esadecimale e variano a seconda del numero di linee del display. Le configurazioni principali si possono vedere in Tabella 3. L'indirizzo del carattere è inteso come indirizzo sul display del carattere visibile. Gli indirizzi della DD Ram sono intesi per riga. Es: in un display 2*24 la prima linea ha indirizzi 00h..17h e la seconda 40h..57h.

Tabella 3

Dimensione display

Indirizzi Caratteri visibili

Indirizzo carattere

Indirizzo nella DD Ram

1*8

00..07

00h..07h

1*16

00..15

00h..0Fh

1*20

00..19

00h..13h

1*24

00..23

00h..17h

1*32

00..31

00h..1Fh

1*40

00..39

00h..27h

2*16

00..15

00h..0Fh + 40h..4Fh

2*20

00..19

00h..13h + 40h..53h

2*24

00..23

00h..17h + 40h..57h

2*32

00..31

00h..1Fh + 40h..5Fh

2*40

00..39

00h..27h + 40h..67h

4*16

00..15

00h..0Fh + 40h..4Fh + 14h..23h + 54h..63h

4*20

00..19

00h..13h + 40h..53h + 14h..27h + 54h..67h

 

Gli scorrimenti dei caratteri a destra e sinistra sono intesi come scorrimenti della memoria video e quindi gli effetti variano a seconda del numero di linee e di caratteri del display stesso.

La memoria del generatore di caratteri CG Ram può contenere otto caratteri da 5x7 punti o quattro caratteri da 5x10 punti programmati dall'utente punto per punto.

Programmazione

Per la programmazione sono disponibili molti comandi dei quali in questa sede vedremo solo i principali. In particolare non ci occuperemo di tutta la parte di generazione dei caratteri.

Durante la programmazione va sempre tenuta attiva la linea di enable (E) che abilita l’interfaccia del chip verso il microcontrollore o il computer. Nella Tabella 4 potrete trovare tutti i comandi disponibili con una breve descrizione. Per avvicinarsi più rapidamente e intuitivamente alla programmazione di questo dispositivo è meglio iniziare con una sequenza di comandi che serve per scrivere "CIAO!" sul display.

All’accensione il chip (HD44780) si auto inizializza e attende comandi dalla porta MPU. Il primo comando da inviare è quello per l’impostazione dei parametri (function set). Nel nostro esempio useremo un display con due linee, matrice dei caratteri 5x10 e interfaccia a 8 bit quindi bisogna inviare il comando:

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

1

1

1

1

*

*

 

Gli asterischi indicano che il valore assunto da quella colonna non ha significato.

A questo punto dovremo accendere il display e il cursore:

 

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

1

1

1

0

 

In questo caso non ho attivato il blink (lampeggio) del cursore. Ora bisogna impostare il modo di lavoro. Vogliamo che il cursore ad ogni carattere scritto si muova sulla destra e che il testo visualizzato non scorra con esso.

 

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

0

1

1

0

 

A questo punto non ci rimane che cancellare la memoria video e scrivere la parola "CIAO!". Tenete presente che con l’impostazione data ad ogni scrittura di un carattere il puntatore alla locazione di memoria video viene incrementato automaticamente. Il comando di cancellazione è:

 

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

0

0

0

1

 

Per la scrittura dei caratteri bisogna mettere RS a 1 e R/W a 0 con la codifica del carattere da scrivere (vedi Figura 2) nei rimanenti 8 bit.

Tabella 4

Comandi disponibili

Istruzione

Segnali

Descrizione

Tempo massimo

 

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

   

Cancella display

0

0

0

0

0

0

0

0

0

1

Cancella il display e imposta l’indirizzo della memoria a 0 (DD ram)

1.64 ms

Ritorno a capo

0

0

0

0

0

0

0

0

1

*

Setta l’indirizzo della memoria video (DD) a 0 senza cancellarla.

1.64 ms

Imposta modo

0

0

0

0

0

0

0

1

I/D

S

Imposta il movimento del cursore e se il display deve scrollare con esso.

I/D=1 incremento, I/D=0 decremento

S=1 il display scrolla con il cursore.

40 us

Display ON/OFF

0

0

0

0

0

0

1

D

C

B

Setta il display ON con D=1 e OFF con D=0. Cursore visibile con C=1 e blink del carattere evidenziato dal cursore con B=1.

40 us

Shift del cursore o del display

0

0

0

0

0

1

S/C

R/L

*

*

Muove il cursore e scrolla il display senza cambiare il contenuto della ram

40 us

Impostaz. parametri

0

0

0

0

1

DL

N

F

*

*

Imposta la lunghezza dei dati DL (4 o 8 bit) il numero di linee del display (N) e il tipo di font (F)

40 us

Indirizzo CG ram

0

0

0

1

ACG

Imposta l’indirizzo della CG ram. Dopo questo comando si leggono e scrivono dati sulla CG ram.

40 us

Indirizzo DD ram

0

0

1

ADD

Imposta l’indirizzo della DD ram. Dopo questo comando si leggono e scrivono dati sulla DD ram.

40 us

Lettura bit di stato e indirizzo

0

1

BF

AC

Lettura del flag di busy e dell’indirizzo di memoria (DD oCG)

0 us

Scrittura su CG o DD ram

1

0

Scrittura dati

Scrittura dati dalla CG o DD ram

40us

Lettura da CG o DD ram

1

1

Lettura dati

Lettura dati dalla CG o DD ram

40us

 

I/D = 1 incremento, I/D = 0 decremento

S = 1 scorrimento del display attivo

S/C = 1 scorr. caratteri, S/C = 0 si muove il cursore

R/L = 1 movimento a destra, R/L = 0 mov. a sinistra

DL = 1 interfaccia a 8 bit, DL = 0 interfaccia a 4 bit

N = 1 due linee, N = 0 una linea

F = 1 caratteri 5x10, F = 0 caratteri 5x7

BF = 1 operazione in corso, BF = 0 pronto

DD ram = memoria video

CG ram = memoria del generatore di caratteri

ACG = indirizzo memoria generatore c.

ADD = indirizzo memoria video (corrisponde alla posizione del cursore)

AC = indirizzo usato sia per la CG ram e DD ram.

 

 

Figura 2

COLLEGAMENTO AL PC

Questi display si possono collegare a molti dispositivi dei quali i più usati sono i microcontrollori e i personal computer.

Il modo piu semplice per collegare questi display a un PC è tramite una porta parallela utilizzando la programmazione a 4 bit (3 bit di segnali e 4 di dati). Lo schema di collegamento è il seguente:

 

Segnali LPT

pin parallela

Segnali display

LCD pin

Select printer

17

DB7

14

Init printer

16

DB6

13

Auto linefeed

14

DB5

12

strobe

1

DB4

11

D0

2

EN

6

D1

3

R/W

5

D2

4

RS

4

 

 

Vo

3

 

 

VDD (+5 V)

2

GND

25

Vss

1

 

Il segnale Vo del display è la tensione di riferimento per il contrasto. Consiglio di collegarlo al cursore di un trimmer da 2,2k il quale ha i terminali uno a massa e uno a Vcc tramite una resistenza da 5,6k. Questo per avere una buona regolazione del contrasto.

E' scaricabile un programma in C++ di esempio che scrive sul display. L'oggetto Lcd può essere riutilizzato facilmente e, in caso di necessità, espanso con membri più potenti.

COLLEGAMENTO AD UN MICROCONTROLLORE

Data la difficoltà della realizzazione di un circuito con microcontrollore ho pensato di realizzato un terminale RS-232 (con un PIC 16C84 della Microchip) che semplifichi, migliorando l'efficienza rispetto alla soluzione precedente, l'utilizzo di questi display. Questo circuito può essere utile, oltre che collegato con un PC, anche con un altro microcontrollore che si vuole scaricare dall'onere di programmare il display. In questo caso consiglio di eliminare l'HIN232 e di interfacciare i due circuiti direttamente su RA3 e RA4 (a 5V). In Figura 4 è visibile lo schema elettrico. Il funzionamento è molto semplice: tramite la seriale (2400 baud, half duplex) è possibile controllare il display, scrivendo dati o inviando comandi, e leggere i caratteri premuti sulla tastiera (a matrice 4x4). La descrizione dei comandi, che coincidono quasi totalmente con quelli del display, per esigenze di spazio è allegata al PIC programmato. E' inoltre disponibile su internet all'indirizzo:

http://www.pcprofessional.it/elettronica/index.htm

il sorgente di un programma in Visual C++ che mostra le capacità del terminale.

Componenti usati:

R1-R4 100K
R5-R8 2.2K
R10,R11,R12 10K
R9 5.6K
C1,C2 100 pF
C3-C6 4.7 uF
C7 100 nF
J1 Connettore 14 poli basso profilo
J2 Connettore 8 poli strip maschio (passo 2,54)
J3 Connettore DB9 maschio
Q1 Quarzo 4 MHz
POT1 Trimmer 2.2K
IC1 PIC 16C84 programmato (n.1010), tel.0546-46307
U1 HIN232

Figura 4

La tastiera e il display condividono le stesse linee dati (RB0-RB7) e quindi non è possibile scrivere dei caratteri mentre è premuto un pulsante della tastiera. Questo inconveniente non è molto rilevante perché i tempi di gestione del display sono molto piccoli rispetto al tempo impiegato da una persona a scrivere sulla tastiera. Per risolvere eventuali conflitti di trasmissione e ricezione il protocollo di comunicazione prevede che ogni carattere inviato dal PC sia rinviato immediatamente dal pic per permettere un controllo.

Per generare i 5V richiesti dal circuito si può utilizzare un MC7805 senza dissipatore di calore (Figura 5).

 

Figura 5

Bisogna fare molta attenzione alla tensione di alimentazione perché i display sono delicati e si bruciano molto facilmente. I pin di alimentazione del PIC sono: Vcc nel pin 14 e GND nel pin 5; per il HIN232 si ha: Vcc nel pin 16 e GND nel pin 15.

REALIZZAZIONE

Il circuito stampato è un singola faccia e quindi, per chi non volesse ricorrere al kit, è di semplice realizzazione. L'unico accorgimento è quello di controllare bene tutte le piste che, essendo in alcuni tratti molto sottili, possono risultare interrotte anche utilizzando il sistema della fotoincisione. Montare per prima le resistenze con i cinque ponti, poi passare ai condensatori (facendo attenzione alle polarità degli elettrolitici) agli integrati ed infine ai connettori. Fare attenzione al collegamento tra il display e il circuito. I connettori da crimpare sulla piattina vanno montati tenendo presente la posizione del pin 1. In particolare fare attenzione al connettore a 14 pin basso profilo montato sul circuito, questo permette l'inserimento della femmina solo da un lato. Non in tutti i display è possibile montare un connettore a 14 poli e quindi su questi si dovrà procedere alla saldatura diretta del cavo. La tastiera fornita nel kit è visibile in Figura 6 dove sono indicati anche i numeri dei pin. Il collegamento con la seriale del PC va realizzato tramite un cavo seriale uno a uno. Non utilizzare cavi null modem che invertono i pin di trasmissione e di ricezione. Per la realizzazione è sufficiente utilizzare un cavo a 3 poli (connettere i pin 1,2 e 3) con due connettori DB9 femmina.

 

Figura 6

  

Autore: Alboni Giorgio

E-mail: rac1337@racine.ravenna.it.


This page hosted by GeoCities Get your own Free Home Page