Conexión de LCD 16x2 a 8051

0

Estoy desarrollando una aplicación en el chip 8051 y estoy usando Multisim para simular la conexión. He conectado RS a P3.0, E a P3.1, D0-D7 a P2, Vcc a 5V, GND y Vee a tierra. Solo quiero mostrar un personaje para probar la pantalla LCD con el chip. El código que escribo para ello es:

P2 = 0x00;
lcdinit();
writecmd(0x81);
writedata('H');

Las funciones se definen de la siguiente manera:

void lcdinit(){

    writecmd(0x38);
    writecmd(0x0f);
    writecmd(0x01);
    writecmd(0x06);

}
void writecmd(int a){
    RS = 0;
    P2 = a;
    EN=1;
    Delay(150);
    EN=0;
    Delay(150);
}

void writedata(int a){
    RS = 1;
    P2= a;
    EN =1;
    Delay(150);
    EN=0;
    Delay(150);
}

He intentado el código anterior, se compila bien, pero no aparece ningún resultado en la pantalla LCD que debería imprimir "H".

¡La ayuda es muy apreciada!

    
pregunta coding4fun

1 respuesta

1

Suponiendo que este es un LCD genérico de caracteres compatible con Hitachi HD44780, ya que hay datos paralelos de 8 bits, un RS y un flash estroboscópico. Es muy probable que ese sea el tipo de hardware que su Multisim está tratando de emular.

Puede encontrar la hoja de datos de HD44780 aquí: enlace

¿Está el pin de control R / W bajo? Si R / W es alto, los datos y los comandos no se escribirán en el controlador. Dejar la entrada R / W desconectada no está bien; debe estar conectado a tierra a menos que desee específicamente poder leer el estado del comando y leer los datos de la memoria de la pantalla. La mayoría de los controladores de dispositivos HD44780 no usan esta función, por lo que R / W generalmente está conectado a tierra.

Durante la inicialización, ¿esperó al menos 40 ms después de que la potencia aumente por encima de 2,7 V antes de enviar comandos? (Algunas fuentes sugieren que 10 ms es suficiente, pero como controlador "genérico" quizás sea mejor jugar con seguridad).

En el código que genera la luz estroboscópica E (los datos están sincronizados en el flanco descendente del reloj E), ¿está utilizando los tiempos de retención y configuración correctos?

  • Habilita el ancho del pulso (nivel alto, E = 1) 450 nseg mín, pero parece que estás usando Delay (150)
  • Tiempo de configuración de datos de escritura (antes de E = 0) 195 nsec min, pero parece que está usando Delay (150)
  • Tiempo de retención de datos de escritura (después de E = 0) 10 nsec min: este retraso (150) debería ser suficiente
  • estos se enumeran en Características de CA (2.7V a 4.5V), Características de sincronización del bus, Operación de escritura, cerca del final de la hoja de datos.

Como menciona 8051, su microcontrolador probablemente sea relativamente lento, pero ¿está seguro de que está permitiendo el tiempo de ejecución requerido entre los comandos? Ver tabla 6 en la hoja de datos. La mayoría de los comandos necesitan alrededor de 37 usec, el comando home return requiere más de 1500 usec.

También hay algunos ejemplos de secuencias de comandos que se muestran en la tabla 11.

    
respondido por el MarkU

Lea otras preguntas en las etiquetas