Gráficos LCD: ¿cómo evitar el parpadeo?

0

Tengo una pregunta genérica sobre los LCD gráficos con controladores incorporados y RAM. Observo que cada vez que cambio una gran parte de la pantalla con una nueva imagen o un objeto (o simplemente borro toda la pantalla con un nuevo color), hay un parpadeo notable. Hay alguna manera de evitar esto? Estoy usando el modo 8080 para actualizar la memoria RAM del controlador de pantalla. El problema se produce porque la frecuencia de actualización de la pantalla LCD es más rápida que la velocidad que estoy escribiendo en la RAM de Diaplay.

Me imagino que debería ser fácil de hacer si hubiera una opción para actualizar solo la RAM del controlador (mientras que el panel LCD conserva la pantalla anterior) hasta que establezca un poco para decirle al controlador que la actualización de RAM está completa. Una vez que está configurado, el controlador debe enviar el contenido de la RAM en la pantalla LCD física. ¿Hay alguna manera de lograr algo como esto? Los controladores a los que me refiero son de la clase de HIMAX 8232 que vienen incorporados a los LCD.

    
pregunta eGovind

1 respuesta

3

Si bien algunos controladores de pantalla causan parpadeo cada vez que se escriben, este controlador en particular no debería tener ese problema. Supongo que está teniendo parpadeo porque en cada actualización está escribiendo partes de la pantalla con un valor y luego las vuelve a escribir con otro. Para evitar el parpadeo, no hagas eso. Averigüe cuál debe ser el valor correcto para cada píxel antes de escribirlo. Si su pantalla consta de varios rectángulos no superpuestos que podrían moverse, y si actualmente está borrando toda la pantalla y luego dibujando sus objetos rectangulares, puede mejorar tanto el rendimiento como la apariencia borrando solo las regiones donde no hay objetos. se supone que aparece; Dependiendo de la aplicación, es posible que pueda mejorar aún más el rendimiento borrando solo las regiones donde existían los objetos, pero que simplemente "desaparecieron".

Addendum Al observar la imagen suministrada, lo que sucede es que los píxeles de la pantalla se escriben en una dirección (supongo de arriba a abajo), y la pantalla se está escaneando en otra dirección (me imagino que de izquierda a derecha). Esto tiene el efecto de que la cantidad de datos de pantalla que se han escrito cuando el hardware comienza a escanear un marco es mucho menor que la cantidad que se ha escrito en el momento en que la exploración del hardware llega al borde derecho. En consecuencia, las líneas dibujadas cerca del borde derecho de la pantalla tendrán más datos dibujados que las líneas cerca de la izquierda.

Si dibuja datos en la pantalla en una dirección perpendicular a la pantalla, obtendrá el tipo de líneas diagonales que observa aquí. Si dibuja datos linealmente en una dirección que es paralela a la exploración de la pantalla a una velocidad que es más lenta que la velocidad de exploración, habrá un "rasgón" observable cada vez que la exploración de la pantalla supere su dibujo. Si dibuja datos a una velocidad que es más rápida que la velocidad de escaneo, y lo hace de una manera que está sincronizada con el escaneo de la pantalla, puede evitar cualquier tipo de artefacto de la pantalla, pero no he observado ningún LCD de color (y muy pocos monocromos) con una interfaz de CPU que permitiría a una CPU conectada sincronizar las actualizaciones con el escaneo de la pantalla. Eso es muy malo, porque tal habilidad permitiría actualizaciones de pantalla más limpias de lo que sería posible de otra manera. Una técnica fácil y agradable que se utilizó en muchos juegos de arcade diseñados por Eugene Jarvis a principios de la década de 1980 fue hacer que el proceso de escaneo de la pantalla interrumpiera el procesador cuando el escaneo llegara a la mitad de la pantalla y nuevamente cuando llegara al final. Cuando el escaneo llega al centro de la pantalla, todo lo que se encuentra por encima de la línea de escaneo actual puede actualizarse de manera segura sin parpadeo, siempre que las actualizaciones ocurran antes de que el escaneo llegue al final. Cuando el escaneo llega a la parte inferior, todo lo que está por debajo del medio puede actualizarse sin parpadeo, siempre que las actualizaciones ocurran antes de que el escaneo alcance el medio. Parece que este chip controlador proporciona una función para emitir un pulso cuando el escaneo alcanza un punto específico ("línea de efecto de rasgado") pero supongo que la salida probablemente no esté conectada a un pin en el conector de la pantalla.

No sé exactamente qué está intentando mostrar, pero le sugiero que trabaje para asegurarse de que cada vez que se escriba un píxel se escriba con su color "final" o, en su defecto, minimice la cantidad de tiempo entre la primera y la última escritura en cada píxel. Por ejemplo, si no tiene suficiente memoria para almacenar temporalmente en el búfer, puede borrar 32 filas de píxeles y luego dibujar todo lo que debería aparecer en esas 32 filas, luego borrar las siguientes 32 filas, dibujar todo lo que debería aparecer allí. etc.

Addendum 2

Si tiene un bus de datos de 16 bits que se conecta tanto a la pantalla como a la SRAM, y si tiene al menos un bit de dirección que sale de la CPU que no se conecta a la RAM (por ejemplo, A18), una técnica útil sería conectar ese bit de dirección adicional con un poco de lógica para que cualquier acceso de lectura o escritura sea manejado por la SRAM como de costumbre, pero si ese bit es "1" también se activará la luz estroboscópica de "escritura de datos" en la pantalla . Si lo hace, leer una palabra de RAM en su dirección normal se comportará como lo haría normalmente, pero agregar 0x00040000 (suponiendo que use A18) a la dirección y luego realizar la lectura causaría que esa palabra de datos se envíe directamente desde la RAM a la pantalla (el procesador también leería los datos, pero no tendría que hacer nada con él). Si no tiene un bit de dirección adicional disponible, hay otras técnicas que podría usar en su lugar, pero tendría que saber más sobre su hardware para saber qué recomendar.

    
respondido por el supercat

Lea otras preguntas en las etiquetas