Ok, a grandes rasgos este es el procedimiento que en algun momento usé utilizando C y PIC18:
-Se hace una barra de leds con toda su electronica necesaria para prender cualquier convinacion. Es decir debe ser posible prender varios led simultaneamente o individualmente.
-Se pone un sensor para el punto 0
-Se programa de la siguiente manera:
Se deben definir coordenadas polares, se puede dibujar para darse una idea: un circulo dividido angularmente y a la vez radialmente, es decir dibujan un criculo dividido en varias partes cada n grados; a su vez hay que dividirlo por medio de circulos menores cada ciertos centimetros o milimetros segun la escala que ocupen. Este dibujo debe corresponder con el diseño real.
Utilizaremos ese grafico para dibujar pixeles y asi formar imagenes. Esto puede ser manejado de manera estatica o dinamica, es decir, pueden ser imagenes fijas o imagenes creadas en tiempo de ejecucion.
Ahora crearemos un "bufer" de memoria RAM que no es mas que un arreglo donde pintaremos esa imagen (de manera virtual). Se deben crear funciones para escribir pixeles o bitmaps o texto, pero siempre interactuaran sobre ese bufer, no lo haran directamente hacia los LED. Toda imagen, pixel, o texto que se quiera mostrar se hará escribiendo en ese bufer. El modo en que estará estructurado depende de cuantos led se manejan, si es RGB y del propio estilo de programación de cada quien. Lo importante es guardar una estructura bien definida para escribir, pues estos datos serán leidos por otra parte del programa para recuperar la imagen y asi poder "barrerla"
Arrancamos un temporizador, preferentemente de 16 bits (un TIMER del PIC), este nos servirá para medir el tiempo que tarda en dar una vuelta nuestra tira de led. Entre mas veloz se incremente este TIMER mejor resolucion podremos manejar (los calculos dependen del hardware)
Activamos dos interrupciones independientes, una se activara con el sensor de vuelta completa y en su rutina capturamos el valor entregado por el timer y ese valor lo dividimos entre el numero de posiciones angulares que definimos en nuestro diagrama. El resultado se ocupa para definir otro temporizador diferente que activara otra interrupcion cuya rutina se encargará de mostrar los pixeles correspondientes al angulo actual segun un indice que se incrementara por cada llamada a dicha rutina y se resetea cada que es detectado el punto cero. Para activar dichos pixeles debemos ser capaces de tomar los datos del bufer mencionado anteriormente.
En pocas palabras, se requiere cierta multitarea. La funcion principal (main() en C) contiene llamadas a funciones de escritura (que escribiran bits o bytes en el bufer); Una interrupcion que medirá el tiempo de la vuelta completa y una segunda interrupción que activara los leds correspondientes al angulo en que se encuentra la tira de LED
Espero haberme explicado bien.