11 votos

Inicialización de encendido del módulo LCD HD44780

Estoy usando un módulo LCD clon del HD44780 un KS0066U. Todo funciona bien en el módulo, excepto cuando hago un ciclo de alimentación rápido del dispositivo (on->off->on). Por alguna razón, una interrupción muy breve de la alimentación hace que el módulo de pantalla se inicialice incorrectamente como una pantalla LCD de 1 línea en lugar de una pantalla LCD de 2 líneas. ¿Qué puede causar este comportamiento? ¿Hay alguna manera de evitarlo en el software?

EDIT: Estoy usando el controlador de pantalla en modo de 4 bits, no en modo de 8 bits.

12voto

hromanko Puntos 548

Insertar un retardo en su código para que cuando se encienda le dé a la pantalla LCD el tiempo suficiente para inicializarse al arrancar. Un máximo de unos cientos de milisegundos.

También puede intentar conectar la alimentación del LCD al microcontrolador y apagar el LCD durante un segundo después del arranque.

4voto

Kieron Puntos 5096

Cambié mi código de inicialización para que enviara dos veces el nibble superior de 4 bits de la orden de ajuste de funciones. A continuación reenvié el nibble superior de 4 bits seguido del nibble inferior de 4 bits. Esto no coincide con la hoja de datos que parece indicar que se puede enviar el nibble superior de 4 bits y luego enviar el comando de conjunto de funciones superior de 4 bits seguido por el inferior de 4 bits.

// A veces funciona el pseudocódigo
puerto=0x20;
e=1; e=0;
puerto=0x20;
e=1; e=0;
puerto=0xC0;
e=1; e=0;

// Funciona todo el tiempo pseudocódigo
puerto=0x20;
e=1; e=0;
e=1; e=0;
puerto=0x20;
e=1; e=0;
puerto=0xC0;
e=1; e=0;

2voto

Alex Andronov Puntos 178

Mi opinión sería que te falta un retardo necesario en tu secuencia de inicialización. Si la pantalla está ocupada cuando intentas enviar un comando, ese comando será ignorado. Si al iniciar el procedimiento, la pantalla está en modo de cuatro bits y acaba de introducir "0000" como la primera mitad de un comando, entonces cuando introduzca "0011" la pantalla verá el comando completo como "00000011", lo que hará que la pantalla esté ocupada hasta 1,6 ms.

Por cierto, es bueno si es posible cablear los cables de datos de bajo orden de la pantalla de tal manera que cuando se envía un comando "0011" a la pantalla, los 8 bits completos vistos por la pantalla formarán un comando de ajuste de modo que es correcto para el tipo de pantalla que está utilizando. Esto ayudará a evitar cualquier fallo en la pantalla cuando se reinicie una pantalla que ya está en uso (reiniciar periódicamente la pantalla es una buena idea, si se puede hacer sin fallos, ya que se asegurará de que si la pantalla de alguna manera entra en un modo malo se arreglará por sí misma).

1voto

Rob Boek Puntos 1253

He encontrado una solución al problema:

Añadí un retardo de 1000 milisegundos en el arranque, antes de inicializar/configurar el controlador del LCD. Me funcionó bastante bien.

Un retraso menor (100, 200ms) no funcionó tan bien. Sólo una nota: Sucedió sólo en 4bits databuss.

Buena suerte.

0voto

paraba Puntos 96

No estoy seguro si esto ayuda en absoluto, pero me metí con el KS0066U en un proyecto de Arduino. Aquí está el enlace .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X