Autor Tema: Generacion de efecto rainbow  (Leído 13293 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Generacion de efecto rainbow
« en: 02 de Junio de 2011, 17:01:33 »
Hola que tal foreros espero me ayuden a encontrar la solución a mi problema:

Estoy realizando un controlador de 8 salidas para leds strips,hasta el momento no tenia ningún problema pero,al momento de realizar
la librería, es decir los efectos que va a realizar el controlador me tope con el efecto llamado RAINBOW.

Aqui dejo el link de como es el efecto.

No tengo problema con el corrimiento del color pero no logro dar ese suavizado es decir;
degradar el color

Entonces mi pregunta es alguno tiene cualquier idea de como se puede realizar???
Cualquier sugerencia es bienvenida.. gracias

Este es mi código para realizar el efecto pero el corrimiento del color es abrupto.


// Efecto rainbow en las 8 salidas
void Rainbow (unsigned char vel,unsigned char bri,unsigned char Sen)
{
     unsigned char          a;
     static unsigned int    Time,Comp; 
     static unsigned char Paso;
     
     if (vel > 200)                               // Genera algoritmo de tiempo?
         Comp = ((int)vel*4);                // Multiplica y obtiene hasta 1 segundo de retardo
     else
         Comp = vel;                            // En caso contrario toma el valor actual

     Time ++;                                 
     if (Time >= Comp)                       // Cumple retardo de efecto
     {
         Time = 0;     
     
         for (a = 0;a <= 23;a ++)              // USO UNA TABLA PARA CARGAR LOS COLORES EN 8 SALIDAS ES DECIR (RGB1)....(RGB8)
               RGB[a] = RAIN[Paso][a];        // Genera color rainbow       
         
         Paso ++;
         if (Paso > 7)
             Paso = 0;
     }                                             
     Colores (24);                                   // Envia informacion a cpld               
}

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Generacion de efecto rainbow
« Respuesta #1 en: 02 de Junio de 2011, 17:33:56 »
ME PARECE QUE ESO ESTA HECHO CON PWM Y VA AUMENTANDO O DISMIYUNEDO GRADUALMENTE PARA DAR ESE EFECTO
"Nada es imposible, no si puedes imaginarlo"

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Generacion de efecto rainbow
« Respuesta #2 en: 02 de Junio de 2011, 17:39:37 »
Exactamente, en la descripción dice:
Citar
6 bit PWM, 27 channels driving 9 RGB LEDs using a PIC 16F88 at 8Mhz
No contesto mensajes privados, las consultas en el foro

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Generacion de efecto rainbow
« Respuesta #3 en: 02 de Junio de 2011, 17:44:12 »
Exactamente, en la descripción dice:
Citar
6 bit PWM, 27 channels driving 9 RGB LEDs using a PIC 16F88 at 8Mhz


no lei la descripcion, solo vi el video.

entonces tu como quieres regular la intensidad de tus leds?, al parecer no usas pwm, o no lo veo en tu codigo. explica mas o menos como lo haces tu para ayudarte
"Nada es imposible, no si puedes imaginarlo"

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Generacion de efecto rainbow
« Respuesta #4 en: 02 de Junio de 2011, 18:11:48 »
Eso es correcto no utilizo el pwm, es un poco difícil de explicar pero voy a resumir, yo utilizo un micro para poder procesar los datos DMX,asignar dirección etc. etc.
veras el controlador toma un máximo de 24 canales para obtener hasta 8 salidas.

La forma de generar el pwm de los leds es con un cpld,entonces lo que mi micro hace es procesar y enviar hasta 24 bytes a un cpld.
Lo que necesito es hacer el efecto rainbow pero desde "software".

Yo hice una tabla que es la siguiente:

// Tabla para generar efecto rainbow              /              /              /              /              /              /              /
const unsigned char RAIN[8][24] = {{0xff,0x00,0x00,0xff,0x80,0x00,0x80,0xff,0x00,0x00,0xff,0x00,0x00,0x80,0xff,0x00,0x00,0xff,0x80,0x00,0xff,0xff,0x00,0xff},     
                                                     {0xff,0x00,0xff,0xff,0x00,0x00,0xff,0x80,0x00,0x80,0xff,0x00,0x00,0xff,0x00,0x00,0x80,0xff,0x00,0x00,0xff,0x80,0x00,0xff},
                                                     {0x80,0x00,0xff,0xff,0x00,0xff,0xff,0x00,0x00,0xff,0x80,0x00,0x80,0xff,0x00,0x00,0xff,0x00,0x00,0x80,0xff,0x00,0x00,0xff},
                                                     {0x00,0x00,0xff,0x80,0x00,0xff,0xff,0x00,0xff,0xff,0x00,0x00,0xff,0x80,0x00,0x80,0xff,0x00,0x00,0xff,0x00,0x00,0x80,0xff},
                                                     {0x00,0x80,0xff,0x00,0x00,0xff,0x80,0x00,0xff,0xff,0x00,0xff,0xff,0x00,0x00,0xff,0x80,0x00,0x80,0xff,0x00,0x00,0xff,0x00},
                                                     {0x00,0xff,0x00,0x00,0x80,0xff,0x00,0x00,0xff,0x80,0x00,0xff,0xff,0x00,0xff,0xff,0x00,0x00,0xff,0x80,0x00,0x80,0xff,0x00},
                                                     {0x80,0xff,0x00,0x00,0xff,0x00,0x00,0x80,0xff,0x00,0x00,0xff,0x80,0x00,0xff,0xff,0x00,0xff,0xff,0x00,0x00,0xff,0x80,0x00},
                                                     {0xff,0x80,0x00,0x80,0xff,0x00,0x00,0xff,0x00,0x00,0x80,0xff,0x00,0x00,0xff,0x80,0x00,0xff,0xff,0x00,0xff,0xff,0x00,0x00}};                                 

La funcion realiza lo siguiente:

// Efecto rainbow en las 8 salidas
void Rainbow (unsigned char vel,unsigned char bri,unsigned char Sen)
{
     unsigned char        a,b;
     static unsigned int  Time,Comp; 
     static unsigned char Paso;
     static unsigned char Brillo = 255;
     static bit           Toggle;           
     
     if (vel > 200)                          // Genera algoritmo de tiempo?
         Comp = ((int)vel*4);                // Multiplica y obtiene hasta 1 segundo de retardo
     else
         Comp = vel;                         // En caso contrario toma el valor actual

     Time ++;                                // Contador de tiempo activo     
     if (Time >= Comp)                       // Cumple tiempo de seleccion
     {
         Time = 0;           
         for (a = 0;a <= 23;a ++)
              RGB[a] = RAIN[Paso][a];        // Genera color rainbow       
                 
         Paso ++;
         if (Paso > 7)
             Paso = 0;
             
         Colores (24);                       // Envia informacion a cpld                   
     }                                                       
}

Cada que cumple el retardo requerido entonces se incrementa el indice paso y se obtiene un nuevo valor en los 24 bytes es decir, el desplazamiento del color pero ahora requiero
por el momento los cambios son inmediatos es decir no se ve esa suavidad entre colores.

ya estuve analizando y parece que cada color se va degradando y a su vez empieza a tomar el color anterior y así sucesivamente.
esa es la parte que me interesa resolver
Gracias

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Generacion de efecto rainbow
« Respuesta #5 en: 02 de Junio de 2011, 18:33:59 »
Si explicara mejor como quiere hacer el efecto se te comprendera mejor, si usa DMX en este caso las señales te varian de 0 a 255, y para tu lograr variaciones que me imagino tu quiere hacer que los colores cambien en todas sus gamas, pues para eso no podra usar 24Byte, ya que la tabla como te da cuenta , cambia el o los colores a salto, por ejemplo  aqui la primera linea
0xff,0x00,0x00,0xff,0x80,0x00,0x80,0xff,0x00,0x00,0xff,0x00,0x00,0x80,0xff,0x00,0x00,0xff,0x80,0x00,0xff,0xff,0x00,0xff},   
aqui empieza maximo de color luego baja(0x00,0x00) aqui sube 0x80 en 40% y asi sucesivamente,  osea si quiere hacer mas variacion suave debe cambiar aqui y los tiempos .


Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Generacion de efecto rainbow
« Respuesta #6 en: 03 de Junio de 2011, 11:13:48 »
Saludos STK500 te comento mi micro controlador procesa la cadena DMX, el controlador que estoy diseñando tiene 8 salidas en grupos de 3 es decir (RGB1)(RGB2)....(RGB8).
por esa razón son 24 bytes,efectivamente cada byte tiene valores de 0-255,por otro lado el efecto es llamado por la librería que estoy implementando.

Por ejemplo un LEDPAR 64 de una marca x puede manejarse con 6 canales dmx. digamos canal 1 (R),canal 2(G) ,canal 3(B) ,canal 4(Dimmer),canal 5 (strobe/shutter) y finalmente canal 6(libreria).
La librería puede estar formada por varios efectos por ejem.

canal 6 0-31    nothing
canal 6 32-63  colormix
canal 6 64-95  fade in
canal 6 96-127 rainbow.

Entonces lo que se hace es jugar con los efectos dependiendo el valor de un canal dmx asignado para este ejemplo es el (6).
Olvidando el tema de como genero el periodo pwm de las salidas,tratare de explicar nuevamente.

La tabla que tengo arriba tiene 24 bytes que al cargase estos datos a las salidas rgb producen los colores del arcoiris rojo,naranja,amarillo,verde,azul,indigo,violeta pero como tengo 8 salidas al ultimo
le cargo un color magenta solo para que este prendida.

La variable (paso) sirve para realizar el corrimiento de colores.
Pero es aquí la parte de las sugerencias veras cada el contador paso se incrementa se desplaza el color pero de forma abrupta pues se debe ir degradando el color y a su vez incrementando el color anterior para que se vea el efecto en el video que les mostre.
saludos






Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: Generacion de efecto rainbow
« Respuesta #7 en: 03 de Junio de 2011, 14:16:04 »
Yo hice un efecto parecido con 3 leds RGB con 9 PWM al comienzo me salió que los colores cambiaban muy rápido a pesar que era que el PWM varia de 0 a 1000.
Con un retardo de 1ms en cada paso ahí se notaba el cambio de colores muy bien una función para cada color.
Ahora quería mejorar el efecto porque voy desde luz apagado al máximo de apagar de nueva lentamente con una formula lineal sale bien pero brilla mucho al inicio y quería una formula parecida a una campana de gauss así que prende suavemente y el punto mas brillante dura un poco más el efecto es mejor para la combinación de colores mejor resultado.
Use un microcontrolador con 9PWM por hardware asi que le podia agregar funciones extras como efectos por frecuencia de sonido y ritmo.

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Generacion de efecto rainbow
« Respuesta #8 en: 03 de Junio de 2011, 16:04:05 »
yo de C no Se , lo mio es mas a AVRBascom, pero hay cosas que no comprendo de tu explicacion,  tambien me esta comentando de un LEDPAR-64 (Receptor) estos ya vienen ajustados para sus efectos, lo que no es profesional, ya que los efectos lo hace el Controllador COMANDO (DMX512 Transmiter) que este lleva todos su efectos( Delay,contador,Strobo,Secuencias y muchos mas)ahora
por lo que creo tu tiene es PLC y veo que pone un Codigo donde estan un Algorimos y es ahi donde estan todos los efectos que te explico ahi arriba, y como dice nuestros amigos Cristian, para que los efectos sean suave debe poner retardos, yo tengo un projectos por ahi, hechos en AVRBascom que es un Arcoiris, aun no lo tengo pulido,porque lo quiero montar en una Lampara tipo Lunas, lo que me interesa saber es como comanda en realidad cada canale, porque cada canales debe tener un Fader(dimmer) con un tiempo preprogramado para tu poder lograr los efectos, o hacer exterior para trabajar con el tiempo, asi lo puede ajustar a diferente gustos.
yo siendo tu trabajaria con el Algorimos de las DATA, pero 24 byte lo veo muy pobre para conseguir ajuste largo y suave, debe pensar que el dmx512 trabaja con dusty de 0 a 255 y es aqui donde deberia trabajar con esta variable para cada canales.

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Generacion de efecto rainbow
« Respuesta #9 en: 03 de Junio de 2011, 19:00:59 »
gracias por sus respuestas y efectivamente lo que quiero es un algoritmo como el que comenta el amigo cristian pues parece que el efecto se logra
al tener un valor actual + un valor futuro con el cual se suma ó resta color hasta obtener el color deseado
en pocas palabras una función para la traslación de color.

Alguna idea de como implementarla en c??

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Generacion de efecto rainbow
« Respuesta #10 en: 13 de Junio de 2011, 10:32:07 »
Hola, por lo que veo en el video, nunca generan el "blanco", es decir, no encienden los 3 colores... yo pensaria como si fuesen 3 ondas desfasadas 120 (como en trifasica), donde el "cero" seria el valor 127 , y creo que los valores de encendidos, tendrian que ser "tablas" para linealizar o producir la campana de gauss...
Entonces, cada color, seria un contador, que se incrementa luego de un retardo, luego, conciderar que 360grados, corresponden a un valor de 255, para 120-->x, que seria el valor que tendrias que cargar al contador siguiente..., el tercer contador, comenzaria en 240grados..

Saludos!
Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Generacion de efecto rainbow
« Respuesta #11 en: 16 de Junio de 2011, 19:44:00 »
¡¡ eso, eso, eso, eso es TODOPIC    :P  !!  :P  :mrgreen:

Muchas gracias Norberto mira te comento que si efectivamente algo ya había platicado con un compañero de trabajo sobre la forma del degradado.
También te informo que hice algo parecido al efecto incrementando cada grupo RGB al color futuro y decrementando el color actual de cada grupo RGB.
y aun cuando se obtiene el suavizado no obtuve el mismo resultado que del video.

Nuevamente te agradezco la respuesta y en cuanto aplique tu técnica subo los resultados
Saludos Cordiales

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Generacion de efecto rainbow
« Respuesta #12 en: 22 de Junio de 2011, 11:15:29 »
Bueno después de corregir el programa parece que obtuve el efecto deseado y les doy las gracias a los compañeros con sus
comentarios.

Les dejo un pequeño video de lo que hace este controlador de 8 salidas para dmx.
Actualmente estoy terminando el software por eso es una telaraña de cables.

Saludos Cordiales


Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Generacion de efecto rainbow
« Respuesta #13 en: 23 de Junio de 2011, 17:50:06 »
Felicitaciones Chipcon, se ven mejor que el video original!!!, lograste muy buenos efectos!!  :-/
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Generacion de efecto rainbow
« Respuesta #14 en: 25 de Junio de 2011, 19:02:33 »
 :mrgreen: Gracias por su apoyo ya que todo estuvo en la idea que me proporcionaron.
Desafortunadamente el desarrollo es para mi empresa por tal motivo no subo informacion del controlador.

Pero dejenme  revisar y me voy a poner a manos con un proyectito completo de otro fixture DMX.
para toda la comunidad apasionada jejeje
¡¡Saludos Cordiales!!


 

anything