Conducción de una pantalla de 24 BPP en modo 5:6:5

Tengo una pantalla TFT que acepta datos de visualización de 24 bits por píxel (BPP), pero el mecanismo de mi conector solo admite el modo 5:6:5.

¿Cuál es la forma preferida de hacer que la pantalla suelte los datos de píxeles adicionales y use los datos de 5:6:5?

¿Debería desplegar las líneas de datos no utilizadas?

Respuestas (3)

Hay dos enfoques comunes. Un enfoque es conectar todos los bits no utilizados a un valor fijo (normalmente cero). Esto causará una ligera pérdida de brillo, pero realmente no vale la pena preocuparse por un 3%. La otra es conectarlos a los bits superiores, en secuencia, de modo que un valor de color de 5 bits se conecte como [D4 D3 D2 D1 D0 D4 D3 D2]. Esto hará que cada cuarto paso de brillo aumente el brillo de píxeles en 9 en lugar de 8, y utiliza todo el rango dinámico.

Sin embargo, al decidir sobre un método, uno debe considerar qué software esperará. Prefiero 5:5:5 a 5:6:5 (usando el bit superior como algo así como una clave de transparencia) porque los valores con R=G=B tendrán todos la misma crominancia y tono. Con una pantalla de 5:6:5, el software que busque una escala de grises uniforme podría usar (n,2n,n) para todos los valores (suponiendo que el blanco sea 31,62,61), o podría agregar 1 a los valores verdes para n>=16. Si el software simplemente va a copiar el bit superior del valor "verde" al bit inferior, puede lograr mejores resultados con [D5 D4 D3 D2 D1 D0 D4 D3] o [D5 D4 D3 D2 D1 D5 D4 D3] de lo que obtendría con [D5 D4 D3 D2 D1 D0 D5 D4] (que daría la rampa de 63 pasos más uniforme). Si el software simplemente va a dejar el bit inferior en blanco, lo mejor sería [D5 D4 D3 D2 D1 D5 D4 D3].

Buena respuesta completa con razonamiento y ejemplos.

Para un rango de brillo máximo, conecte los lsbits no utilizados al bit más bajo de su fuente. Simplemente conectarse a 0 limitará ligeramente el brillo máximo.

Una solución muy simple sería conectar sus buses r/g/b a los bits más significativos de los buses de visualización correspondientes, es decir, entrada R4 -> visualización R7, ..., entrada R0 -> visualización R3, y de manera similar para otros subpíxeles. De esta manera, al menos puede conservar la mayor parte del rango dinámico de su pantalla. Los bits restantes (menos significativos) se pueden conectar a 0 o 1 como desee. Si todos son 0, perderá algo de rango dinámico en la parte superior, pero lo mantendrá en la parte inferior (cerca de 0) y viceversa. Esta transformación se puede expresar como

R = R << 3 + (0...7);
G = G << 2 + (0...3);
B = B << 3 + (0...7);

La calidad de la imagen no va a ser muy buena, pero esa es una limitación que no puedes superar (no puedes crear información que no existe).

¿Sería la solución ideal obtener una pantalla de 16bbp, en lugar de una de 24bbp?
@James: por supuesto, si es posible.