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.
Respuestas:
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;
fuente
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).
fuente
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!
fuente
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.
fuente
No estoy seguro de si esto ayuda en absoluto, pero me metí con el KS0066U en un proyecto Arduino. Aquí está el enlace .
fuente