Controlador LED tlc5947 sin ocupar constantemente pines uC

Estoy trabajando en el chip TLC5947 para controlar 24 Leds RGB para crear diferentes patrones con ellos. Mi preocupación es que tengo que seguir dando órdenes al pin SIN, SCLK, XLAT del microcontrolador en cada bucle para que mi patrón se repita una y otra vez.

Mi microcontrolador también está haciendo otras cosas, como hablar con sensores, controlar periféricos externos, etc.

¿Quería saber si hay alguna forma/hackeo en hardware/software por el cual puedo repetir la secuencia usando el controlador LED IC mientras mantengo mi microcontrolador desocupado?

Los microcontroladores son baratos. ¿Por qué no dedicar uno a secuenciar los LED?
Respuesta simple: use TLC59116 en lugar de TLC5947. Interfaz I2C en lugar de una extraña interfaz de flujo de datos constante.
¿Qué arduino es? Con los MCU contemporáneos, es posible hacer que se ejecute completamente en segundo plano, utilizando SPI con DMA en modo circular continuo.
Estoy de acuerdo con @Majenko, ¡me encanta el TLC59116!
@Majenko y KyranF, soy fanático del TLC59711 (y escribí una biblioteca para él). Si bien la interfaz no es I2C, la velocidad de transferencia de datos es de hasta 10 MHz y hay placas Adafruit. :)

Respuestas (2)

La forma habitual de manejar este tipo de cosas es con una interrupción periódica del temporizador. Digamos que su bucle debe repetirse cada 50 ms, configure un temporizador de hardware para interrumpir el procesador, actualice su pantalla y regrese de la ISR (rutina de servicio de interrupción). Si su estilo de codificación actual incluye desperdiciar miles de millones de ciclos en bucles de retardo, se deshace de eso. Lo más probable es que esté utilizando un SPI de hardware rápido para hablar con el chip, por lo que generar 72 bits de datos de encendido/apagado no llevará mucho tiempo, tal vez <100useg, por lo que con una interrupción de 50ms, el 99,8% del ancho de banda de su procesador todavía está disponible (prácticamente 'desocupado' a efectos prácticos)

Para las "otras cosas" que está haciendo, su procesador parece ser un poco (dependiendo de cuánto tiempo tome su ISR) más lento y un poco más entrecortado en su funcionamiento (a veces desaparece un poco). Por lo general, no es demasiado difícil codificar eso.

+1 por no desperdiciar "trillones de ciclos en bucles de retardo", un problema demasiado común. El uso excesivo de rutinas de retraso fijo descuidadas puede deberse a todas las rutinas de ejemplo simples que a menudo vienen con los compiladores, etc. Pueden funcionar de forma independiente, pero crean problemas al intentar integrarlas con otra funcionalidad.
@Tut También creo que es la terrible calidad del código de ejemplo que se les da a las personas, que intenta mostrar una pequeña parte de la funcionalidad, por lo que no les importa diseñar retrasos adecuados o mostrar el uso adecuado del tiempo.
Gracias por las respuestas rápidas chicos, la interrupción de hardware es lo que estaba intentando como siguiente paso. No más rutinas de retraso en el código;)
@Spehro, si bien su respuesta es un buen consejo en general , es menos bueno para el TLC5947, que no necesita una entrada periódica del microcontrolador, vea mi respuesta aquí.
@UlrichStern Tomé de la pregunta de que el patrón no era estático: cambiar el patrón con el tiempo (repetir durante un período más largo) requerirá volver a escribir y habrá un tiempo asociado con eso.
@Spehro, volví a leer la pregunta y es posible que tengas razón. Se necesitan 12*24 = 288 bits para programar el chip, y el SPI de hardware que sugirió puede transferirse a aproximadamente 4 Mbit/s en un Arduino Uno (vea mis medidas ).

Estaba considerando el TLC5947, y su hoja de datos afirma que tiene "repetición de pantalla automática", por lo que el PWM debería funcionar sin una entrada periódica del microcontrolador. También eché un vistazo rápido a la biblioteca Arduino de Adafruit para el TLC5947 y no vi ninguna interrupción, etc.

Pero terminé sin usar el TLC5947 porque tiene "problemas de parpadeo" y usé el TLC59711 en su lugar, para el cual incluso escribí una biblioteca . Para obtener detalles sobre el parpadeo, consulte mi publicación de Disqus .