Tutorials - Elettronica

 

 

LCD con caratteri a matrice


Il software di gestione: l' inizializzazione

Prima che il display possa essere utilizzato, deve essere inizializzato dal dispositivo di controllo (microcontroller, PC, ecc).  

E' importante definire esattamente questa faccenda dell' inizializzazione, cosa troppo spesso non considerata, in quanto una inizializzazione non corretta porta all' impossibilità di utilizzare il display.

All'arrivo della tensione di alimentazione il controller HD44780 si predispone per ricevere i comandi, assestando alcuni registri ed assumendo i valori di default al POR che sono i seguenti:

  • 8 bit di interfaccia (DL = 1)

  • display su 1 linea (N = 0)

  • carattere a matrice 5x8 (F = 0)

  • Display off / cursore off / cursore lampeggiante (D= C = B = 0)

  • Display senza Shift (S = 0)

  • Movimento Cursore verso la destra (I / D = 1)

Per ottenere un reset hardware corretto occorre che la tensione di alimentazione sia applicata con un fronte di salita tra 0.1 e 10 ms.

Inoltre, cosa da non sottovalutare, occorre che, una volta sia caduta la tensione, essa non si ripresenti prima di 1 ms, altrimenti la successiva inizializzazione hardware non sarà completata correttamente. Quindi il modulo è sensibile al brown out, come peraltro lo sono tutti i microcontroller.

  • Un secondo punto importante è che l' inizializzazione hardware richiede un certo tempo di esecuzione, che è valutabile attorno a molti millisecondi (da 15 a 40 o più, a seconda del modello di controller e della tensione di alimentazione).

  • E durante questo tempo iniziale il display non può accettare ordini dall'esterno Qualsiasi cosa inviata al display non ha conseguenza.

  • Va anche considerato che se durante questo tempo la tensione viene a mancare e ritorna prima del limite sopra indicato, il controller si resetterà in maniera parziale o incompleta, impedendo il corretto uso del display.

Le conseguenze di quanto sopra sono evidenti:
 

  • se le condizioni elettriche elencato nelle specifiche Power Supply Conditions del foglio dati non sono rispettate, il circuito di reset interno non funzionerà normalmente e non riuscirà a inizializzare il HD44780U.
     
  • Il reset all' arrivo della tensione imposta una interfaccia a 8 bit. Se l'interfaccia usata è a 4 bit, occorre un comando differente.
  • Analogamente, se il display dispone di più di una riga, per visualizzare le successive occorre inviare il comando opportuno. E se le funzioni di shift o del cursore richieste sono differenti da quelle di default, occorrerà inviare i comandi necessari.
     
  • Dopo il reset, il display è off, ovvero attivo, ma spento, quindi non visualizza nulla. Occorre inviare i comandi per attivare la visualizzazione.

Alla luce di quanto sopra, il "fidarsi" ciecamente del POR del controller non è sempre una buona pratica. Il reset al power on sarà sicuro se sperimentato con il display voluto nelle condizioni reali di impiego, verificando sia il tempo iniziale di assestamento, che può essere anche abbastanza consistente ed avere tolleranza anche tra pezzi dello stesso modello, e ancor più tra modelli diversi, sia la corretta temporizzazione dell' alimentazione.
In questo caso, non occorre inviare altro al modulo se non i comandi necessari per portarlo alle condizioni di lavoro volute (come detto, una serie di comandi iniziali è indispensabile in ogni caso in cui il modulo debba funzionare in modo diverso da quanto imposta il default).

Ricordare che, nel caso in cui questi parametri non siano rispettati, il risultato è che il controller non sarà correttamente inizializzato e non risponderà ai successivi comandi, o, peggio, risponderà in maniera caotica.

Per un caso del genere, e comunque ogni volta si voglia resettare il display durante il funzionamento, l'inizializzazione deve essere effettuata via software, attraverso una serie di istruzioni.


Una cosa sempre non considerata dagli utilizzatori e da grandissima parte dei commentatori sul WEB è che:

Il reset del microcontroller e quello dell' HD44780 sono due cose completamente differenti !!!

Il reset del microcontroller NON resetta il controller del display
.
 

Questo viene "resettato" solo dalla caduta di tensione di alimentazione e dal suo ritorno nei modi sopra indicati oppure dalla procedura software di inizializzazione.

Quindi un riavvio del programma del microcontroller senza la caduta della tensione deve prevedere un reset software per il display, pena l' impossibilità di riprenderne il controllo.

Vediamo di chiarire ulteriormente.

La maggior parte delle applicazioni utilizza per il microcontroller e per il display la stessa tensione di alimentazione.  In genere, se ben realizzata, l' alimentazione soddisfa i requisiti per un POR sia per il microcontroller, sia per il controller del display. Allora è possibile utilizzare il reset hardware del display, facendo si che il microcontroller attenda il tempo iniziale necessario per avere la sicurezza che HD44780 abbia esaurito tutte le operazioni necessarie per il suo avvio regolare.

Ma cosa succede quando premiamo il pulsante di reset del microcntroller oppure riavviamo l' emulazione ICD ? 

Semplicemente solo il microcontroller sarà resettato, riavviando il programma dal suo vettore di reset.

Ma il controller del display, non essendo mancata l' alimentazione, resta al punto in cui è stato abbandonato e non esegue alcun reset

Se la tensione di alimentazione non varia, tutte le impostazioni (numero linee, font caratteri, direzione cursore, shift, ecc) e il contenuto della RAM non sono alterate. Se il programma sul microcontroller riparte dopo un reset imposto, ad esempio, al pin MCLR, e supponendo che il controller del display abbia eseguito un reset hardware, i comandi che invierà avranno come minimo il risultato di scombinare la visualizzazione o, nel caso peggiore, mandare in palla il controller. A questo punto è probabile che l' unica via per riprendere il controllo del display sia quella di togliere e rimettere l' alimentazione al modulo.

Dunque, si può confidare nel reset hardware, dato che è difficile che un buon alimentatore non rispetti le temporizzazioni previste dal costruttore, e non implementare mai l' inizializzazione software.

La faccenda si basa sul solito "tanto funziona anche senza...". Ma il "funziona anche senza" è vero solo nel caso in cui il reset hardware sia eseguito correttamente. 
Nel caso in cui si riavvii il microcotroller da istruzioni (ad esempio reset degli enhanced) o ogni qualvolta il microcontroller sia  resettato separatamente, o ci siano condizioni di brown out dell' alimentatore, ci si troverà davanti a situazioni in cui il display si rifiuta di funzionare correttamente, senza capirne le cause.

Siccome in ogni caso occorre:

  • attendere il tempo iniziale di reset dell' HD44780

  • inviare i comandi per la modalità voluta, se diversa dal default

non comporta che un minimo ulteriore consumo di tempo e di istruzioni l' inizializzare il display con la procedura software completa.

Questo elimina i problemi che si formano immancabilmente dove non si faccia questo.


La procedura standard di Hitachi

Il foglio dati di Hitachi per HD44780 raccomanda di utilizzare questa sequenza di comandi per l' inizializzazione software, ma anche subito dopo l' accensione del sistema e propone anche un flow chart della sequenza::

  1. attendere per un tempo di almeno 15ms (con alimentazione a 5V) o di almeno 40ms (con alimentazione a 2,7V); questo è necessario perchè al POR il microcontroller che gestisce il sistema si avvia in un tempo molte volte inferiore a quello richiesto dal controller del display.  Quindi occorre farlo attendere fino a che HD44780 ha effettuato il suo assestamento iniziale. Intervenendo con comandi sul display prima di questo tempo è inutile se non dannoso in quanto può produrre risultati inaspettati 
  2. inviare il comando per un colloquio su interfaccia a 8bit o a 4bit, a seconda di come è configurato l' hardware, ma senza importanza per il numero di righe o caratteri del visualizzatore, nè per altre opzioni.
    Il comando da inviare è  b'0011xxxx', ovvero 30h.
  3. attendere 4.1 ms
  4. ripetere il comando
  5. attendere 100 us
  6. ripetere il comando

Esaurita la fase iniziale, occorre ora inviare i comandi per stabilire le modalità operative del display. Ora è anche possibile testare il busy flag.
La sequenza consigliata è questa:

  1. Spegnere il display
    Cancellare il contenuto di DDRAM (clear display)
    Accendere il display con la modalità voluta

 

Il reset hardware porta il controller alla fine del punto 7 con i parametri di default sopra indicati. Nel reset software il contenuto del punto 7 potrà essere variato se occorrono parametri di funzionamento diversi; e questo sarà necessario anche dopo il reset hardware, se il default non è quello necessario.  

Va osservato al punto 2 che il comando iniziale 0x30 è un caso speciale del set di comandi. Esso ha a un livello indifferente sui primi 4 bit, che non vengono considerati; quindi non importa che il collegamento tra microcntroller e modulo sia a 4 o a 8 bit, dato che sono utilizzati solo i 4 bit alti.

Le tre ripetizioni del comando sono specificate nel foglio dati Hitachi e in quello dei controller compatibili. Da prove sul campo, risulta che alcuni display si inizializzano benissimo anche con un solo invio del 30h, ma non c'è ragione per non adeguarsi alle richieste delle specifiche scritte dal produttore del controller (vedi più sotto).

In pratica, possiamo dire che il codice iniziale 30h serve a costringere il controller, sia correttamente che non correttamente inizializzato dal reset hardware, a portarsi in un punto tale da cui potrà accettare le successive istruzioni sul bus della larghezza voluta.

Questa procedura, anche se apparentemente prolissa, si trasforma in pochissime righe di codice e non c'è quindi ragione per non implementarla in ogni caso in cui il foglio dati del componente la proponga.

Davvero non è comprensibile chi non voglia implementare questa procedura ("Tanto funziona anche senza..."), peraltro esemplificata dagli stessi costruttori e in mille siti, per i più comuni microcontroller e in tutti i possibili linguaggi!  Tra l' altro, i flow chart proposti  da Hitachi sono di facile interpretazione ed esempi di codice sono reperibili in un attimo da molte sorgenti sul WEB.
Si può obiettare che "allunga il tempo di esecuzione..", ma questo è relativo in quanto i moduli LCD a caratteri sono periferiche molto lente e, in ogni caso in ogni caso, all' arrivo della tensione, occorrerebbe aspettare comunque il tempo di assestamento del controller.

Alcune note per i "furbacchioni":
  • Certamente si può verificare che le sequenze di ritardo consigliate dal costruttore e la necessità di ripetere tre volte il primo comando non siano strettamente necessarie per tutti i tipi di display. Per esempio, alcuni dei display provati reagiscono in tempi molto minori e necessitano di un solo invio del comando 30h.
    Però questo non è certificato nei fogli dati, che, per qualsiasi costruttore di controller compatibili, replicano solamente la sequenza indicata da Hitachi. 
    Per contro, si sono verificati display, soprattutto nel low cost made in China, con una certa ampiezza del range dei tempi e, si può supporre, anche delle inizializzazioni. 
    Quindi, dato che il  successo della prima fase dell' inizializzazione è essenziale per i passi successivi, non c'è alcuna ragione per non seguire la procedura consigliata


Chi vuole fare diversamente perchè ne ha sperimentata la non necessità per un dato tipo di display, è opportuno che verifichi la possibilità di ripetere la cosa anche con altri tipi di display o con tensioni di alimentazioni diverse .
Potrebbe avere delle sorprese...

 

  • Va considerato, infatti, che minore è la tensione di alimentazione, maggiore è il dilatarsi dei tempi necessari al controller per eseguire le funzioni richieste. E anche la temperatura ambiente è influente.

Può essere utile consultare a riguardo le pagine relative ai problemi di applicazione dei moduli LCD a caratteri.

Il foglio dati propone anche l' inizializzazione per l' interfaccia a 4 bit:

Qui possiamo osservare un particolare interessante.

Le fasi iniziali in cui viene inviato il comando 30h, nell' interfaccia a 4 bit, che utilizza il nibble alto (D7:4), richiede solamente l' invio dei bit da B7 a B4, ovvero 0011 e non deve essere completata con la parte bassa del comando.
Ovvero, questa "sveglia" iniziale data al controller, riguarda solamente i 4 MSbit, con il risultato che non ha alcuna importanza iniziale la configurazione dell' interfaccia, che sarà specificata solo successivamente.

E notiamo infatti che i comandi relativi alle funzioni, nella fase 7, richiedono entrambi i nibble, per cui ogni comando richiede due cicli di scrittura: nel primo sono inviati i 4 bit del nibble alto e nel secondo i 4 bit del nibble basso.

Ovviamente il primo comando di function set, subito dopo la terza ripetizione del 0011, dovrà identificare l' interfaccia come composta da 4 bit e non dagli 8 del default.

Seguendo questa procedura per ogni reset del display, compreso quello all' accensione, non ci sono mai stati problemi di inizializzazione con qualunque dei moduli provati, qualsiasi sia stato il formato o il costruttore.

E' ovvio che se si richiedono specifiche funzioni al display, come lo shift automatico o il movimento del cursore da destra a sinistra, questi dati saranno impostati nel controller in questa fase.

In ogni momento è possibile variare le opzioni durante il funzionamento, ad esempio attivando e disattivando il cursore o lo shift.  
Ovviamente la modalità di interfaccia a 4 o 8 bit, il numero delle linee e la matrice dei caratteri, potranno essere impostate solo durante l'inizializzazione completa.

Durante la fase iniziale (da 1 a 6) non è possibile fare altro sul display, neppure leggere il flag di busy, che dovrebbe essere comunque bloccato. Completata la sequenza, si è sicuri che il controller si è predisposto per ricevere i comandi successivi e per i quali, se previsto dall' interfaccia hardware, si può testare il flag di busy oppure operare ancora con ritardi fissi.

In tutti i casi,infatti,  alternativa a quanto indicato nei flow chart, al posto di analizzare il flag BF, si potrà attendere un tempo fisso tra istruzione ed istruzione. Questi tempi di esecuzione sono indicati più avanti nel dettaglio dei comandi. Orientativamente occorre una attesa di 40 us per la maggior parte dei comandi e di 1.6 ms per i comandi di clear e di home.


 

 

Display che hanno controller diversi da HD44780 potranno richiedere sequenze di inizializzazione diverse

con tempi più brevi, altre istruzioni iniziali e con un set di opzioni molto più vasto.

Come sempre, la lettura del foglio dati del componente permetterà di utilizzarlo al meglio.

Buona parte degli equivalenti diretti è in grado di operare con tempi di circa il 50% inferiori e non richiede la triplice ripetizione del 30h iniziale.
In compenso i fogli dati possono indicare un tempo di power on reset maggiore di 15 ms, anche 30 o 40 ms.
Quindi, l' uso di parametri di sicurezza nelle temporizzazioni rende più universale un driver ben scritto, in quanto la prolissa inizializzazione di Hitachi andrà bene per tutti i modelli compatibili, ma versioni "abbreviate" potranno funzionare su alcuni moduli, ma non sui altri.

Ripetiamo che non c'è solitamente la necessità di tirare i tempi negli gli accessi all' LCD, ma per chi volesse spremere il massimo, è consigliabile iniziare con un driver "conservativo" e poi, quando tutto gira correttamente, cercare di limare i vari ritardi, sempre verificando che il tutto funzioni non solo alla temperatura ambiente del laboratorio, ma anche a quelle reali di funzionamento. E, se il circuito deve essere ripetuto in più esemplari, non limitarsi a verificare un solo modulo LCD, ma testarne diversi, dato che le caratteristiche, anche all' interno di un determinato costruttore/modello, possono non essere costanti.
In particolare, una considerazione particolare alla tensione di alimentazione.

Per i display che funzionano al di sotto dei 4.5 V i fogli dati indicano un aumento dei tempi, pari a circa il doppio.

Quindi, utilizzando un display (nei modelli in cui è possibile) tra 2.7 e 4. 5V, le temporizzazioni dovranno essere verificate, in quanto quelle applicabili ad una alimentazione di 5V hanno buone probabilità di essere inadeguate.

Il fattore alimentazione diventa importante in apparati alimentati direttamente a batteria, la cui tensione a fine carica e dopo ore di lavoro può essere abbastanza diversa da determinare una differente risposta del controller.


 


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