Buenas tardes, mi nombre es Santiago. Creo haber posteado algo previamente en el foro. Pero en fin, ahora estoy en un proyecto super sencillo. Se trata de manejar 10 LEDs RGB usando la tecnica POV (sin girar!, estaticos), es decir, seleccionando led por led y estableciendole el color y repetiendo esta rutina para que el ojo humano ni se de cuenta. (una especie de PWM casero, pero sin la parte de PWM en si ).
En fin, vamos al grano. El sistema funciona, ni se nota que estan poveando los leds (imagino que hay mucha velocidad, no la medi aun). Pero tiene un detalle.
Suponiendo que tengo prendios los 10 leds en R, G, B, R, G, B, R, G, B, Violeta (B+R).
En el primer led donde esta prendido el Red, se ven fragmentos de Blue (vienen del ultimo led, que esta en Violeta). En el segundo y tercer led hay fragmentos de Red. Y asi continuamente.
Yo estoy usando BC337 para seleccionar cada led (Vcc -> Transistor -> ComunLED). Pero tambien uso los BC337 para amplificar (e invertir) la señal de cada color que sale de un DAC R2R. (PIC-> R2R-> Transistor).
Segun vi en otros POV, utilizan otros transistores (2N2222, 2N4401), sera por eso?
Dejo adjunto el PDF del esquematico que realice, junto con la parte del codigo que se encarga del POV.
Quiero destacar que hay 2 bits mas en comun para el tema de las "sombras" o "shades" ya que me base exclusivamente en un diseño de LucidScience (hacian una placa VGA con un Atmel y con un R2R de 8 bits hacian 64 colores). Igualmente no los utilizo por ahora.
El codigo (C18):
Donde LEDsColors es un array: unsigned char LEDsColors[10];. Y para inicializar y llenarle los datos, antes del bucle infinito, le seteo de la siguiente manera:
Esta adjunto el PDF del circuito...
Espero que me puedan dar una mano. Saludos.
En fin, vamos al grano. El sistema funciona, ni se nota que estan poveando los leds (imagino que hay mucha velocidad, no la medi aun). Pero tiene un detalle.
Suponiendo que tengo prendios los 10 leds en R, G, B, R, G, B, R, G, B, Violeta (B+R).
En el primer led donde esta prendido el Red, se ven fragmentos de Blue (vienen del ultimo led, que esta en Violeta). En el segundo y tercer led hay fragmentos de Red. Y asi continuamente.
Yo estoy usando BC337 para seleccionar cada led (Vcc -> Transistor -> ComunLED). Pero tambien uso los BC337 para amplificar (e invertir) la señal de cada color que sale de un DAC R2R. (PIC-> R2R-> Transistor).
Segun vi en otros POV, utilizan otros transistores (2N2222, 2N4401), sera por eso?
Dejo adjunto el PDF del esquematico que realice, junto con la parte del codigo que se encarga del POV.
Quiero destacar que hay 2 bits mas en comun para el tema de las "sombras" o "shades" ya que me base exclusivamente en un diseño de LucidScience (hacian una placa VGA con un Atmel y con un R2R de 8 bits hacian 64 colores). Igualmente no los utilizo por ahora.
El codigo (C18):
Código:
void SetRamLED(char r, char g, char b, char shade, char id)
{
char temp;
LEDsColors[id-1] = r & 0x3;
LEDsColors[id-1] |= (g & 0x3) << 2;
LEDsColors[id-1] |= (b & 0x3) << 4;
LEDsColors[id-1] |= (shade & 0x3) << 6;
// LEDsColors[id] = ~LEDsColors[id];
}
void DoPov(void)
{
char temp;
char id;
for (id=1; id<11; id++) {
LATD = LATB = LATE = 0x0;
LATD = LEDsColors[id-1];
if (id==9) {
//LATB = 0;
LATE = 0x1;
} else if(id==10) {
//LATB = 0;
LATE = 0x2;
} else if(id > 0) {
LATB = 0x1 << (id-1);
//LATE = 0;
} else {
//LATB = LATE = 0;
}
}
}
Código:
LATA = 0xFF;
LATB = LATD = LATE = 0x0;
TRISD = TRISB = 0x0;
TRISEbits.TRISE0 = 0;
TRISEbits.TRISE1 = 0;
SetRamLED(0x3, 0x0, 0x0, 0x0, 0x1);
SetRamLED(0x0, 0x3, 0x0, 0x0, 0x2);
SetRamLED(0x0, 0x0, 0x3, 0x0, 0x3);
SetRamLED(0x3, 0x0, 0x0, 0x0, 0x4);
SetRamLED(0x0, 0x3, 0x0, 0x0, 0x5);
SetRamLED(0x0, 0x0, 0x3, 0x0, 0x6);
SetRamLED(0x3, 0x0, 0x0, 0x0, 0x7);
SetRamLED(0x0, 0x3, 0x0, 0x0, 0x8);
SetRamLED(0x0, 0x0, 0x3, 0x0, 0x9);
SetRamLED(0x3, 0x0, 0x3, 0x0, 0xA);
Espero que me puedan dar una mano. Saludos.