Paso 3: El controlador de pantalla qué hará.
Como antes, los registros de desplazamiento ahora se juntan como sigue:
R0 -> G0 -> B0 -> R1 -> G1 -> B1
Cada una de las entradas es de 32 bits. La entrada se coloca en R0. Si ahora nos empuja 32 * 3 * 2 bits vía SPI a la pantalla, llenamos de hecho esas dos líneas. Basado en el cableado, vamos a presionar B1, G1, R1, B0, G0, R0, como lo vamos a presionar fin más tarde serán los primeros.
Imagina que no hay tonos de colores, ahora debemos recorrer todas las líneas haciendo lo siguiente una y otra vez:
- En coche salida enable (OE) para desactivar el LED
- Clava los GPIO para la selección de línea
- Datos en los registros de desplazamiento a las salidas de cierre tirando STB de bajo
- En coche salida enable (OE) baja para activar el LED
- Iniciar transferencia SPI para cargar la siguiente línea en los registros de cambio
Esto se referencia más adelante como una exploración de la estructura.
En nuestro caso asumimos que la transferencia SPI a terminar antes de que Flash en la siguiente línea. Esto se puede calcular muy fácilmente, cuando por ejemplo, utilizando un supuesto caso mejor (velocidad de bits SPI = reloj de píxel).
Para activar ahora diferentes tonos de colores (y así ser capaces de mezclar los colores un poco más sofisticados) necesitamos encender LEDs y apagado bastante rápido. En este ejemplo usaremos 4 bits para codificar los valores de intensidad. Hace para 15 intensidades + off. Para cada análisis de' marco' (véase arriba), tenemos una máscara de bits que comparar a cada valor de píxel de 4 bits y decidir si debemos habilitar el LED o no. El pseudo código es el siguiente:
La BAM_MASK corresponde por ejemplo a la representación binaria de valor ctr + 1 y debe tener las siguientes propiedades:
- Si pixel_value es 0, entonces no LED estará encendido sobre todo ' exploración de marco (dada por la lógica o)
- Si pixel_value es 1, entonces 15 ciclos, el LED será de una vez
- ...
- Si pixel_value es 15, entonces 15 ciclos, el LED siempre será en
Como nota al margen: haciendo la máscara con el 'y lógica' fue una decisión aleatoria en lugar de usar 'compare igual', como ahorra hacer enmascarar operaciones con cada valor en el extremo.
La tasa de 'scan marco' puede calcularse ahora como:
15384Hz / 16 líneas / 15 niveles de intensidad = 64,1 Hz
Sólo tenemos 15 niveles de intensidad, como el negro se da como siempre off.