Inicialización de encendido del módulo LCD HD44780

10

Estoy usando un módulo LCD clon HD44780 un KS0066U. Todo funciona bien en el módulo, excepto cuando apago rápidamente el dispositivo (encendido-> apagado-> encendido). Por alguna razón, una interrupción muy corta 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 prevenirlo en el software?

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

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

Respuestas:

4

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

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

// Funciona todo el tiempo pseudo-code
port = 0x20;
e = 1; e = 0;
e = 1; e = 0;
puerto = 0x20;
e = 1; e = 0;
puerto = 0xC0;
e = 1; e = 0;

mjh2007
fuente
2

Supongo que faltará un retraso necesario en su secuencia de inicialización. Si la pantalla está ocupada cuando intenta enviar un comando, ese comando será ignorado. Si cuando comienza su procedimiento, la pantalla está en modo de cuatro bits y acaba de marcar "0000" como la primera mitad de un comando, entonces cuando registre en "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, conectar 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 enteros vistos por la pantalla formen un comando de configuración de modo que es correcto para el tipo de pantalla que está utilizando. Eso ayudará a evitar cualquier falla en la pantalla al reiniciar una pantalla que ya está en uso (es recomendable reiniciar periódicamente la pantalla, si se puede hacer sin problemas, ya que garantizará que si la pantalla de alguna manera se pone en un mal modo, se solucionará sí mismo).

Super gato
fuente
1

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 menor (100, 200 ms) no funcionó tan bien. Solo una nota: sucedió solo en 4bits databuss.

¡Buena suerte!

Eduardo Brandt
fuente
0

Al insertar un retraso en su código, cuando se enciende, le da a la pantalla LCD el tiempo suficiente para inicializarse cuando se inicia. Un máximo de unos pocos cientos de milisegundos.

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

Thomas O
fuente
Ya tengo 100 ms de retraso en el inicio
mjh2007
Prueba mi otra sugerencia entonces. Incluso podría controlar la alimentación de la pantalla LCD directamente desde un pin; no debería dibujar más de unos pocos mA.
Thomas O
¿Existe realmente un retraso máximo permitido? Pensé que lo principal con estas pantallas LCD es que esperas la cantidad mínima, pero si no puedes obtener el tiempo correcto, puedes ir a lo seguro y simplemente esperar más.
Dave
@Dave, es posible que hayas malinterpretado el "retraso máximo", es solo un retraso razonable que recomendaría. Por ejemplo, esperar unas horas sería un poco extremo ...
Thomas O
Jajaja Bueno, pensé que eso era lo que querías decir, pero quería asegurarme de que no me faltaba algo, ya que aún no he inicializado mi LCD. Me pregunto si debería ir y tomar una olla para asegurarme de que no sea el contraste lo que me está arruinando aquí. :)
Dave
0

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

ThaKidd KG5ORD
fuente