Inizializzazione all'accensione del modulo LCD HD44780


10

Sto usando un modulo LCD clone HD44780 un KS0066U. Tutto funziona bene sul modulo tranne quando accendo e riaccendo rapidamente il dispositivo (on-> off-> on). Per qualche motivo una breve interruzione dell'alimentazione provoca l'inizializzazione errata del modulo display come display LCD a 1 riga anziché display LCD a 2 righe. Cosa causerebbe questo comportamento? Esiste un modo per impedirlo nel software?

EDIT: sto usando il controller del display in modalità 4 bit non in modalità 8 bit.


Sembra che nessuno abbia pensato che la tua domanda meritasse di essere votata, abbastanza strana.
Kortuk,

I fogli dati per alcuni cloni di HD44780 sono scritti in modo piuttosto scadente. Il mio obiettivo era avviare una conversazione su quale fosse il modo corretto di inizializzarli. Forse sono l'unico che ha avuto problemi ad usarli in modalità a 4 bit.
mjh2007,

No, sto attraversando lo stesso problema in questo momento correndo in modalità a 4 bit. Sono passati circa 15 anni dall'ultima volta che ho programmato un semplice LCD a caratteri e ricordo che è stato un vero dolore riavviare quando ero a scuola. Non sono per quanto riguarda te, però: non riesco nemmeno a ottenere l'inizializzazione giusta perché non riesco ancora a visualizzare un singolo personaggio. :)
Dave,

Risposte:


4

Ho modificato il mio codice di inizializzazione in modo che abbia inviato due volte il nibble a 4 bit superiore del comando set di funzioni. Dopo di che ho risentito il bocconcino a 4 bit superiore seguito dal bocconcino a 4 bit inferiore. Questo non corrisponde al foglio dati che sembra indicare che è possibile inviare il nibble a 4 bit superiore, quindi inviare il comando set di funzioni superiore a 4 bit seguito da 4 bit inferiore.

// Funziona a volte porta pseudo-codice
= 0x20;
e = 1; e = 0;
port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;

// Funziona sempre
porta pseudo-codice = 0x20;
e = 1; e = 0;
e = 1; e = 0;
port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;


2

La mia ipotesi sarebbe che manchi un ritardo necessario nella sequenza di inizializzazione. Se il display è occupato quando si tenta di inviare un comando, quel comando verrà ignorato. Se quando si avvia la procedura, il display è in modalità a quattro bit e ha appena "0000" il clock come prima metà di un comando, quindi quando si clock in "0011" il display vedrà l'intero comando come "00000011" , che farà sì che il display sia occupato per un massimo di 1,6 ms.

Per inciso, è possibile, se possibile, collegare i fili di dati di ordine inferiore dal display in modo tale che quando un comando "0011" viene inviato al display, tutti gli 8 bit visualizzati dal display formeranno un comando impostato in modalità che è corretto per il tipo di display che si sta utilizzando. Ciò consentirà di evitare eventuali problemi di visualizzazione durante il ripristino di uno schermo già in uso (è consigliabile reimpostare periodicamente lo schermo, se può essere eseguito senza problemi, poiché assicurerà che se lo schermo entra in qualche modo in una modalità errata, verrà risolto si).


1

Ho trovato una soluzione alternativa per il problema:

Ho aggiunto un ritardo di 1000mil secondo all'avvio, prima di inizializzare / configurare il controller LCD. Ha funzionato abbastanza bene per me.

Un ritardo inferiore (100, 200ms) non ha funzionato così bene. Solo una nota: è successo solo nel databuss a 4 bit.

In bocca al lupo!


0

Inserendo un ritardo nel codice in modo che quando si accende, il display LCD sia sufficientemente lungo da inizializzarsi all'avvio. Un massimo di alcune centinaia di millisecondi.

Potresti anche provare a collegare l'alimentazione LCD al microcontrollore e spegnere l'LCD per un secondo dopo l'avvio.



Prova il mio altro suggerimento allora. Potresti persino controllare direttamente la potenza dell'LCD da un pin; non dovrebbe assorbire più di qualche mA.
Thomas O

c'è davvero un ritardo massimo consentito? Ho pensato che la cosa principale con questi LCD fosse che tu aspettassi l'importo minimo, ma se non riesci a ottenere il tempismo corretto, puoi giocarlo in sicurezza e aspettare solo più a lungo.
Dave,

@Dave, potresti aver interpretato male il "ritardo massimo", è solo un ritardo ragionevole che consiglierei. Ad esempio, aspettare qualche ora sarebbe un po 'estremo ...
Thomas O

LOL! Beh, ho pensato che fosse quello che volevi dire, ma volevo assicurarmi che non mi mancasse qualcosa, dato che devo ancora inizializzare il mio LCD. Mi chiedo se dovrei andare a prendere una pentola per assicurarmi che non sia il contrasto che mi sta rovinando qui. :)
Dave,

0

Non sono sicuro se questo aiuti TUTTI, ma ho fatto un casino con KS0066U su un progetto Arduino. Ecco il Link .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.