Autor Tema: Controlador RGB (TLC5940)  (Leído 44437 veces)

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

Desconectado LABmouse

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Controlador RGB (TLC5940)
« Respuesta #15 en: 29 de Octubre de 2008, 23:34:28 »
xootraoox..Pues se muy muy bien!! Felicidades!

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
Re: Controlador RGB (TLC5940)
« Respuesta #16 en: 31 de Octubre de 2008, 03:28:22 »
mmm... es posible obtener los 48Mhz con un PIC18F4550 usando el oscilador interno?...

bueno, lo que pasa es que la forma en que manejo este (TLC5940) es con el OSC interno del micro sacando la el reloj de sistema por el micro por el pin dedicado para eso (OCS2/CLKOUT), es la unica forma que encontre y logre de hacerlo trabajar...

lo que pretendo hacer, es conseguir mas memoria y velocidad para cascadear la mayor cantidad de TLC's posible para ver hasta donde se puede llegar con este y los micros..... ya dije que podia controlar 5 leds en 8bits con un micro muy basico, ahora con un micro muy basico, manejo 224 leds en 12bits, y si es asi, me surge la idea de hacer una matriz RGB en el cielo de mi Dpto. en vez de los discos que tengo...

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Controlador RGB (TLC5940)
« Respuesta #17 en: 25 de Enero de 2009, 17:12:28 »
Enhorabuena por el proyecto! Hace unos días me crucé con una matriz RGG de 8x8 y estaba buscando el como meterle mano... He visto varias posibilidades de control. Una sería la que se comenta en este post, otra forma es tal y como lo hacen los compañeros de sparkfun: http://www.sparkfun.com/commerce/product_info.php?products_id=760
La que creo es más sencilla ( aunque no he visto nada montado ) es con un chip de Maxim de la familia MAX6960:
http://datasheets.maxim-ic.com/en/ds/MAX6960-MAX6963.pdf
Me parece una pequeña maravilla, ya que con un solo chip se puede controlar una matriz RGB 8x8 y encima tiene entrada/salida serie! :)
En el foro del Arduino hay un pequeño ejemplo:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1227289029/5

un saludo!

pd: Creo que me he colado el MAX6960 es para matrices Bicolor no RGB, ya que tiene salida para 8 filas y 16 columnas... ejem! Parece que el MAX6974 y 75 si que servirían para el propósito, aunque sin entrada/salida serie ... http://datasheets.maxim-ic.com/en/ds/MAX6974-MAX6975.pdf
« Última modificación: 25 de Enero de 2009, 17:32:37 por J1M »

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Controlador RGB (TLC5940)
« Respuesta #18 en: 25 de Enero de 2009, 17:30:10 »
Aprovecho a sacarme una duda q me tiene mal. Con esos integrados podemos controlar cierta cantidad de canales pwm, pero los carteles de leds pueden llegar a tener muchos de estos, asiq no nos queda otra q multiplexar. No entiendo como puede ser posible multiplexar una señal pwm, ya que mientras al estamos sacando por un canal, los demas quedan en un solo estado. No se si me explico.
gracias!

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

Desconectado diogoc

  • PIC10
  • *
  • Mensajes: 3
Re: Controlador RGB (TLC5940)
« Respuesta #19 en: 19 de Febrero de 2009, 23:48:47 »
i need help with tlc5940 interface.
anyone can give me some code example or ideas for implementation?

thanks

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Controlador RGB (TLC5940)
« Respuesta #20 en: 20 de Febrero de 2009, 13:07:33 »
In this topic Khronos attached a pdf with an explanation (in spanish), and some code in C http://www.todopic.com.ar/foros/index.php?topic=23031.msg186746#msg186746

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

jacrmr

  • Visitante
Re: Controlador RGB (TLC5940)
« Respuesta #21 en: 23 de Febrero de 2009, 17:53:09 »
Citar
need help with tlc5940 interface.
anyone can give me some code example or ideas for implementation?

thanks

The datasheet is straight and pretty self-explanatory. What other kind of information do you need? You could interface them with basic serial SDIN, CLK, LATCH signals to enter simple data to the serial engine (either ON/OFF or RGB PWM data), or use more advanced methods like feeding data output directly from a video decoder IC, which gives to you the real power of these RGB controllers, since they were mainly manufactured for the full-color video LED sign industry. If you are interested about information how to use this last method of feeding the TLC5940 signals, send me a private message.

Desconectado jorsh

  • PIC10
  • *
  • Mensajes: 1
Re: Controlador RGB (TLC5940)
« Respuesta #22 en: 12 de Marzo de 2010, 03:10:31 »
Ok.... al fin he logrado hechar a correr este Bicho de 28 patas, los resultados son muy buenos y prueba de ello es el video que adjunto. (aunque se puede notar un pequeño flickering ante la camara, frente al ojo humano, la vision es perfecta, nada pero absolutamente nada de flickering.... incluso en movimiento fisico de la matriz)


en este muestro como cubro una matriz completa de forma multiplexada y heciendo un fade muy rapido, luego se ven unos destellos los que acusan de una reprogramacion para disminuir el tiempo de escaneo que hago en las filas y dar a mostrar el multiplexado, y por ultimo vuelvo a subir el mismo para mostrar un fade mas lento cubriendo la gama completa que me permite este, osea 4096 pasos...

de momento esto esta todo hecho solo con estos acompañantes....

1 -> PIC16F887
2 -> TLC5940
7 -> IRF9540
1 -> PICKIT2 (este esta encargado de programar y alimentar todo esto, si incluyendo la matriz por el puerto USB =P...  que abuso, no...)

cuando tenga algo mas ordenado todo el codigo y tiempo lo subire como una libreria para ir depurandola y ampliandola con la ayuda de sus comentarios...

Saludossss....




COMO RESOLVISTE LO DEL GSCLK? YO ESTOY INTENTANDO HACER FUNCIONAR EL CIRCUITO PERO CON EL 16F877A

Desconectado dom124

  • PIC10
  • *
  • Mensajes: 42
Controlador RGB (TLC5940)
« Respuesta #23 en: 22 de Septiembre de 2010, 21:12:35 »
Buenas! quiero preguntarles como se puede resolver el tema del GSCLK que hay que enviarle al TLC... ya que en el codigo que se adjunta eesta como que sale del pinC0 pero lo configura como reloj interno al timer1 y de ahi que no se puede tener ninguna salida... me pueden dar una guia de como encararlo??? gracias!

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Controlador RGB (TLC5940)
« Respuesta #24 en: 23 de Septiembre de 2010, 17:34:21 »
que tal dom124 y a todos los amigos que siguen este proyecto este circuito trabaja con una comunicacion serial sincrona utiliza 3 señales datos,reloj y habilitacion para poder cargar los 16 canales se deben transmitir 192 bits ya que 12 bits de resolucion x 16 canales = 192 bits.
y empiezas enviando el bit mas significativo y tambien del canal mas significativo.

Cuando termina la transmision se genera la habilitacion entonces los datos son cargados en unos registros que tiene internamente el TLC 5940

Para el grayscale counter entonces generas la señal GSCLK que deben ser 4096 pulsos.
La señal blank es el output enable entonces mientras generas el GSCLK la señal blank debe estar en bajo y terminado el ciclo pwm
subir la señal esto provoca el reset en el grayscale counter para el siguiente ciclo pwm.

Ahora bien para no tener ningun parpadeo en los leds la frecuencia en GSCLK como valor minimo recomendado es de 409.6 KHZ por que este valor?
bueno tenemos una resolucion de 12 bits es decir 4096 pasos de intensidad en el led, entonces como ejemplo: queremos 100HZ como minimo en un ciclo pwm multiplicamos 100 x 4096 = 409600HZ.
Este es un punto importante ya que una frecuencia menor  a 245,760HZ nos daria un ciclo pwm menor a 60 HZ provocando el leve parpadeo en los leds.

Y ya para terminar esta pequeña explicacion la velocidad con la cual se transmiten los datos puede ser diferente a la del GSCLK pero solo se puede cargar los datos hasta que el ciclo pwm termine ya que si escribes datos y los cargas mientras se esta generando un ciclo pwm los datos son sobreescritos perdiendo la sincronizacion del pwm.
Bueno seguiremos este proyecto interesante saludos

Desconectado dom124

  • PIC10
  • *
  • Mensajes: 42
Re: Controlador RGB (TLC5940)
« Respuesta #25 en: 25 de Septiembre de 2010, 01:14:31 »
Antes que nada, gracias por responder Chipcon... es muy buena la explicacion que das... de hecho tambien he leido el pdf que esta aqui que tambien tiene una buena explicacion de como funciona el integrado...
tal vez me exprese mal a lo que quise preguntar antes... a ver si ahora puedo.. jeje
 
Lo que yo necesito es saber como, desde su experiencia con estos integrados, hacen para generar los 4095 pulsos.... si es por pwm, por una salida del timer como lo ponen en el codigo citado mas arriba (que creo que eso no funciona, pero me gustaria que me lo expliquen si funciona)... es decir... necesito una guia a nivel de codigo del uC de cual es la mejor forma y la mas conveniente de generar estos pulsos...

muchas gracias y saludos!  :mrgreen:

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Controlador RGB (TLC5940)
« Respuesta #26 en: 27 de Septiembre de 2010, 20:10:51 »
Saludos dom124 bueno asi cambia la cosa jeje, en experiencia personal la utilización del PWM del pic o utilizar alguno de los timer
no genera la velocidad suficiente para el ciclo pwm.
Xootraoox expuso mas arriba que utilizo el oscilador interno y el pin dedicado CLKOUT para generar una frecuencia mas alta
y muy claro comenta que fue la única forma de que trabaje.

Creo que también se podría generar el GSCLK en el main pero sin mucha garantía de que los 4096 pulsos sean estables,tal vez se obtengan mejores resultados con un PIC18 y utilizando el HSPLL para mayor velocidad.

Dejame realizar pruebas hoy y comento los resultados el dia de mañana saludos


Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Controlador RGB (TLC5940)
« Respuesta #27 en: 29 de Septiembre de 2010, 15:29:17 »
Saludos dom124 realice pruebas utilizando un pic16f877 con Xtal de 20MHZ y obtuve un ciclo pwm de casi 90 HZ solo es una pequeña prueba que espero sirva de orientación para el manejo de los drivers TLC5940, con la tabla se carga el valor de cada canal no utilizo interrupciones. Yo utilice el compilador PICC.

Como opinión utilizando un pic18 se tendrán mejores resultados
Y bueno quedamos en espera de los resultados del compañero xootraoox.


Desconectado dom124

  • PIC10
  • *
  • Mensajes: 42
Re: Controlador RGB (TLC5940)
« Respuesta #28 en: 04 de Octubre de 2010, 16:34:41 »
Muchas gracias por compartir tu idea Chipcon, estoy bajando el codigo que pusiste para darle una mirada y probarlo... estoy de acuerdo con vos en usar un pic18... actualmente no tengo ninguno a mano como para probar. pero ni bien me consiga uno comento los resultados...
Lo que yo decia anteriormente sobre el codigo que expuso xootraoox es que no se puede sacar el gsclk por el CLKOUT del micro... o bien si se puede necesitaria que me lo expliquen por favor...
A alguien le anduvo el codigo ese???

saludos y gracias nuevamente por tu opinion chipcon

Desconectado Edson G.

  • PIC10
  • *
  • Mensajes: 5
Re: Controlador RGB (TLC5940)
« Respuesta #29 en: 03 de Noviembre de 2011, 02:33:12 »
Buenas, he intentado controlar el TLC5940 pero mis intentos no funcionan  :?. He escrito varios códigos y nada me resulta aún  :5]. Utilizo compilador CCS (4.104) y programo un PIC18F4685. Adjunto mi último código. Podria alguien experimentado decirme: Que estoy haciendo mal?

Código: [Seleccionar]
#include<18F4685.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 800000)
#use fast_io (B)
#use spi(DI=PIN_C4,DO=PIN_C5, CLK=PIN_C3, BITS=12, MODE=0, MSB_FIRST, STREAM=envio)

#define GSCLK PIN_C0
#define BLANK PIN_C1
#define XLAT  PIN_C2

//EN 18f4685
// SDO   ---> C5
// SDI   ---> C4 NO USADO
// SCK   ---> C3
// XLAT  ---> C2
// BLANK ---> C1
// GSCLK ---> C0
//EN TLC5940
//VPRG---> 27 ----> GND    (SOLO GS)
//DCGRG--> 19 ----> +5     

void main(){

  SET_TRIS_B( 0x80 );
  output_low(XLAT);
  output_high(BLANK);
  output_low(GSCLK);
 
int16 count;
int first;
unsigned int inf;

unsigned char a;
const unsigned int CHANNELS[16] =  {0x000,0xfff,0x000,0xfff,0x000,0xfff,0x000,0xfff,
                                   0x000,0xfff,0x000,0xfff,0x000,0xfff,0x000,0xfff};
const unsigned int CHANNELSA[16] = {0xfff,0x000,0xfff,0x000,0xfff,0x000,0xfff,0x000,
                                    0xfff,0x000,0xfff,0x000,0xfff,0x000,0xfff,0xfff};
first=1;

while(TRUE){

 if (input(PIN_B7)){
       for (a = 16;a > 0;a --)     // 16 ciclos
        { inf = CHANNELS[a-1];  // Carga el canal MSB
          spi_xfer(envio, inf, 12);}}
         
 else {
           for (a = 16;a > 0;a --)     // 16 ciclos
        { inf = CHANNELSA[a-1];  // Carga el canal MSB
          spi_xfer(envio, inf, 12);}
          }
     

output_high(XLAT);
output_low(XLAT);
output_low(BLANK);
 
     if (first == 1){ //PRIMERA VEZ
         output_high(GSCLK);
         output_low(GSCLK);
         first++;
          }
         
for (count = 1; count <= 4096;count ++) {
 
  output_high(GSCLK);
  output_low(GSCLK);
  }
     
output_high(BLANK);

}
}

Gracias  8)


 

anything