Inicialización de encendido del módulo LCD HD44780

Estoy usando un módulo LCD clon HD44780 un KS0066U. Todo funciona bien en el módulo, excepto cuando enciendo y enciendo rápidamente el dispositivo (encendido->apagado->encendido). Por alguna razón, una interrupción muy breve en la alimentación hace que el módulo de visualización se inicialice incorrectamente como una pantalla LCD de 1 línea en lugar de una pantalla LCD de 2 líneas. ¿Qué causaría este comportamiento? ¿Hay alguna forma de evitarlo en el software?

EDITAR: estoy usando el controlador de pantalla en modo de 4 bits, no en modo de 8 bits.

Parece que nadie pensó que su pregunta valía la pena votar, bastante extraño.
Las hojas de datos de algunos de los clones HD44780 están bastante mal escritas. Mi objetivo era entablar una conversación sobre cuál era la forma correcta de inicializarlos. Tal vez soy el único que ha tenido problemas para usarlos en modo de 4 bits.
No, estoy pasando por el mismo problema en este momento ejecutando en modo de 4 bits. Han pasado unos 15 años desde la última vez que programé una pantalla LCD de caracteres simples, y recuerdo que era un verdadero dolor depurar cuando estaba en la escuela. Sin embargo, no estoy tan lejos como usted: ni siquiera puedo hacer la inicialización correcta porque todavía no puedo mostrar un solo carácter. :)

Respuestas (5)

Cambié mi código de inicialización para que enviara el nibble superior de 4 bits del comando de conjunto de funciones dos veces. A continuación, me molesta 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 puede enviar el nibble superior de 4 bits y luego enviar el comando de conjunto de funciones de 4 bits superior seguido de 4 bits inferior.

// Funciona a veces puerto de pseudocódigo
= 0x20;
e=1; e=0;
puerto=0x20;
e=1; e=0;
puerto=0xC0;
e=1; e=0;

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

Supongo que le falta un retraso necesario en su secuencia de inicialización. Si la pantalla está ocupada cuando intenta enviar un comando, ese comando se ignorará. Si cuando inicia su procedimiento, la pantalla está en modo de cuatro bits y acaba de registrar "0000" como la primera mitad de un comando, entonces cuando registre "0011", la pantalla verá el comando completo como "00000011" , lo que hará que la pantalla esté ocupada durante un máximo de 1,6 ms.

Por cierto, si es posible, es bueno cablear los cables de datos de bajo orden desde la pantalla de tal manera que cuando se envíe un comando "0011" a la pantalla, los 8 bits completos vistos por la pantalla formarán un comando de configuración de modo. que es correcto para el tipo de pantalla que está utilizando. Eso ayudará a evitar fallas en la pantalla al restablecer una pantalla que ya está en uso (reiniciar periódicamente la pantalla es una buena idea, si se puede hacer sin fallas, ya que garantizará que si la pantalla de alguna manera entra en un modo incorrecto, se arreglará). sí mismo).

Encontré una solución para el problema:

Agregué un retraso de 1000 milisegundos al inicio, antes de inicializar/configurar el controlador LCD. Funcionó bastante bien para mí.

Un retraso más bajo (100, 200 ms) no funcionó tan bien. Solo una nota: sucedió solo en bus de datos de 4 bits.

¡Buena suerte!

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

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

Ya tiene 100 ms de retraso en el arranque
Prueba mi otra sugerencia entonces. Incluso podría controlar la alimentación de la pantalla LCD desde un pin directamente; no debería consumir más de unos pocos mA.
¿Existe realmente un retraso máximo permitido? Pensé que lo principal con estas pantallas LCD es esperar la cantidad mínima, pero si no puede obtener el tiempo correcto, puede ir a lo seguro y esperar más.
@Dave, es posible que haya malinterpretado el "retraso máximo", es solo un retraso sensato que recomendaría. Por ejemplo, esperar unas horas sería un poco extremo...
¡JAJAJA! Bueno, supuse que eso era lo que querías decir, pero quería asegurarme de que no me faltaba nada, ya que todavía tengo que inicializar mi LCD. Me pregunto si debería ir y agarrar una olla para asegurarme de que no es el contraste lo que me está jodiendo aquí. :)

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