Matriz. |
Tras examinar exhaustivamente los cronogramas producidos por el micro, el problema consistía en proceso de cambio de fila. Este, al principio, seguía el siguiente esquema:
- Cambio de fila
- Envío de datos de la nueva fila
- Activado de señal BLANK para resetear salidas y de señal XLAT para escribir los nuevos datos.
- Desactivado de XLAT y BLANK.
La primera opción es modificar la rutina de interrupción para que sigua el siguiente esquema:
- Activado señal BLANK
- Envío de datos de la nueva fila
- Activado de señal XLAT
- Cambio de fila
- Desactivado de señal XLAT y BLANK
Cronograma, con errores de temporiz. |
- En él, tenemos la señal GSCLK, generada por el Timer2, de forma continua, a 8 Mhz y que se encarga de incrementar los contadores.
- El timer 1 interrumpe cada 4096 ciclos de GSCLK y se encarga de activar las señales BLANK, XLAT y transmitir por SPI, además de cambiar de fila.
- Las salidas del TLC5940 funcionan cuando la señal BLANK está a nivel bajo, y mientras no se hayan recibido más de 4096 ciclos de GSCLK tras la última bajada de BLANK.
La solución más básica es aumentar el número de ciclos de GSCLK que pasan entre cada interrupción para el cambio de fila, de forma que quepan 4096 ciclos (512 microsegundos) entre cada pulso de BLANK. Para realizarlo de forma aproximada, hemos medido dicho tiempo con el osciloscopio, y ajustado el valor del registro de captura del Timer (ICR1) para que coincida.
Esto, evidentemente, conlleva una perdida en la velocidad de refresco, quedandose en 200 Hz (en vez de los 244 Hz originales), ya que se necesitan 1120 ciclos más de GSCLK para que todo cuadre.
Tras esta corrección, la parte de control de la matriz podría haber quedado así, pero encontramos una solución mejor para optimizar el refresco.
El chip TLC5940 admite recibir datos durante un ciclo de PWM, y solo escribe los valores cuando llega la señal XLAT, luego, podemos transmitir los valores de la nueva fila mientras se está iluminando la anterior.
Resulta el siguiente esquema:
- Activar señal BLANK
- Activar señal XLAT
- Cambio de fila
- Desactivado de BLANK y XLAT, la matriz empieza a iluminarse
- Envio de los datos de la siguiente fila.
Con esto, creemos finalizado el diseño de la parte de la matriz RGB, aunque posteriormente se podría implementar la lectura de la flag de error XERR, dot correction o lectura del registro de estado, pero no son imprescindibles para el proyecto.
Cuando acabemos la temporización del micro, intentaremos comproblar con un analizador lógico que toda la temporización funciona de forma adecuada.
No hay comentarios:
Publicar un comentario