Este problema ocurre en el modo de 4 bits, la pantalla LCD pierde un mordisco de datos (un carácter está formado por dos mordiscos de 4 bits) y luego todos los caracteres subsiguientes se compensan con 4 bits.
Puede verificar que este es su problema al verificar que la basura que se muestra siempre se repite para una cadena conocida que se supone que debe mostrarse, por ejemplo, "Detener" siempre mostrará "7Fπ ...".
Esto puede ocurrir por varias razones, pero la principal en mi caso fue la baja potencia de la MCU que controla la pantalla. La MCU todavía puede funcionar con un voltaje más bajo, pero cuando establece el pin "EN" (habilitar) de la pantalla LCD en ALTO, si está por debajo del valor mínimo para esa pantalla LCD (2.2V por ejemplo ), entonces el nibble de 4 bits no se grabará cuando la "EN" se establezca nuevamente en baja, haciendo que la pantalla se confunda hasta que este error vuelva a ocurrir y la pantalla esta restaurado.
Para solucionar este problema, es mejor que la MCU espere hasta que la tensión de suministro vuelva a un valor por encima del valor mínimo de la tensión mínima ALTA de la entrada del LCD más un margen de seguridad. Por ejemplo, en MSP430 energia o arduino antes de llamar a lcd.print
, siempre llamaría algo como esto:
setup(){
analogReference(INTERNAL2V5);
}
void waitVoltage(){
while(true){
// 3v(what we want)/2.5 (reference) x1024/2=614
//we read VSS/2 on port 11, we want more than 2.5v to write on the lcd
if(analogRead(0x1011)>613){
break;
}
delay(50);
}
}