Tips & Trick - Elettronica

 

 

Come risolvere alcuni problemi comuni nell'uso dei display LCD a caratteri


Nell' impiego di display LCD a caratteri (LCD dot matrix display) ci si può trovare di fronte ad alcuni problemi la cui soluzione può far perdere parecchio tempo.
Raccogliamo qui alcuni consigli derivati dalla pratica.


Il display non funziona...

In generale, se il modulo LCD appare "morto", al di là del fatto che sia guasto, si tratta solitamente di problemi relativi ai collegamenti o al software di controllo.

La prima cosa da fare, prima di gettarsi alla ricerca di problemi nel programma di gestione è quella di assicurarsi che l' hardware sia a posto, ovvero che:

  • i collegamenti del modulo siano corretti: se contengono errori, è impossibile che il modulo faccia quello che ci si aspetta. In particolare, invertendo l' alimentazione per un tempo sufficiente, si distrugge il controller !
     
  • che il cablaggio sia ordinato e non un ammasso arruffato di fili: non potete pretendere che segnali a livello logico possano superare metri e metri di cavo tra microcontroller e display o che essi arrivino a destinazione intatti dopo essere passati in ammassi di cavetti dove circolano anche segnali di potenza, alimentazioni, ecc.
  • che le saldature o i connettori siano a posto e non originino contatti instabili: basta un solo contatto fasullo per creare problemi di difficilissima identificazione.
     
  • che la tensione di alimentazione sia corretta: alcuni moduli possono funzionare correttamente solo per tensioni superiori a 4.5V. Tentativi di alimentazione a tensioni minori portano, nel migliore dei casi, a funzionamenti instabili e casuali. Per contro, esistono moduli che possono essere alimentati anche nell' area 2.7-3V: questo non si vede dall' esterno, ma solo consultando il foglio dati.
    Inoltre, va considerato che a tensioni inferiori a 4.5V, in generale i controller richiedono temporizzazioni più lunghe e di questo va tenuto conto nel firmware di gestione.
     
  • che al tensione di contrasto sia corretta: nelle pagine relative ai moduli LCD a caratteri, sono state date alcune indicazioni di come realizzare un semplice circuito per la tensione di contrasto.
    Va ricordato ancora che è possibile che alcuni moduli richiedano una tensione negativa, sopratutto nel caso in cui l' alimentazione è minore di 5V.  
     
  • che eventuale backlight sia acceso, almeno un poco: solitamente, se la retro illuminazione non è accesa, il display ha, a luce ambiente, un contrasto debolissimo tra punti accesi e spenti, il che impedisce di vedere i caratteri presentati. Solamente i display realizzati per il funzionamento a luce ambiente renderanno i caratteri visibili anche senza retro illuminazione. 

Tenete presente che la maggior parte dei problemi nascono solamente da collegamenti errati, instabili, caotici e da saldature mal fatte.

Se tutto quanto sopra è in ordine, una semplicissima procedura di verifica del funzionamento del modulo è descritta qui.

Solo se il modulo supera queste verifiche si potrà indirizzare la ricerca del mancato funzionamento al software scritto.


Alcune verifiche da effettuare nel caso in cui il display non funzioni

Se, alimentato il modulo, esso non funziona le cause probabili sono:

  1. Connessioni errate all' alimentazione
  2. Tensione di contrasto non regolata correttamente. Verificare seguendo le istruzioni indicate qui.
  3. Modulo guasto

Se, alimentato correttamente, il test iniziale è positivo, ma, inviando i comandi inizili non appare nulla, le cause possono essere:

  1. Collegamenti dei bus dati errati
  2. Collegamenti dei segnali RS/RW/E errati
  3. Saldature o connessioni instabili
  4. Tempi di esecuzione dei comandi troppo brevi
  5. Durata dell' impulso E troppo breve
  6. Sequenza di inizializzazione impropria
  7. Livelli elettrici dei segnali inadeguati
  8. Tensione di alimentazione inadeguata (fuori tolleranza nei tempi di power-up, brown out, ripple eccessivo, ecc)

Se il display presenta caratteri casuali o mancano caratteri di inizio riga e simili, verificate i punti precedenti, con particolare riferimento ai tempi di esecuzione dei comandi.

Se non sono visibili parte di caratteri o dei punti che compongono uno o più caratteri, la causa è da ricercare nello zebra-connector tra circuito stampato e pannello del display. Solitamente questo fatto è conseguenza di un tentativo di smontaggio mal eseguito, di un eccessivo sforzo meccanico (pressione, torsione)sul pannello LCD o comunque della mancanza di uno o più contatti del connettore elastomero.

Se il pannello LCD presenta macchie questo è dovuto ad eccessiva pressione o riscaldamento applicati al pannello stesso, che ha portato al danneggiamento della struttura e del liquido nematico.

Si ricorda anche che i moduli LCD, realizzati in tecnologia MOS e previsti per funzionamenti a bassissime tensioni, sono molto sensibili all' elettricità statica: un maneggio incauto, senza la minima precauzione a riguardo, può distruggere il controller o il pannello LCD.
Per le stesse ragioni, togliere la tensione di alimentazione prima di effettuare collegamenti al modulo.

Anche una applicazione della tensione di alimentazione errata o superiore ai valori massimi ammessi distrugge il modulo in modo da renderlo irrecuperabile. 


Una checklist da seguire per essere sicuri del funzionamento del modulo 

  1. Verificare la tensione di alimentazione. Alcuni moduli possono operare a tensione minore di 5V, altro no.
  2. Verificare che la tensione di alimentazione sia di buona qualità, senza disturbi eccessivi. Nel caso di alimentazione a batteria, verificare il funzionamento sia con batterie cariche che con le batterie a fine carica.
  3. Per alcuni modelli, il parametro Vdd-Vo è maggiore di 4V, per cui, con alimentazione al di sotto dei 4.5V, la tensione di contrasto deve essere negativa. In caso contrario, i caratteri saranno visibili con grandissima difficoltà.
  4. Sviluppare un software di controllo che sia il più possibile ordinato e in cui gli elementi di tempo siano facilmente controllabili e manipolabili.
  5. Verificare se l' impulso sul pin E è realmente uguale o maggiore di quanto indicato sul foglio dati. Questo è in relazione al clock del microcontroller (con un quarzo a 4MHz un PIC ha un clock di istruzione di 1 MHz, ovvero un periodo di 1 us, ma con un cristallo da 40MHz, il periodo si riduce a 100 ns...).
  6. Verificare che i segnali RS e RW e i dati sul bus siano posizionati prima dell' impulso E, almeno 150-200 us, sempre in relazione al clock del processore. RS e RW non vanno applicati assieme a E !
  7. Rispettare i tempi dei esecuzione dei comandi, sopratutto in relazione ai comandi "lunghi" che richiedono tempi di esecuzione maggiori di 1.5 ms.
  8. Nel caso di lettura del flag BF, osservare il tempo necessario tra l' applicazione dell' impulso su E e la stabilizzazione dei segnali in uscita sul bus, che può essere maggiore di 160 us.

Il fatto che si rovino sul WEB applicazioni che violano le regole di temporizzazione dei segnali indicate sui fogli dati, non è scusante per seguire questa linea di condotta. Infatti, se anche è possibile che un particolare modulo, in una specifica configurazione, possa grosso modo funzionare, non vuol dire certo che lo stesso sarà per moduli diversi, o perfino per altri campioni dello stesso modello, nè tanto meno per diverse connessioni, diversa lunghezza del ciclo di istruzioni del microcontroller ospitante, perfino diversa temperatura ambiente. Il driver del modulo LCD deve essere sicuro, in quanto esso non ha possibilità di verificare che il carattere o il comando inviati sono andati a buon fine; e, nel momento in cui questo non accade, a causa di temporizzazioni e sequenze non rispettate o mancanza di cura nella connessione con il microcontroller, l' utilità del pannello LCD, come elemento di comunicazione con lo svolgersi del programma, si annulla.


E' utile inserire un condensatore di filtraggio sulla tensione di contrasto? 

Assolutamente da evitare !!! Un condensatore posto sul pin della Vo (o Vee), assieme alla resistenza di regolazione del contrasto, crea una rete RC che, allo spegnimento della tensione di alimentazione del modulo, può portare ad un effetto di hold-up della tensione di contrasto, distruggendo il controller.


Uso del pin E 

Va osservato che il pin E di enable è attivo a livello alto. In una grande varietà di dispositivi è comune che l' enable sia attivo a livello basso, ma non è questo il caso dei moduli LCD a caratteri.

Questi controller sono disattivati da E=0: in queste condizioni qualsiasi variazione dello stato delle altre linee è completamente ignorata.

La situazione dipende dal fatto che E è essenzialmente un impulso di latch che cattura lo stato delle linee sul fronte di discesa. Occorre quindi che i dati e controlli siano posizionati con E=0; poi E viene portato a livello 1 e, dopo il tempo necessario all' assestamento (250-1000 us a seconda del tipo di controller e della tensione di alimentazione) viena riportato a 0. I fogli dati dei vari controller specificano le temporizzazioni necessarie.
Queste, a parte la durata dell' impulso di E e il suo ciclo minimo, sono relativamente poco sensibili quando il modulo è associato ad un microprocessore in cui il tempo di esecuzione delle istruzioni (us) è abbastanza superiore ai tempi di assestamento del controller (ns) .

Diversa considerazione deve essere fatta nel caso di collegamenti lunghi tra I/O del microcontroller e modulo: si tratta di segnali a livello logico, che risentono della capacità/induttanza delle connessioni. In questi casi è utile inserire brevi attese (nop) per permettere ai segnali di stabilizzarsi.


Il display funziona, ma su due linee, ne visualizza una sola... 

Analogamente, un display a 4 linee visualizza solamente la prima e la terza.
Questo comportamento, al reset, è corretto, in quanto l' inizializzazione hardware di default del controller comprende la definizione di una sola linea. Se il modulo ha più linee, occorre che sia inserito il comando relativo a interfaccia/linee/font:

0 0 1 DL N F - -

Interfaccia (DL), numero linee (N) e matrice caratteri (F).

0 0 1 1 1 0 0 0  38h,  56d 8 bit, 2 linee, font 5x7
0 0 1 0 1 0 0 0  28h,  40d 4 bit, 2 linee, font 5x7

La necessità di questo comando non è bizzarria dei progettisti del controller, ma deriva dal fatto che, come descritto , la struttura fisica del display e quella logica del controller sono differenti: il controller "non sa" quante sono le linee del display, in quanto per lui non si tratta di "linee", ma di locazioni di memoria.
Si vede bene nel caso del display a 4 linee, dove la terza linea non è che la continuazione dell' area di memoria che il controller identifica come appartenete alla linea 1, mentre la seconda e la quarta linea sono, dal punto di vista organizzativo del controller, la "seconda linea".

Peraltro, anche in semplici controller 16 caratteri su una sola linea, è possibile che il costruttore abbia organizzato i primi 8 come appartenenti alla linea 1 logica e gli altri 8 come appartenenti alla seconda linea logica.
In particolare, per display organizzati in questo modo (1 sola linea fisica, due linee "logiche"), la mancanza del comando con N=1 impedisce la visualizzazione di parte dei caratteri.

I progettisti hanno scelto di un default a 1 linea per l' avviamento del controller, lasciando poi all' utente l'operazione di modifica se l' organizzazione fisica dei caratteri lo richiede. 
Se, dopo il reset, non viene fornito il comando di inizializzazione delle due linee (che vale, per quanto detto, sia per display a 2, a 3 o a 4 linee), sarà visualizzata una sola linea (o solo alcune linee o parti di linea a seconda di come è organizzato il display).


Anche dopo una inizializzazione via software, il display presenta una sola linea e non due... 

Nell' inizializzazione per istruzioni del display secondo il flowchart proposto da Hitachi, la sequenza comprende l' invio, ripetuto tre volte, del comando 0011 (3) sui bit più alti (quindi 30h nel caso di interfaccia a 8 bit).
In questo comando non importa il valore assunto dai bit 3-0 dell' interfaccia.
Anche se non chiarissimamente argomentato dai fogli dati, si deduce che questo "mezzo comando" e la sua ripetizione costringono il controller a predisporsi per una interfaccia a 8 bit con 1 linea e font 5x7, come dopo un reset hardware. A questo punto, si può iniziare l' invio dei comandi specifici per attivare il modulo alle condizioni volute.
Il primo di questi comandi è quello visto al punto precedente, che determina l'interfaccia, i font e il numero delle linee. Quando questo comando manca o è errato, il default è di una linea e quindi il display lavorerà su una linea sola.

La cosa, però è stata verificata anche se la sequenza di inizializzazione è perfettamente corretta. In relazione a questo, Hitachi precisa solamente il tempo tre tempi di attesa:

  • l' attesa di 15 ms tra arrivo della tensione e completamento dell' attività di reset interno del controller
  • l' attesa di 4.1 ms tra il primo 30h e il successivo
  • una attesa di 100 us tra la seconda e la terza ripetizione del comando

dopo di che non sono indicati ulteriori tempi e questo fa supporre che ci si debba attenere a quelli indicati per l' esecuzione dei comandi (40 e 1640 us).

Si è verificato in pratica che un certo numero di moduli richiedesse un tempo consistente tra l' ultima ripetizione del 3 e l' inizio dei comandi successivi. Mentre alcuni moduli funzionano alla perfezione anche con una attesa di 40 us, altri richiedo un tempo insolitamente lungo, oltre i 1800 us. Questa caratteristica, che non abbiamo trovato sui fogli dati, è, invece, stata rilevata da alcune pagine sul WEB, dove viene segnalata l' inserzione di una attesa di 4.1ms.

Se non si inserisce questo tempo, il comando successivo inviato al modulo, ovvero quello di passare a due linee, non viene recepito e, probabilmente, questo capita anche uno o due dei successivi, con il risultato di attivare il display in modo ad 1 linea, se non in modo del tutte errato, ad esempio con font 5x11 e posizioni casuali iniziali del cursore.

In effetti, questa necessità è reale; come detto, non tutti i moduli ne hanno bisogno, ma siccome un ampio numero lo richiede, consigliamo di inserirla nella sequenza di inizializzazione.

La giustificazione della necessità del tempo ulteriore è abbastanza evidente: la sequenza dei 30h forza una condizione di reset del controller pari a quella dovuta all' arrivo dell' alimentazione e quindi richiede un certo tempo perchè il controller esegua le operazioni relative.


E' necessaria l'inizializzazione completa via software? 

In assoluto, no.

L' inizializzazione per istruzioni è necessaria solo nel caso in cui il reset di arrivo della tensione di alimentazione non sia corretto, a causa o di una alimentazione inadeguata o, molto più comunemente, della mancata attesa del tempo iniziale necessario per il reset.

Al momento dell' applicazione della tensione, il controller del modulo LCD dispone di un sistema di reset proprio al power on che esegue le seguenti funzioni:

  1. Display clear
  2. Function set:
    DL = 1  ; 8-bit interface data
    N   = 0   ; 1-line display
    F = 0     ; 5 x 8 dot character font
  3. Display on/off control:
    D = 0    ; Display off
    C = 0    ; Cursor off
    B = 0    ; Blinking off
  4. Entry mode set:
    I/D = 1  ; Increment by 1
    S = 0    ; No shift

Questo reset, per completarsi, impiega un tempo variabile, dell' ordine di vari millisecondi. Quindi, il programma di gestione del display, prima di iniziare qualsiasi operazione sul modulo, attende per sicurezza almeno 15-50 ms o più dal momento del POR del microcontroller.
Qualunque comando inviato prima che il reset sia completato è ignorato o, al peggio, origina una inizializzazione confusa.

Che questa operazione di reset sia completata lo si osserva con il test iniziale, dove le linee dispari (che sono poi la linea 1) saranno visualizzabili regolando il contrasto. Se, data alimentazione al modulo, si ottiene la visualizzazione della prima riga, tutto è ok, almeno dal punto di vista del reset. Non occorre alcuna altra azione: se all' accensione questo reset iniziale avviene, NON è necessaria alcuna sequenza di 30h iniziali.

A questo punto si inizia a inviare al display i comandi necessari per impostarlo nel modo operativo voluto, ad esempio attivando più linee e interfaccia a 4 bit, ecc.

E' utile, comunque, avere il reset da istruzioni disponibile nel firmware nel caso in cui sia presente qualche condizione che la richieda, come:
- brown out sull' alimentazione
- reset del microcontroller senza caduta dell' alimentazione

Si fa presente che non abbiamo mai verificato una condizione in cui l' alimentazione era di qualità così scadente all' avvio da impedire il reset del microcontroller: batterie, regolatori a tre terminali, smps, non hanno mai dato problemi di reset al por per i moduli LCD. Quindi, all' accensione, l' inizializzazione per istruzioni non serve.Questo consente di risparmiare parecchi millisecondi ed è utile nel caso in cui il tempo di avviamento iniziale del sistema sia importante.

I problemi iniziali sono solitamente riguardanti la mancata attesa del completamento del reset, andando a cercare di scrivere sul display immediatamente dopo il reset del microcontroller.

Per contro, se l' applicazione è a rischio di un reset diverso per il microcontroller rispetto a quello dovuto all' arrivo della tensione di alimentazione, una inizializzazione completa via software è consigliabile, sopratutto per sistemi che funzionano in ambienti industriai, critici, con collegamenti molto lunghi, non presidiati e comunque nelle situazioni in cui sia necessaria una particolare attenzione.

Va tenuto presente che non tutti i controller dei moduli LCD hanno le stesse caratteristiche ed alcune famiglie non necessitano di particolari inizializzazioni, mentre, per contro, è possibile che tra moduli diversi, pur compatibili, si presentino forti differenze nei tempi necessari all' esecuzione dei comandi. In particolare, si rimanda al punto precedente, ovvero alla possibile necessità di inserire un tempo consistente dopo l' ultimo 30h e prima di ogni altro comando.

Quindi, una implementazione sicura del display LCD deve considerare le condizioni reali di funzionamento.


Come posso resettare il controller del modulo senza staccare l' alimentazione?

Quando il modulo è collegato con cavi molto lunghi al microcontroller, si possono generare situazioni casuali di trasmissione errata dei comandi o di disturbi indotti che "sballano" la presentazione dei caratteri sul display. Oppure, semplicemente, si sono valutati tempi di esecuzione dei comandi "al limite" e basta una decisa variazione della temperatura ambiente per far si che casualmente essi risultino troppo brevi.
Una inizializzazione via software può essere una soluzione dove sono possibili questi fenomeni o dove può esserci la difficoltà di resettare il modulo separatamente dal processore, mentre un incremento dei tempi di attesa granatisce un margine di sicurezza.

Certamente la possibilità di un reset hardware che sia gestito direttamente dal controller del modulo potrebbe essere utile in vari casi. In questa direzione, va considerato che esistono controller, pur compatibili con lo standard Hitachi per quanto riguarda i comandi di base, dotati di ingresso di reset, proprio per poter essere resettati con sicurezza nel caso di alimentazioni instabili (brown out) o a comando dal microcontroller.
Un'altra via è quella di usare un pin del microcontroller per uno switch MOSFET che possa interrompere l' alimentazione del modulo ed effettuare così un reset hardware "remoto" (o semplicemente minimizzare il consumo del sistema quando il display non è necessario). Dato che l' assorbimento del modulo LCD è bassissimo (la corrente derivata dalla Vdd solitamente è assai minore di 5mA), non occorre neppure un buffer e la corrente erogata direttamente dall' I/O del microcontroller è sufficiente. Bisogna, però, ricordare che una eventuale retro illuminazione ha un consumo ben maggiore e va esclusa da questo meccanismo. Inoltre, sul pin di I/O è presente la caduta di tensione del MOS interno, solitamente dell' ordine di 0.4-07V; va verificato che questo non influenzi il funzionamento del modulo LCD. Se si verificasse che la riduzione della tensione di alimentazione è critica, si potrà inserire un piccolo MOSFET come buffer.


Il display funziona, ma capita che il primo carattere della linea non venga visualizzato

Se osservate il vostro listato, probabilmente prima della scrittura sulla linea avete fatto eseguire al controller un comando di clear o clear & home. Per l' esecuzione, questi comandi richiedono 1,5ms  mediamente, ma capitano moduli in cui sia necessario temporizzare per almeno 1.8/1.9 ms o anche di più. Durante questo tempo, qualsiasi cosa spedita al controller non viene considerata, per cui è probabile che il primo carattere inviato per la visualizzazione sparisca.
Se, dopo il comando, non viene verificato il flag BF (il che richiede l' uso del pin RW), ma si utilizzano tempi fissi, basterà aumentare la durata dell' attesa di fine comando 


Il display funziona, ma visualizza caratteri incomprensibili o a caso

Escluso in problema di connessioni, si tratta di una questione di tempi. Come per il caso precedente, se non si utilizza il test del flag BF, occorre che i tempi di attesa di esecuzione dei comandi siano sufficientemente lunghi. Da notare che la scrittura di un carattere o la lettura di un dato è anch' esso un processo che richiede tempo. Se i tempi non sono sufficientemente lunghi, è possibile che l' invio successivo troppo rapido di caratteri o comandi dia origine a errate interpretazioni da parte del controller, che solitamente si realizzano con la visualizzazione caotica di caratteri casuali.


Il display consuma le batterie in un attimo

Il modulo LCD e la sua elettronica di controllo ha un consumo tipico tra 2 e 5 mA, anche meno in modelli a basso consumo. Se, però, è presente una retro illuminazione, questa è causa di un assorbimento di anche oltre 100 mA. Maggiore è la brillantezza voluta, maggiore sarà la corrente assorbita. Tenendo anche presente che alcuni costruttori usano una forte retro illuminazione per compensare display economici con basso contrasto. 
Quindi, per apparati a batteria, sarà meglio utilizzare moduli con display visibile a luce ambiente e senza retro illuminazione.  Avendo necessità di usare modelli con backlight, è indispensabile spegnerla quando il display non è in uso.
Peraltro, è facile constatare che il display potrà essere ben visibile anche senza pompare nei LED la massima corrente; una resistenza serie o un controllo PWM potranno ridurre sensibilmente il consumo senza penalizzare eccessivamente l' immagine.

I moduli dotati di retro illuminazione elettroluminescente hanno un bassissimo consumo, dato che questa si comporta come un condensatore. Analogamente, i moduli VFD hanno gli elementi intrinsecamente luminosi, per cui non richiedono retro illuminazione, pur essendo ben visibili in piena luce.
Però i moduli EL, CLF e i VFD richiedono generatori di tensione ausiliari che consumano corrente. Se è la soluzione ideale per i grossi pannelli, sfortunatamente, per piccoli moduli come quelli a caratteri, questa corrente può anche essere dell' ordine o anche maggiore di quella della retro illuminazione a LED, annullando qualsiasi vantaggio.


Alcuni caratteri non corrispondono a quelli attesi

I caratteri visualizzabili dal modulo sono determinati dal Character Generator del controller. Anche se buona parte dei controller disponibili nel mercato europeo hanno lo stesso set, i costruttori implementano vari set standard di caratteri, oltre ad un numero imprecisato di font custom richiesti da utenti particolari. Per esempio, esistono controller con set di caratteri solamente per una data lingua, come il cinese, oppure con simboli particolari. Quindi è possibile che ad un certo codice, su un certo modulo sia visualizzato un carattere e un diverso carattere su un altro modulo che, ovviamente, dispone di un set interno differente. Questo è comune da rilevare su moduli recuperati da apparecchiature commerciali.

 


Ho recuperato un modulo LCD da un apparecchiatura commerciale ma non riesco a farlo funzionare

I moduli realizzati per gli OEM, pur avendo connettori standard, possono avere collegamenti diversi dallo standard. Questo capita su moduli LCD presenti in macchine FAX, fotocopiatrici, strumenti. Ne risulta l' impossibilità di determinare quali funzione hanno i singoli pin.
Sfortunatamente può non essere facile recuperare una qualche informazione a riguardo e, in mancanza di queste, diventa molto difficoltoso stabilire esattamente quale funzione hanno i singoli collegamenti. 
Se si riesce a determinare con certezza quali sono i pin di alimentazione, si può tentare di scoprire la funzione degli altri con una serie di prove, dato che, trattandosi di ingressi logici, basta non superare le tensioni ammesse per minimizzare le possibilità di danni.


Inviando un carattere ad una certa posizione in una data linea, il carattere non si vede o va a finire da un' altra parte

Non tutti i moduli hanno lo stesso rapporto tra la memoria interna del controller e la posizione dei caratteri sul display.
Solitamente le linee successive alla prima partono da indirizzi noti, ma, sfortunatamente, ci possono essere costruttori che, per varie ragioni, hanno organizzato il modulo in modo differente. Ad esempio, moduli 1 riga da 16 caratteri possono essere organizzati sia come 1 linea da 16, sia come due linee da 8 consecutive. Quindi, nel primo caso, l' ottavo carattere avrà indirizzo 10h, nel secondo avrà indirizzo .
Occorre consultare il foglio dati del prodotto.


Trovo indicato l' indirizzo C0h, ma anche 40h, come inizio della seconda linea; quale è corretto?

Entrambi. Nel primo caso viene indicato l' indirizzo assoluto rispetto alla mappa di memoria del controller. Nel secondo caso viene indicato l' indirizzo relativo alla DDRAM.
In pratica, nella mappa di memoria, la DDRAM visibile ha un accesso con un comando che necessita del bit 7=1, il che corrisponde agli indirizzi successivi a 80h, cioè 10000000 binario. 
Il primo carattere della prima linea è accessibile inviando il comando 80h. Il primo carattere della seconda riga corrisponde a C0h.
Se, però, consideriamo che, logicamente, è più semplice considerare la partenza da 0 e non da 80, possiamo dire che Il primo carattere della prima linea corrisponde alla locazione di DDRAM, relativa al display, 00h e che il primo carattere della seconda riga corrisponde alla locazione 40h. Abbiamo solo considerato comune e sottinteso il bit 7 di accesso che è a 1.

Posizione primo carattere
di un display 20x4

Memoria relativa al display

Accesso alla memoria
 del controller

prima linea 00h  - 00000000 80h - 10000000
seconda linea 40h - 01000000 C0h - 11000000
terza linea 10h - 00010000 94h  - 10010000
quarta linea 14h - 00010100 D4h - 11010000

Il problema di inviare il byte alla giusta locazione è risolto nel driver. Ecco, ad esempio, una macro che trasforma l' indirizzo relativo nel comando di accesso alla memoria DDRAM

LCDDDADR macro DDRamAdr

Local value = DDRamAdr | b'10000000' ; mask command
     movlw value
     call  LCDWrCmd
        endm


 

Copyright © afg . Tutti i diritti riservati.
Aggiornato il 20/02/13 .