Estoy usando un controlador Allegro 6280 PWM LED para un proyecto. Este es un pequeño IC fresco, excepto por el hecho de que es un registro de entrada de 31 bits. Esto no es un problema si simplemente recorro mis 31 bits y configuro los estados de los pines en consecuencia, pero quiero usar el SPI incorporado de la atmega para acelerar las cosas un poco (el 6280 requiere una fuente de reloj externa para su bit de 10 bits ciclo PWM largo).
El registro de 31 bits se ve así en mi aplicación donde R, G & B indica los valores PWM de 10 bits para los LED adjuntos.
0BBBBBBBBBBGGGGGGGGGGRRRRRRRRRR
Estos registros de turnos son desechables, por lo que he creado una lista enlazada para representarlos:
struct Pixel {
uint16_t red;
uint16_t green;
uint16_t blue;
Pixel *next;
};
Por lo tanto, la idea es establecer el pin de cierre bajo, iterar a través de todos los píxeles y luego, después de enviar el último, establecer el bloqueo alto para bloquear los datos en cada registro. Esto parece fácil, excepto que debido a la longitud desigual del registro, tengo que construir un código de aspecto desagradable para poder volver al principio de manera que nunca envíe ningún bit vacío. Además, es posible que el pestillo deba ocurrir después de que se transmita un número arbitrario de bits, no solo el último.
¿Alguien tiene alguna idea sobre cómo hacer esto, o simplemente estoy ladrando el árbol equivocado y reteniéndome manualmente con los estados del pin?
Gracias.