Me siento con ganas de escribir un poco así que lee, que me ha salido una parrafada cojonuda.
Lo que dice culebrasx de emplear un micro parece lo más versatil y profesional además de apasionente. Una opción barata puede ser el incombustible pic16f84. No tiene PWM por lo que hay que generarla por software, pero es muy sencillo.
El espectro lo puedes generar con 3 LED uno conectado a cada puerto del micro, con su electrónica necesaria pues el micro no podrá alimentar 3 LED de alta luminosidad. Estos 3 LED forman el espacio de colores RGB (Red Green Blue). Cada uno de estos 3 colores puede tener un valor entre 0 y 255, de modo que si queremos mostrar el color rojo, se representará así: (255,0,0), es decir, máximo de rojo y nada de verde o azul. Siguiendo la regla llegamoa que el verde es (0,255,0) y el azul (0,0,255) el blanco sería (255,255,255) el verde intenso sería algo parecido a una mezcla entre azul y verde (0,255,255). Estos valores los puedes encontrar en cualquier programa de diseño gráfico tipo Photoshop.
Concretamente el PIC 16F84 tiene un timer que hace cuentas de 0 a 255 (o era al revés, no me acuerdo, pero la idea es aproximadamente la misma), de modo que ese timer te dará una especie de escalera 0 1 2 3... 254 255 0 1 2
Imagina que quieres un color muy próximo al rojo (250,3,5) Solo necesitas un bucle que compruebe el valor del temporizador y el de las variables R G y B
¿Es rojo mayor que el temporizador?
Si la respuesta es si, entonces sigue encendido
Si la respuesta es no, esntonces rojo se apaga
¿Es Verde mayor que el temporizador?
Mismas conclusiones
Y lo mismo para azul
Haremos el ejemplo anterior (250,3,5)
INICIO el temporizador vale 0 entonces los 3 LED están encendidos.
El temporizador vale 1 los 3 LED están encendidos.
El temporizador vale 2 los 3 LED están encendidos.
El temporizador vale 3 el led verde se apaga, ya solo quedan encendidos los LEDs Rojo y azul
El temporizador vale 4 siguen encendidos rojo y azul
El temporizador vale 5 el LED azul se apaga, ya solo queda encendido el LED rojo.
El temporizadot vale 6 el led rojo sigue encendido.
..........
El temporizadot vale 249 el led rojo sigue encendido.
El temporizadot vale 250 el led rojo se apaga
El temporizadot vale 251 no hay ningún LED encendido
252 IDEM 253 IDEM .....255 IDEM y el contador / temporizador vuelve a la cuenta 0, así se encienden los 3 LEDs y volvemos a comenzar el ciclo
**NOTA: Date cuenta de que el espacio de colores es tridimensional y por ello, si quieres recorrerlo automáticamente una opción sería seguir esta secuencia de colores (0,0,0) (0,0,1) (0,0,2)...(0,0,255) (0,1,0) (0,1,1) (0,1,2)....VAMOS, un recorrido normal y corriente que tendría un total de 16.777.216 iteraciones si te parecen muchas puedes ir saltándote colores, de 10 en 10 ó de 50 en 50
NOTA2: Con 3 555 (uno para cada LED) puedes hacer también las pwm, pero queda un poco más chapucero.