Autor Tema: Control 28 Led RGB independientes  (Leído 12865 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado kobra

  • PIC10
  • *
  • Mensajes: 5
Re: Control 28 Led RGB independientes
« Respuesta #15 en: 19 de Junio de 2011, 07:06:09 »
Buenas Strepto, te comento algo similar que me hizo falta y practicamente el proyecto es igual. Para evitar poner un dipswitch agregue un comando para dispositivos nuevos, sencillamente leo el primer byte de la eeprom, cuando es nuevo es 'FF',  pues al recibir comando de nuevo dispositivo si es FF pues lo cambio por el valor enviado, en tu caso podria ser 'N12' Nuevo con direccion 12. Asi me da de sobra para 255 dispositivos que son mas que suficientes para mi, sino hay mas memoria. La unica pega es que tienes que ir conectandolos uno a uno y mandar la orden de nuevo, pero como igualmente se conectan uno a uno pues....

Espero te sirva de ayuda....

Desconectado Strepto

  • PIC16
  • ***
  • Mensajes: 159
    • Pictronics
Re: Control 28 Led RGB independientes
« Respuesta #16 en: 19 de Junio de 2011, 10:15:43 »
Buenas Strepto, te comento algo similar que me hizo falta y practicamente el proyecto es igual. Para evitar poner un dipswitch agregue un comando para dispositivos nuevos, sencillamente leo el primer byte de la eeprom, cuando es nuevo es 'FF',  pues al recibir comando de nuevo dispositivo si es FF pues lo cambio por el valor enviado, en tu caso podria ser 'N12' Nuevo con direccion 12. Asi me da de sobra para 255 dispositivos que son mas que suficientes para mi, sino hay mas memoria. La unica pega es que tienes que ir conectandolos uno a uno y mandar la orden de nuevo, pero como igualmente se conectan uno a uno pues....

Espero te sirva de ayuda....

La verdad es que no es mala idea, pero tambien busco que varios equipos puedan llegar a tener una misma direccion de ser necesario, con lo que los dipswitch no es mas que un momento. De todas formas, tengo una pregunta, la primera vez que pones en marcha el sistema, en mi caso tendria que pasar por los 28 esclavos uno a uno para darles su direccion mediante comando N__ no? Por que siempre habra un momento, en el primer arranque en el que todos sean nuevos dispositivos, vamos, que sean "FF". Esto como lo solucionastes?

Un saludo y gracias por la aportacion.

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: Control 28 Led RGB independientes
« Respuesta #17 en: 19 de Junio de 2011, 11:06:48 »
Una manera de solucionarlo puede ser a la hora de programrlos, ya que los tendras que programar tambien 1 a 1 son 2 segundos con el winpic800 cambiar manualmente el primer registro de la eeprom.

Saludos

Desconectado Strepto

  • PIC16
  • ***
  • Mensajes: 159
    • Pictronics
Re: Control 28 Led RGB independientes
« Respuesta #18 en: 19 de Junio de 2011, 12:06:45 »
Vamos, igual que hacia antes de ponerle el dipswitch, darle la direccion en el programa... Nose, no me convence mucho, pero me has dado una idea que puede que la implemente si no es mucha liada para hacer (con el master). Me la pienso y si sale algo en claro ya comentare.

Un saludo!

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Control 28 Led RGB independientes
« Respuesta #19 en: 19 de Junio de 2011, 22:36:52 »
Otra idea que se me ocurre es que un esclavo que es conectado por primera vez, pregunte a los demas esclavos sus direcciones, y que tome la proxima direccion disponible.
saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado kobra

  • PIC10
  • *
  • Mensajes: 5
Re: Control 28 Led RGB independientes
« Respuesta #20 en: 20 de Junio de 2011, 06:01:32 »


La verdad es que no es mala idea, pero tambien busco que varios equipos puedan llegar a tener una misma direccion de ser necesario, con lo que los dipswitch no es mas que un momento. De todas formas, tengo una pregunta, la primera vez que pones en marcha el sistema, en mi caso tendria que pasar por los 28 esclavos uno a uno para darles su direccion mediante comando N__ no? Por que siempre habra un momento, en el primer arranque en el que todos sean nuevos dispositivos, vamos, que sean "FF". Esto como lo solucionastes?

Un saludo y gracias por la aportacion.
[/quote]

Te comento que yo cada vez que montaba uno, mandaba el comando con un pulsador en el master que realmente lo unico que hacia era dar alimentación  listo, el master llevaba la cuenta, pero tambien podrias mandar el numero que te interesase, la verdad es que ese muy simple hacer cualquier modificacion o añadirle un comando.  :D

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: Control 28 Led RGB independientes
« Respuesta #21 en: 20 de Junio de 2011, 10:50:46 »
Cuidado con lo de los 2 dispositivos con la misma dirección, ya que si en un futuro como comentastes quieres que los esclavos puedan contestar puedes tener problemas de colisión de datos.

saludos.

Desconectado Strepto

  • PIC16
  • ***
  • Mensajes: 159
    • Pictronics
Re: Control 28 Led RGB independientes
« Respuesta #22 en: 20 de Junio de 2011, 13:10:35 »
Cuidado con lo de los 2 dispositivos con la misma dirección, ya que si en un futuro como comentastes quieres que los esclavos puedan contestar puedes tener problemas de colisión de datos.

saludos.

Hay esta el problema que yo veia, y entonces fue cuando pense en la posibilidad de que cada esclavo tuviese 2 direcciones, una real (DR o RD) y otra virtual (DV o VD). La real seria la del dipswitch y la virtual, la que asignamos al esclavo X. Entonces luego no habria problema en aplicar ninguna de las ideas que habeis comentado antes, aumque la programacion para el master, se haria un poco mas pesada de lo que ya me esta pareciendo  :D

Un saludo!

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Control 28 Led RGB independientes
« Respuesta #23 en: 20 de Junio de 2011, 13:21:41 »
Por que siempre habra un momento, en el primer arranque en el que todos sean nuevos dispositivos, vamos, que sean "FF". Esto como lo solucionastes?

No si vas encendiendo los esclavos de a uno.
Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Strepto

  • PIC16
  • ***
  • Mensajes: 159
    • Pictronics
Re: Control 28 Led RGB independientes
« Respuesta #24 en: 29 de Junio de 2011, 15:47:06 »
Buenas!

Despues de haber estado liado con el curro y con este calor infernal, aqui os dejo los pocos avances que he hecho, que vendria siendo la primera version de los esclavos.

Estos disponen de:

- Direccion real por switch [RD+direccion+comandos_colores]
- Direccion virtual (al iniciar se pone la misma que la real, pero luego se puede cambiar) [VD+direccion+comandos_colores]
- Cambio de direccion virtual con la "C" [RD o VD+numero+C+nueva_direccion]
- Comunicacion full-duplex (a falta de ajustarla cuando tenga el master)

Falta:

- Orden para que actuen todos con la misma orden, puede que alguna direccion especial o alguna otra letra como la T
- Alguna otra cosa que se me ocurra mientras tanto  :D

El codigo:

Código: [Seleccionar]
#include <16F88.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES NOPUT                    //No Power Up Timer
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=8000000)
#use rs232(baud=19200,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=8)
#use fast_io (B)

#byte TRISA = 0x85
#byte TRISB = 0x86
#byte PORTA = 0x05
#byte PORTB = 0x06

// 5 bits para conseguir la direccion del dispositivo (Midireccionreal)
#bit  RA0 = PORTA.0
#bit  RA1 = PORTA.1
#bit  RA2 = PORTA.2
#bit  RA3 = PORTA.3
#bit  RA4 = PORTA.4

#bit  LedRojo = PORTB.7
#bit  LedVerde = PORTB.6
#bit  LedAzul = PORTB.3
#bit  TX_RX_485 = PORTA.6  //En desuso hasta que se pueda probar con el master

char buffer[20];
int8 Rojo,Verde,Azul, Ticks, Midireccionreal, Midireccionvirtual;
int8 CaracteresRecibidos  = 0;
int1 ComandoRecibido;

void Cojedireccion (void);

#int_RDA
void  RDA_isr(void)
{
   char c;
   c=getc();
   putchar(c);
   buffer[CaracteresRecibidos] = c;
   if (c==13)
      ComandoRecibido=true;
   else
      CaracteresRecibidos = (CaracteresRecibidos+1) % sizeof(buffer);
}

#int_TIMER0
void  TIMER0_isr(void)
{
   Ticks++;

   if (Ticks==0) {
      LedAzul=1;
      LedRojo=1;
      LedVerde=1;
   };
   if (Ticks==Rojo)
         LedRojo=0;
   if (Ticks==Verde)
         LedVerde=0;
   if (Ticks==Azul)
         LedAzul=0;
   set_timer0(140);
}

void Cojedireccion (void){
   Midireccionreal=0;
   if (RA0 == 1)
   Midireccionreal=Midireccionreal+1;
   if (RA1 == 1)
   Midireccionreal=Midireccionreal+2;
   if (RA2 == 1)
   Midireccionreal=Midireccionreal+4;
   if (RA3 == 1)
   Midireccionreal=Midireccionreal+8;
   if (RA4 == 1)
   Midireccionreal=Midireccionreal+16;
}

void ProcesaRGB() {
   int8 i=0;
   int8 Direccion = 0;
   int1 CambiaRojo, CambiaVerde, CambiaAzul, Miradireccion, Cambiadireccion;
   
   CambiaRojo=false;
   CambiaVerde=false;
   CambiaAzul=false;
   Miradireccion=false;
   Cambiadireccion=false;

   while (i<CaracteresRecibidos) {
      if ((Buffer[i]=='D') && ((Buffer[i-1]=='R') || (Buffer[i-1]=='V'))) {
         Miradireccion=true;
         CambiaRojo=false;
         CambiaVerde=false;
         CambiaAzul=false;
         Direccion=0;
      }
      if ((Direccion == Midireccionreal) || (Direccion == Midireccionvirtual)) {
         if (Buffer[i]=='C') {         //Cambio de direccion virtual
            Miradireccion=false;
            Cambiadireccion=true;
            CambiaRojo=false;
            CambiaVerde=false;
            CambiaAzul=false;
            Midireccionvirtual=0;
            printf("Direccion Virtual cambiada \n\r\n\r");
         }
         if (Buffer[i]=='R') {
            Miradireccion=false;
            Cambiadireccion=false;
            CambiaRojo=true;
            CambiaVerde=false;
            CambiaAzul=false;
            Rojo=0;
         }
         if (Buffer[i]=='G') {
            Miradireccion=false;
            Cambiadireccion=false;
            CambiaRojo=false;
            CambiaVerde=true;
            CambiaAzul=false;
            Verde=0;
         }
         if (Buffer[i]=='B') {
            Miradireccion=false;
            Cambiadireccion=false;
            CambiaRojo=false;
            CambiaVerde=false;
            CambiaAzul=true;
            Azul=0;
         }
      }
      if ((Buffer[i]>='0') && (Buffer[i]<='9')) {
         if (Miradireccion)
            Direccion=Direccion*10+Buffer[i]-48;
         if(Cambiadireccion)
            Midireccionvirtual=Midireccionvirtual*10+Buffer[i]-48;
         if (CambiaRojo)                       
            Rojo=Rojo*10+Buffer[i]-48;
         if (CambiaVerde)
            Verde=Verde*10+Buffer[i]-48;
         if (CambiaAzul)
            Azul=Azul*10+Buffer[i]-48;   
      }
      i++;
   }
   
   printf ("Color establecido: Rojo = %u, Verde = %u, Azul = %u \n\r\n\r",Rojo,Verde,Azul);
   
   CaracteresRecibidos=0;
   ComandoRecibido=false;
}

void main()
{
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   set_tris_a(0x1F);    //Se configura para 5 entradas y 3 salidas
   set_tris_b(0x37);    //Se configuran los pines de los Leds como salidas y el resto como entradas
   
   Rojo=0;
   Verde=0;
   Azul=0;
   Ticks=0;
   ComandoRecibido=false;
   
   Cojedireccion();
   Midireccionvirtual = Midireccionreal;
   
   printf ("Jugando con LEDS RGB Direccion real: %u, Direccion Virtual: %u. \n\r\n\r", Midireccionreal,Midireccionvirtual);
   
   enable_interrupts(INT_RDA);
   enable_interrupts(INT_TIMER0);
   enable_interrupts (GLOBAL);

   while (1) {
      if (ComandoRecibido)
         ProcesaRGB();
   }
}

Y como no, os adjunto la simulacion con el hex para que lo disfruteis.

Un saludo y se aceptan criticas!

Desconectado splasma2

  • PIC16
  • ***
  • Mensajes: 131
Re: Control 28 Led RGB independientes
« Respuesta #25 en: 01 de Julio de 2011, 05:33:42 »
Hola,  echale un vistazo, si puedes  conseguirlo, al proyecto "Guirnalda luminosa programable" de Elektor Dic/2009.

Usa una inteligente solución para comunicarse con varios circuitos esclavos RGB desde un master con 3 hilos, a lo mejor te da alguna idea  :).

Saludos.

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Control 28 Led RGB independientes
« Respuesta #26 en: 11 de Agosto de 2011, 17:50:36 »
Estoy desarrollando un proytecto similar:

1 control MASTER, con PIC de 40pines (18F4620) que posee:
- teclado matricial
- LCD 2*16
- 3 Varios puertos RS485 (1 por hard y 2 por soft).
- un receptor RF de 450 mhz
- Entrada para Audioritmico.

32 Controles RGB SLAVE que constan de:
- puerto RS485
- Salida MOSFET (para 2 tiras de LED's RGB)
- ID UNICO

Si les intereza iré comentando los avances del proyecto. El que quiera preguntar algo, que pregunte..

Saludos !

Pancho !

Desconectado mr froyd

  • PIC10
  • *
  • Mensajes: 3
Re: Control 28 Led RGB independientes
« Respuesta #27 en: 16 de Octubre de 2011, 22:49:28 »
Hola. Necesitaria una placa de este tipo, en que parte del foro debo publicar mi necesidad?
Gracias.

Desconectado Strepto

  • PIC16
  • ***
  • Mensajes: 159
    • Pictronics
Re: Control 28 Led RGB independientes
« Respuesta #28 en: 27 de Enero de 2012, 12:19:24 »
Despues de haber dejado este proyecto un rato apartado por motivos de trabajo, vuelvo con algunos cambios y grandes avances, y como no, con ganas de mas mejoras, pero de momento la idea propuesta en el 1 mensaje ya esta lista. De momento aqui os dejo unas fotos de lo que viene siendo el esquema para la simulacion y el programa hecho en VB6 para el control:




El codigo en CCS para el Pic (tambien adjunto en la descarga)

Código: [Seleccionar]
#include <16F88.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES NOPUT                    //No Power Up Timer
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=8)
#use fast_io(a)
#use fast_io(b)

#byte PORTA=0x05
#byte PORTB=0x06

#bit  LedRojo        =     PORTA.0
#bit  LedVerde       =     PORTA.1
#bit  LedAzul        =     PORTA.2

#define Retardo   1

char buffer[20];
int8 Rojo,Verde,Azul, Ticks, MiID, MiGD;
int8 CaracteresRecibidos  = 0;
int1 ComandoRecibido;

#int_Timer0
void ActivaLed() {
   Ticks++;

   if (Ticks == 0) {
      if(Rojo >=  1) LedRojo = 1;
      if(Verde >=  1) LedVerde = 1;
      if(Azul >=  1) LedAzul = 1;
   }
   if (Ticks == Rojo) LedRojo = 0;
   if (Ticks == Verde) LedVerde = 0;
   if (Ticks == Azul) LedAzul = 0;
   set_timer0(140);
}

#INT_RDA
void serial_isr()

   char c;
   c=getc();
   putchar(c);
   buffer[CaracteresRecibidos] = c;
   if (c == 13) // el numero 13 hacer referencia en el codigo ascii al final de carrera.
      ComandoRecibido = true;
   else
      CaracteresRecibidos = (CaracteresRecibidos + 1) % sizeof(buffer);
}

void ProcesaRGB() {
   int8 i = 0, ID = 0, GD = 0, TD;
   int1 CambiandoRojo, CambiandoVerde, CambiandoAzul, CambiaMiGD, MiraID, MiraGD;

   CambiandoRojo = false;
   CambiandoVerde = false;
   CambiandoAzul = false;
   CambiaMiGD = false;

   while (i<CaracteresRecibidos) {
      if ((Buffer[i] == 'D') && (Buffer[i-1] == 'T')){
          TD = 1;
      }
      if ((Buffer[i] == 'D') && (Buffer[i-1] == 'I')){
         MiraID = true;
         MiraGD = false;
         CambiaMiGD = false;
         CambiandoRojo = false;
         CambiandoVerde = false;
         CambiandoAzul = false;
         ID = 0;
      }
      if ((Buffer[i] == 'D') && (Buffer[i-1] == 'G')){
         MiraID = false;
         MiraGD = true;
         CambiaMiGD = false;
         CambiandoRojo = false;
         CambiandoVerde = false;
         CambiandoAzul = false;
         GD = 0;
      }
      if ((ID == MiID) || (GD == MiGD ) || (TD == 1)) {
         if ((ID == MiID) && (Buffer[i] == 'C')){
            MiraID = false;
            MiraGD = false;
            CambiaMiGD = true;
            CambiandoRojo = false;
            CambiandoVerde = false;
            CambiandoAzul = false;
            MiGD = 0;
            printf("Direccion de Grupo cambiada \n\r\n\r");
         }
         if (Buffer[i] == 'R'){
            MiraID = false;
            MiraGD = false;
            CambiaMiGD = false;
            CambiandoRojo = true;
            CambiandoVerde = false;
            CambiandoAzul = false;
            Rojo = 0;
         }
         if (Buffer[i] == 'G'){
            MiraID = false;
            MiraGD = false;
            CambiaMiGD = false;
            CambiandoRojo = false;
            CambiandoVerde = true;
            CambiandoAzul = false;
            Verde = 0;
         }
         if (Buffer[i] == 'B'){
            MiraID = false;
            MiraGD = false;
            CambiaMiGD = false;
            CambiandoRojo = false;
            CambiandoVerde = false;
            CambiandoAzul = true;
            Azul = 0;
         }
      }
      if ((Buffer[i] >= '0') && (Buffer[i] <= '9')) {
         if (MiraID) ID = ID * 10 + Buffer[i] - 48;
         if (MiraGD) GD = GD * 10 + Buffer[i] -48;
         if (CambiaMiGD) MiGD = MiGD * 10 + Buffer[i] -48;
         if (CambiandoRojo) Rojo = Rojo * 10 + Buffer[i] - 48;
         if (CambiandoVerde) Verde = Verde * 10 + Buffer[i] - 48;
         if (CambiandoAzul) Azul = Azul * 10 + Buffer[i] - 48;   
      }
      i++;
   }
   
   printf ("Color establecido: Rojo = %u, Verde = %u, Azul = %u \n\r\n\r",Rojo,Verde,Azul);
   CaracteresRecibidos = 0;
   ComandoRecibido = false;
   TD = 0;
}

void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(OSC_8MHZ|OSC_INTRC);

   set_tris_A(0);

   Rojo = 0;
   Verde = 0;
   Azul = 0;
   Ticks = 0;
   MiID = 1; // ID del dispositivo
   MiGD = 2; // GD del dispositivo
   ComandoRecibido = false;
   
   printf ("Jugando con LEDS RGB \n\r\n\r");
   
   enable_interrupts(INT_RDA);
   enable_interrupts(INT_TIMER0);
   enable_interrupts (GLOBAL);

   while (1) {
      if (ComandoRecibido)
         ProcesaRGB();
   }
}

Funcionamiento (Sacado del control de leds RGB de nocturno):
El comando a escribir se compone de 2 partes. Por un lado la direccion y por otro lado el comando de colores:
- Para la direccion tenemos 3 opciones: ID (individual direction), GD (group direction) y TD (todas diecciones). Despues de una de estas 3 opciones solo tendremos que indicar la direccion del receptor sobre el que queremos actuar.
- Para los colores tenemos otras 3 opciones: R (Red, rojo), G (Green, verde) y B (Blue, azul). Al igual que con la direccion, despues de la letra indicamos un valor de 0 a 255 (min - max).

Ejemplos:
- ID1R100G100B100: Pone los colores rojo, verde y azul del dispositivo con direccion individual 1 a un valor de 100.
- GD5R100G200: Pone el color rojo en un valor de 100 y el verde en un valor de 200 a los dispositivos con la direccion de grupo 5.
- TDR0B255: Pone el color rojo a 0 y el azul a 255 de todos los dispositivos.

Aclarar que tanto el soft del pic como el del VB no son definitivos, esa es la razon de no estar comentado. Por otra parte para la simulacion, al ser un unico esclavo, no he añadido el MAX485 ni sus controles en el programa, pero es algo que tendre que añadir para una comunicacion bidireccional sin problemas.

Posibles mejoras que tengo intencion de hacer:
- En vez de cada esclavo controlar un unico led RGB, controlar un TLC5940
- En vez de usar comunicacio RS485, cambiar el protocolo a DMX
- Un modulo externo con el que poder asignar las direcciones individuales de cada dispositivo en vez de hacerlo en el programa
- ¿Se os ocurre algo mas?  :D

La simulacion se puede hacer tanto por virtual terminal como con el programa en VB. En este segundo caso habra que usar el VSPE y cambiar los puertos a los que simule el programa.

Espero que os guste. Un saludo!

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Control 28 Led RGB independientes
« Respuesta #29 en: 27 de Enero de 2012, 19:02:18 »
Buenas, yo tengo algo parecido... pero trabajando con Arduino. Lo más practico me parece es enviarle tras unos caracteres que serán la "ID" del receptor, el código del color que quieres encender en formato hexadecimal, tal cual el código HTML.

Simplemente usa el valor de cada color para transformarlo en una señal PWM.

Para el TLC escala los valores, ya que este usa 10 bit de resolucion para el PWM (1024 valores).
« Última modificación: 27 de Enero de 2012, 19:08:11 por RaDoN »
Si juegas contra el mejor, pierdes como los demás.