TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: elfrancho en 08 de Agosto de 2011, 15:52:36

Título: 3 PWM por soft para leds RGB (no ticks)
Publicado por: elfrancho en 08 de Agosto de 2011, 15:52:36
Hola amigos, estoy medio loco por hacer un control RGB lo más efectivo posible...

Ya hice un control RGB pero por "ticks" es decir. elegí un periodo de 10mS lo dividí por 100  = 100uS

Configuré un timer para que llame a una interrupción cada 100uS (incremento variable "ticks")

Entonces si tenía R=1% G=50% y B=100%

El rojo se apaga en la primera interrupción, le verde en la nro 50 y el azul siempre queda prendido.

Ahora quiero optimizar el soft para no desperdiciar tanto tiempo con interrupciones innecesarias.
La idea es ordenar el de menor a mayor por orden de apagado e ir configurando el timer.

Ejemplo: si tengo R=10 G=40 y B=70

1ro: Enciendo TODOS R G y B
2do: configuro el timer a 10*100uS = 1mS
3ro: cuando me llama la interrupcion apago el ROJO y configuro el timer en (40-10)*100uS = 3mS
4to: cuando me llama la interrupcion apago el Verde...
5to: .... + de lo mismo...


Bueno para hacer esto
1ro: tengo que ordenarlos de menor a mayor y no se como ordenarlo en variables.
2do: tengo que resolver como hacer cuando tengo 2 o 3 colores iguales por ejemplo R0 G0 B50

A ver a quien se le ocurre algo


SALUDOS !!!!!!



Título: Re: 3 PWM por soft para leds RGB (no ticks)
Publicado por: MLO__ en 08 de Agosto de 2011, 17:22:05
Hola.

Pues si es ordenar datos, puedes usar el metodo de burbuja ...

Saludos
Título: Re: 3 PWM por soft para leds RGB (no ticks)
Publicado por: elfrancho en 08 de Agosto de 2011, 20:02:04
Hola.

Pues si es ordenar datos, puedes usar el metodo de burbuja ...

Saludos


mmm claro es un buen metodo, pero como hago luego para realionar los numero valores ordenados con su PIN correspondiente?

Se me hace que hay que tranajar con punteros? o estoy equivocado?

Gracias, saludos
Título: Re: 3 PWM por soft para leds RGB (no ticks)
Publicado por: jgpeiro06 en 09 de Agosto de 2011, 08:38:40
Hola elfrancho

yo creo que puedes crear una estructura que contenga el un campo "color" y un campo "valor", ordenarlas utilizando el valor y luego en la ISR utilizar el color para saber a que led corresponde...

algo mas o menos asi:

Código: C
  1. struct sLED{
  2.         uint8_t color; 
  3.         uint8_t value;
  4. };
  5.  
  6. struct sLED _RGB[3] = {{0,0},{1,0},{2,0}};
  7.  
  8. TIMER_IRQ( void ){
  9.         // read _RGB
  10.         // set/reset GPIOs
  11.         // calc next step
  12.         // configTimer
  13. }
  14.  
  15. void sort( struct sLED *psLED, uint8_t size ){
  16.         uitn8_t i, j;
  17.         struct sLED tmp;
  18.         for( i = 0 ; i < size-1 ; i++ ){
  19.                 for ( j = 0 ; j < size-1 ; j++ ){
  20.                         if( psLED[j].value < psLED[j+1].value ){
  21.                                 tmp = arreglo[j+1];
  22.                                 arreglo[j+1] = arreglo[j];
  23.                                 arreglo[j] = tmp;
  24.                         }
  25.                 }
  26.         }
  27.         return;
  28. }
  29.  
  30. int main( void ){
  31.         struct sLED RGB[3];
  32.         configTIMER( 10_mS );
  33.         configGPIO( PIN_RED | PIN_GREEN | PIN_BLUE );
  34.         while(1){
  35.                 setColor( &RGB );
  36.                 sort( &RGB, 3 );
  37.                 TimerIRQ( disable );    // Con estas 3 lineas y la variable global _RGB evitamos que la TIMER_IRQ
  38.                 _RGB = RGB;                             // lea un valor erroneo si se produce mientras modifiamos el valor de RGB
  39.                 TimerIRQ( enable );             //
  40.                 delay( 100_mS );
  41.         }
  42.         return 0;
  43. }

Título: Re: 3 PWM por soft para leds RGB (no ticks)
Publicado por: elfrancho en 09 de Agosto de 2011, 10:04:32
Hola elfrancho

yo creo que puedes crear una estructura que contenga el un campo "color" y un campo "valor", ordenarlas utilizando el valor y luego en la ISR utilizar el color para saber a que led corresponde...

Muchas gracias jgpeiro06, voy a estudiar un poquito esto de las estructuras que nunca las he utilizado y voy a probar hacerlo de esta manera.

Saludos !
Título: Re: 3 PWM por soft para leds RGB (no ticks)
Publicado por: elfrancho en 11 de Agosto de 2011, 17:44:26
Desisto, creo que de esa forma voy a tardar más tiempo calculando todo eso que haciéndolo por ticks... jajaja

Bueno...

Saludos  y gracias !