Inicialização de inicialização do módulo LCD HD44780

10

Estou usando um módulo LCD clone HD44780, um KS0066U. Tudo funciona bem no módulo, exceto quando eu desligo rapidamente o dispositivo (ligado-> desligado-> ligado). Por alguma razão, uma interrupção muito curta na energia faz com que o módulo de exibição seja inicializado incorretamente como um LCD de 1 linha em vez de um display de 2 linhas. O que causaria esse comportamento? Existe alguma maneira de evitá-lo em software?

EDIT: eu estou usando o controlador de vídeo no modo de 4 bits e não no modo de 8 bits.

mjh2007
fonte
Parece que ninguém achou sua pergunta digna de uma votação, bem estranha.
Kortuk
As planilhas de dados de alguns dos clones do HD44780 estão mal escritas. Meu objetivo era iniciar uma conversa sobre a maneira correta de inicializá-los. Talvez eu seja o único que teve problemas para usá-los no modo de 4 bits.
mjh2007
Não, estou passando pelo mesmo problema agora, executando no modo de 4 bits. Faz cerca de 15 anos desde a última vez que programamos um LCD de caracteres simples, e lembro que era uma verdadeira dor depurar quando estava na escola. Mas não estou tão longe quanto você - nem consigo acertar a inicialização porque ainda não consigo exibir um único caractere. :)
Dave

Respostas:

4

Alterei meu código de inicialização para enviar a mordidela superior de 4 bits do comando function set duas vezes. Depois disso, ressinto a mordidela superior de 4 bits, seguida pela mordidela inferior de 4 bits. Isso não corresponde à folha de dados que parece indicar que você pode enviar a mordidela superior de 4 bits e, em seguida, enviar o comando de conjunto de funções superior a 4 bits, seguido pela inferior de 4 bits.

// Às vezes funciona com pseudo-código
port = 0x20;
e = 1; e = 0;
porta = 0x20;
e = 1; e = 0;
porta = 0xC0;
e = 1; e = 0;

// Funciona o tempo todo pseudo-código
port = 0x20;
e = 1; e = 0;
e = 1; e = 0;
porta = 0x20;
e = 1; e = 0;
porta = 0xC0;
e = 1; e = 0;

mjh2007
fonte
2

Meu palpite seria que você está perdendo um atraso necessário em sua sequência de inicialização. Se a exibição estiver ocupada quando você tentar enviar um comando, esse comando será ignorado. Se, quando você iniciar o procedimento, o display estiver no modo de quatro bits e "0000" cronometrar como a primeira metade de um comando, quando você digitar "0011", o display verá o comando inteiro como "00000011" , o que fará com que a tela fique ocupada por até 1,6 ms.

Aliás, é bom, se possível, conectar os fios de dados de baixa ordem do display de tal maneira que quando um comando "0011" for enviado ao display, os 8 bits inteiros vistos pelo display formarão um comando de modo definido correto para o tipo de exibição que você está usando. Isso ajudará a evitar falhas de tela ao redefinir uma tela que já está em uso (redefinir periodicamente a tela é uma boa idéia, se for possível fazê-lo sem falhas, pois garantirá que, se a tela de alguma forma entrar em um modo ruim, ela será corrigida próprio).

supercat
fonte
1

Encontrei uma solução alternativa para o problema:

Eu adicionei um atraso de 1000milisegundos na inicialização, antes de inicializar / configurar o controlador LCD. Funcionou muito bem para mim.

Um atraso menor (100, 200ms) não funcionou tão bem. Apenas uma observação: isso aconteceu apenas no banco de dados de 4 bits.

Boa sorte!

Eduardo Brandt
fonte
0

Inserir um atraso no seu código para que, ao ser ligado, forneça ao LCD tempo suficiente para inicializar quando ele for inicializado. Um máximo de algumas centenas de milissegundos.

Você também pode tentar conectar a energia do LCD ao microcontrolador e desligar o LCD por um segundo após a inicialização.

Thomas O
fonte
Já tem atraso de 100 ms na inicialização
mjh2007 20/10/10
Tente minha outra sugestão então. Você pode controlar a energia do LCD diretamente de um alfinete; não deve atrair mais do que alguns mA.
Thomas O
existe realmente um atraso máximo permitido? Eu pensei que a principal coisa com esses LCDs é que você espera a quantidade mínima, mas se não conseguir acertar o tempo, pode jogar pelo seguro e esperar mais.
7609 Dave
@ Dave, você pode ter interpretado mal o "atraso máximo", é apenas um atraso sensato que eu recomendo. Por exemplo, esperar algumas horas seria um extremo pouco ...
Thomas O
RI MUITO! Bem, achei que era isso que você queria dizer, mas queria garantir que não faltava algo, pois ainda tenho que inicializar meu LCD. Eu me pergunto se devo pegar um pote para ter certeza de que não é o contraste que está me ferrando aqui. :)
Dave
0

Não tenho certeza se isso ajuda em tudo, mas eu errei com o KS0066U em um projeto do Arduino. Aqui está o link .

ThaKidd KG5ORD
fonte