La pantalla LCD basada en HD44780 muestra mitad negro, mitad en blanco

He estado tratando de hacer que una pantalla LCD HD44780 funcione varias veces. La primera vez fue por puerto paralelo desde una computadora, luego varias veces usando diferentes PIC uC. Solo puedo hacer que la pantalla muestre la mitad de los puntos (el lado derecho de la pantalla) en negro y el lado izquierdo en blanco/en blanco. Leí en Internet que significa que la pantalla no se está inicializando correctamente.

La pantalla es Tianma TM161A/B

    setData(0b00110000); // INIT
    strobeE();

    DelayMs(5);

    setData(0b00110000); // INIT
    strobeE();

    DelayMs(5);

    setData(0b00001111); // ON/OFF
    strobeE();

    DelayMs(5);

    setData(0b00000001); // CLEAR
    strobeE();

    DelayMs(5);

    setData(0b00000110); // ENTRY MODE
    strobeE();

void strobeE() {
    mPORTDSetBits(E);
    DelayMs(1);
    mPORTDClearBits(E);
}

He utilizado un analizador lógico, una sonda lógica y un multímetro para comprobar si las conexiones entre el PIC y el LCD son correctas. creo que lo son

Una imagen (mala) de mis tiempos en un analizador lógico;tiempos de un analizador lógico

Enlace a la hoja de datos

¿Qué estoy haciendo mal?

Intente aumentar todos los retrasos a quizás 10 ms. Hace algunos años, cuando intentaba iniciar una pantalla de este tipo, descubrí que los retrasos especificados en las hojas de datos generalmente eran demasiado cortos por alguna razón.
@AndrejaKo No hizo ninguna diferencia...
Estoy bastante seguro de que es un problema de tiempo en alguna parte, pero por el momento, no puedo averiguar dónde podría estar.
¿Está seguro de que la pantalla LCD funciona o si es su código? Estaba usando una placa prototipo NorthMicro y pensé que mi código era malo cuando, de hecho, el contraste estaba demasiado bajo para que se mostrara algo. Lo descubrí usando otro LCD de chicos con mi código.
@ChefFlambe Bueno, no puedo estar seguro de eso, a menos que pueda poner mis manos en la pantalla, he visto que funciona con algún código, pero tengo 3 pantallas (2 Tianma, 1 Displaytech). Uno de los Tianmas parece completamente muerto, y asumo que está roto. Otros dos muestran las barras negras. Sería muy mala suerte tener 3 pantallas rotas.
@AndrejaKo Eso es lo que pienso yo también. ¿Pueden los tiempos ser demasiado largos? La hoja de datos habla de tiempos como 50 us. 10 ms es 200 veces mayor. No menciona los tiempos máximos.
@varesa Podría ser, pero no lo creo. He visto tales pantallas operadas a mano usando botones y disparadores Schmitt. También recuerdo cuando solía manejar una pantalla tipo HD44780, usaba retrasos mucho más largos que en la hoja de datos y funcionó bien con ellos (pero no con retrasos cortos). No puedo decirte nada más que intentar experimentar con los retrasos.
El fragmento de código que publicaste no nos brinda suficiente información. ¿Dónde está su código de inicialización? ¿Estás conduciendo correctamente las líneas RS y RW? También podría publicar un diagrama de cableado, por si acaso.
@Armandas ¿De qué inicialización estás hablando? ¿FOTO? LCD? De todos modos, agregué un código un poco más largo ...
@varesa, debe mencionar qué puerto del PIC está conectado a qué pin en la pantalla LCD. Además, será útil alguna información sobre los registros TRIS del puerto correspondiente.
@abdullahkahraman Bueno, todos los puertos tienen salida, lo que se puede ver desde la pantalla de LA, que realmente funcionan. Puedo publicar el código completo si quieres
@varesa sería genial que publiques todo el código y el esquema. Si este proyecto incluye otras cosas además de controlar la pantalla LCD, creo que debería filtrar las cosas irrelevantes tanto en el esquema como en el código, antes de publicarlo.
@varesa si no tiene ningún esquema disponible, al menos publique una tabla que muestre las conexiones entre el PIC y la pantalla LCD. Por ejemplo: D0-RB0, RS-RB7, etc.
@abdullahkahraman ... Ahora lo hice funcionar, pero no tengo idea de cómo. ¿Tal vez había un cable suelto?
@varesa es imposible que entendamos lo que está pasando sin saber lo suficiente. Me alegro de que haya funcionado.
Muestras los datos y las líneas E. También está la línea R/W (que se puede vincular a W de forma permanente, pero aún debe hacerlo) y la línea C/D que no muestra en absoluto. ¿Maneja esas líneas correctamente? Y está el retraso de encendido hasta el primer comando.
@WoutervanOoijen RW y RS estaban (supuestamente) conectados a tierra (ahora el RS es impulsado por el uC), y la pantalla se encendió antes que el uC, por lo que no es necesario un retraso adicional. Creo que mi problema era RS o RW flotante (cable suelto)

Respuestas (2)

El problema con la pantalla que no se inicializaba se debía a un cable suelto. Era RS o RW, que quedó flotando.

Mi analizador lógico mostró que estaba en estado bajo, pero parece que el controlador de la pantalla LCD pensó lo contrario. (Diferente tipo de entrada)

Un consejo:
Verifique sus cableados: ¡no conectado! = entrada baja

Una sonda lógica, que emite un sonido de tono alto o bajo según la señal, me ayudó a encontrar el problema. No dio ningún tipo de sonido en absoluto en ese pin.

¿Podría publicar un diagnóstico más preciso del problema? Parece bastante vago ser útil en esta forma.
@clabacchio ¿Qué debo publicar? Cuando nada más funcionó, revisé mi cableado una vez más... No creo que ese fuera el problema original, pero es difícil saberlo ahora...
debe intentar llevarlo al estado anterior y replicar el error, si es posible. De lo contrario, para no ser grosero, tu respuesta no será útil para nadie más.
@clabacchio Lamentablemente, no tengo la placa de prueba y otras cosas disponibles, pensé en lo mismo...

Verifique su palabra "conjunto de funciones" (0b00110000). los bits 2 y 3 (N y F en la hoja de datos) establecen la forma de visualización. Si se configuran incorrectamente, parte de la pantalla no funcionará. Pruebe las 4 combinaciones.

@varesa - Eso es genial, ¡pero la gente todavía está tratando de ayudarte! Sería genial si respondieras tu propia pregunta para que los futuros lectores con el mismo problema puedan beneficiarse de tu solución.
@KevinVermeer Sí, pensé que había aceptado la respuesta de alguien, pero parece que no (ni siquiera había respuestas antes de esto). Anoche me dio flojera escribir uno...