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

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

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Controlador RGB (TLC5940)
« Respuesta #30 en: 03 de Noviembre de 2011, 13:05:16 »
Por el momento solo veo que tienes un pulso extra en GSCLK es decir generas 4097 relojes, yo recuerdo que si te pasas de pulsos el contador se pierde
y no se ve nada o se ven tonos erróneos en las salidas.

PRIMER PULSO
if (first == 1)
{ //PRIMERA VEZ
         output_high(GSCLK); 
         output_low(GSCLK);
         first++;
 }

4096 PULSOS = 4097 PULSOS
 for (count = 1; count <= 4096;count ++) {
 
  output_high(GSCLK);
  output_low(GSCLK);
  }

 Yo no estoy familiarizado con CCS pero me imagino que la transmisión serial si esta correcta es decir enviar el MSB de cada canal y solo 12 bits.
Saludos

Desconectado Edson G.

  • PIC10
  • *
  • Mensajes: 5
Re: Controlador RGB (TLC5940)
« Respuesta #31 en: 05 de Noviembre de 2011, 00:30:52 »
Gracias por la respuesta :)
Pulsé 4097 veces la primera vez porque lo recomendaban en la datasheet del TLC5940. La verdad hay salida, pero no correcta (literalmente actua aleatoriamente, incluso hay algunos que encienden con menor intensidad y otros que no encienden haga lo que haga. Tengo 20 de estos chips y nada

Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Controlador RGB (TLC5940)
« Respuesta #32 en: 10 de Noviembre de 2011, 12:02:38 »
mmm creo que solo se aplica cuando modificas el dot correction,  siempre se deben generar 4096 pulsos,
como te comente no utilizo ccs y entonces deberías checar si tu función de transmisión opera bien,
puede ser que se esten escribiendo mal los registros de datos recuerda que primero se transmite el canal mas significativo
asi como se transmite el MSB de cada dato.

Unos cuantos post arriba deje un código de prueba que funciona bien, yo utilizo HITECH pero no veo prblema para que
las emigres a ccs solo etiqueta los pines que tu utilizas y prueba nuevamente
saludos

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Controlador RGB (TLC5940)
« Respuesta #33 en: 30 de Septiembre de 2012, 10:53:36 »
Hola, disculpen que reflote este tema, pero quería el pdf del post http://www.todopic.com.ar/foros/index.php?topic=23031.msg186746#msg186746
Alguien lo tiene? no lo puedo bajar del post original....
-
Leonardo Garberoglio

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Controlador RGB (TLC5940)
« Respuesta #34 en: 30 de Septiembre de 2012, 14:11:33 »
Intenta nuevamente, yo lo descargue sin problemas  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Controlador RGB (TLC5940)
« Respuesta #35 en: 31 de Diciembre de 2012, 08:57:56 »
Alguien tiene un esquema de como conecto este Circuito integrado a los leds RGB y que le haya funcionado ??
Podrán subirlo aquí ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Controlador RGB (TLC5940)
« Respuesta #36 en: 31 de Diciembre de 2012, 09:32:00 »
Yo en su momento probé así: DCPRG lo podes poner a GND, después BLANK, VPRG, XLAT, SCLK y SIN a cualquier pin del micro. GSCLK debe ir a pin que genera PWM. Luego en IREF se debe colocar una resistencia adecuada para controlar la corriente, en el datasheet esta la formula para calcularla.

El código que probé fue:

Código: C
  1. #include <p33FJ128GP802.h>
  2. // *********************************************************************************
  3. _FOSCSEL(FNOSC_PRIPLL & IESO_OFF)
  4. _FOSC(FCKSM_CSECMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT) // Conmutación de Clock habilitada, Fail-Safe Clock des-habilitado, OSC2 Clout, Cristal XT.
  5. _FWDT(FWDTEN_OFF);// Watchdog des-habilitado.
  6. _FPOR(ALTI2C_OFF & FPWRT_PWR2);// Power-on Reset  2ms.
  7. _FICD(JTAGEN_OFF)
  8. // *-----------------------------------------------------------------------------*
  9. #include "main.h"
  10. #include "GenericTypeDefs.h"
  11. #include <pps.h>
  12. #include <timer.h>
  13. #include <outcompare.h>
  14. // *-----------------------------------------------------------------------------*
  15. extern void __delay32(unsigned long cycles);
  16. #define FCY 40000000UL
  17. #define _delay_ms(d)     __delay32((unsigned long long)(d)*(FCY)/1000)
  18. #define _delay_us(d)     __delay32((unsigned long long)(d)*(FCY)/1000000)
  19. #define _delay_s(d)     __delay32((unsigned long)(d)*(FCY))
  20.  
  21.  
  22. void vSendDataTLC5940(void);
  23. // *-----------------------------------------------------------------------------*
  24. UINT16 CountPWM;
  25. BOOL UpdateData=0;
  26. UINT16_VAL Data[16];
  27. // *-----------------------------------------------------------------------------*
  28. void __attribute__((__interrupt__, no_auto_psv)) _T2Interrupt(void){
  29.  
  30.  
  31.     if(++CountPWM==4096){
  32.         CountPWM=0;
  33.         PIN_BLANK=1;
  34.         if(UpdateData==1){
  35.             UpdateData=0;    
  36.             PIN_XLAT=1;Nop();PIN_XLAT=0;
  37.         }
  38.         PIN_BLANK=0;
  39.     }
  40.     IFS0bits.T2IF = 0;
  41. }
  42. // *-----------------------------------------------------------------------------*
  43. int main(void){
  44.     UINT8 k;
  45.     UINT16 Temp=0;
  46.  
  47.  
  48.     // Configuramos PLL para trabajar a 40 MIPS
  49.     PLLFBD = 0x004E; // M=80.
  50.      CLKDIV = 0x0000; //N1=2, N2=2.    
  51.     // Cambiamos clock para incroporar PLL.-
  52.     __builtin_write_OSCCONH(0b011); // Indicamos cambio a clock primario con PLL.-
  53.     __builtin_write_OSCCONL(0x01); // Iniciamos cambio.-
  54.     while(OSCCONbits.OSWEN == 1) {}; // Esperamos a que se termine el cambio de clock.
  55.        
  56.     AD1PCFGL=0xFFFF; // Todos los pines digitales.-
  57.     TRISBbits.TRISB5=0;
  58.     LATBbits.LATB5=0;
  59.    
  60.     __builtin_write_OSCCONL(OSCCON & ~(0x40));    // Habilitamos escritura sobre registros RPINRx y RPORX.
  61.     // ** Asignamos pin a módulo PWM 1 **
  62.     iPPSOutput(OUT_PIN_PPS_RP10,OUT_FN_PPS_OC1);
  63.     // Bloqueamos escritura sobre registros RPINRx y RPORX.
  64.     __builtin_write_OSCCONL(OSCCON |0x40);    
  65.  
  66.  
  67.     // DCPRG a GND
  68.     PIN_BLANK_DIR=0;
  69.     PIN_VPRG_DIR=0;
  70.     PIN_XLAT_DIR=0;
  71.     PIN_GSCLK_DIR=0;
  72.     PIN_SCLK_DIR=0;
  73.     PIN_SIN_DIR=0;
  74.    
  75.     PIN_BLANK=1; // Todos apagados.
  76.     PIN_VPRG=0; // GS Modo.
  77.     PIN_XLAT=0; //
  78.     PIN_GSCLK=0;
  79.     PIN_SCLK=0;
  80.     PIN_SIN=0;
  81.    
  82.     for(k=0;k<16;k++){
  83.         Data[k].Val=0x0000;
  84.     }    
  85.     vSendDataTLC5940();
  86.    
  87.     CloseOC1();
  88.     OpenOC1(OC_IDLE_CON & OC_TIMER2_SRC & OC_PWM_FAULT_PIN_DISABLE ,60,60); // C.T. 50%
  89.     // ** Configuramos Timer2 para generar PWM de 250kHz ** *
  90.     OpenTimer2(T2_ON & T2_IDLE_STOP & T2_GATE_OFF & T2_PS_1_1 & T2_32BIT_MODE_OFF & T2_SOURCE_INT, 159); //159
  91.     WriteTimer2(0);    
  92.     INTCON1bits.NSTDIS=0; // Enable interrupciones anidadas!  
  93.     ConfigIntTimer2(T2_INT_PRIOR_3 & T2_INT_ON);
  94.     CountPWM=0;
  95.     while(1){
  96.         _delay_ms(100);
  97.         LATBbits.LATB5=!PORTBbits.RB5;
  98.         Temp+=50;
  99.         if(Temp>0xFFF){
  100.             Temp=0;
  101.         }
  102.         for(k=0;k<16;k++){
  103.             Data[k++].Val=Temp;
  104.             Data[k].Val=~Temp;
  105.         }
  106.         vSendDataTLC5940();
  107.     }
  108.    
  109.    
  110. }
  111. // *-----------------------------------------------------------------------------*
  112. void vSendDataTLC5940(void){
  113.     UINT8 k,j;
  114.  
  115.  
  116.     for(k=0;k<16;k++){
  117.         for(j=0;j<12;j++){
  118.             PIN_SIN=Data[k].b11;
  119.             PIN_SCLK=1;
  120.             Data[k].Val<<=1;
  121.             PIN_SCLK=0;
  122.         }
  123.     }    
  124.     UpdateData=1;
  125. }


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Controlador RGB (TLC5940)
« Respuesta #37 en: 31 de Diciembre de 2012, 09:51:53 »
Gracias Suky !!
Una pregunta mas:

Los leds RGB se conectan a la patilla del TLC sin resistencia limitadora ??

De eso no encuentro información, y tengo miedo de hacer macanas...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Controlador RGB (TLC5940)
« Respuesta #38 en: 31 de Diciembre de 2012, 12:09:57 »
Si, sin resistencias. La resistencia en IREF establece la corriente. En el datasheet podes verlo en la sección SETTING MAXIMUM CHANNEL CURRENT


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Controlador RGB (TLC5940)
« Respuesta #39 en: 31 de Diciembre de 2012, 14:27:53 »
Los leds RGB se conectan a la patilla del TLC sin resistencia limitadora ??

Si, sin resistencias. La resistencia en IREF establece la corriente. En el datasheet podes verlo en la sección SETTING MAXIMUM CHANNEL CURRENT

Excelente pregunta. Ahora, pensé en primera instancia igual que Suky, sin resistencias. Luego me puse a pensar que trabajamos casi siempre con fuentes de alimentación de voltaje constante, y los TLC son de corriente constante. Para no poner resistencias, se supone que alguien tiene que hacerse cargo de disipar la potencia restante entre el voltaje de alimentación de la fuente y la caida de voltaje en los LEDs. Por ejemplo, mi caso real con TLC5944:

Tengo IREF fijada para 60mA. Mi voltaje de alimentación de los LEDs es de 12V, y los LEDs trabajan a 6V y 60mA. Quién se hace cargo de la potencia restante que hay que disipar? Es decir, los 6V restantes a 60mA? En dónde caen? todo me hace pensar que en los TLC, siendo que la fuente de alimentación es de voltaje constante. Los TLC5944 que controlo(muy similares a los TLC5940) soportan hasta  15V de alimentación de los LEDs a 60mA por salida. Si los someto al peor caso de 100% duty, alimentación de 15V y LEDs con 2V solamente de caída, tendría que el TLC disiparía : 13V * 0.06A * 16 (salidas) = 12.5W. Será capaz de disipar esa potencia?

Tal vez alguien pueda explicarmelo.

Saludos.
 
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Controlador RGB (TLC5940)
« Respuesta #40 en: 31 de Diciembre de 2012, 15:57:06 »
Bruno, viste la fórmula de la página 26, no? ahí podes calcular cuál es la potencia que necesita disipar tu integrado. Entiendo que no podrías alimentar los led de 2V con una fuente de 15V y trabajar a 60mA sin más.

quizá estoy entendiendo mal la duda....
-
Leonardo Garberoglio

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Controlador RGB (TLC5940)
« Respuesta #41 en: 31 de Diciembre de 2012, 16:56:02 »
Hola Leo,

la pregunta creo que es si hace falta o no resistencias limitadoras en la salida de cada LED, cuando uno alimenta dichos LEDs con un voltaje superior al necesitado por los LEDs, como sucede la mayoría de las veces. Es lógico que si el voltaje suministrado a los LEDs es igual o inferior al recomendado en el datasheet del LED en uso, no haría falta dicha resistencia limitadora.

Cuando calculamos una resistencia limitadora utilizando la ley de ohm, nuestros dos datos son: el voltaje suministrado(por ser con fuente de voltaje constante), y el voltaje y corriente del LED.

En este caso donde aparecen los TLC, tenemos a mi parecer, dos valores impuestos: por un lado, en ausencia de resistencia limitadora, el voltaje suministrado a los LEDs permanecerá constante(por continuar utilizándose fuente de alimentación de voltaje constante), y por otro lado tenemos la corriente de cada nodo fijada por los TLC.

Supongamos que tengo un LED de 2V de voltaje directo de trabajo, y 60mA de corriente recomendada. Si alimento el ánodo del LED con 12V de una fuente de alimentación de voltaje constante, tengo una d.d.p. de 12V y una corriente de 60mA dada por el TLC. He conectado LEDs directos a los TLC, sin resistencia, y la d.d.p. entre ánodo y cátodo del LED es precisamente la correcta (siempre y cuando la corriente del nodo sea la adecuada para el LED), pero esto implica que el excedente de potencia está siendo disipado en algún otro punto del nodo, y todo parece apuntar que dicho punto es dentro del TLC.

Por lo tanto, recurriendo nuevamente a la ley de ohm y sabiendo que nuestra d.d.p. es de aprox. 12V y la corriente de 60mA, podríamos calcular la resistencia limitadora necesaria para que disipe el resto de la potencia haciendo:

(Vfuente - Vled) / Iref = (12 - 2)V / 0.06A = 166 ohms.

La potencia máxima disipada por la resistencia sería de 10V * 0.06A = 0.6W, lo que es bastante. Eso sería por cada salida del TLC.

En caso que no haga falta resistencias limitadoras, el TLC me parece que es el que tendría que disipar esos 0.6W por salida. Esto aplicaría para el TLC5944.

Para el TLC5940 la disipación total necesaria sería aún mayor ya que permite voltaje de alimentación de los LEDs de hasta 17V y máximo 120mA por salida.
Es decir que podríamos llegar a tener circuitos que requerirían del TLC disipando más de 30W, lo que no me parece viable aún portando su famoso PowerPAD en el pecho.

Las resistencias limitadoras permitirían disipar esa potencia fuera del TLC, manteniendo al TLC disipando sólo la potencia mínima necesaria para operar.

Espero sus opiniones, puedo estar radicalmente equivocado. Si no hacen falta las resistencias, bienvenido sea. Menos componentes y rediseño de placa por delante.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Controlador RGB (TLC5940)
« Respuesta #42 en: 31 de Diciembre de 2012, 18:41:55 »
Ok, entiendo. Bueno, para mi es como vos decís, si queres alimentar 1 solo led con 15V y setear la corriente en 60mA, toda esa potencia restante la disiparán los componentes de la fuente de corriente interna del TLC. Si la potencia es excesiva se quemará o saltará el limite de temperatura, no queda otra. Ahora si colocas resistencia en serie con la salida podes hacer, como vos decís, que esa potencia se disipe en la R serie y no en el TLC.

Mi duda es porque alimentas con una tension bastante más alta que la necesaria. No podrías hacer una fuente para alimentar los LED más cercana a la necesaria? Me parece un desperdcio de energía poner esa R en serie...

Saludos!
-
Leonardo Garberoglio

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Controlador RGB (TLC5940)
« Respuesta #43 en: 31 de Diciembre de 2012, 19:04:19 »
Mi duda es porque alimentas con una tension bastante más alta que la necesaria. No podrías hacer una fuente para alimentar los LED más cercana a la necesaria? Me parece un desperdcio de energía poner esa R en serie...

Saludos!

Era un caso muy radical. En mi caso real, alimento los LEDs con 12V y tengo configurada IREF a 60mA.En cada salida del TLC hay 9 LEDs. Están agrupados en 3 grupos en paralelo de 3 LEDs en serie c/u. Esto me da un total de 6V y 60mA para los LEDs Rojos, 9.6V y 60mA para los Verdes y 10.2V y 60mA para los Azules.

Como podrás ver, en el caso del Rojo habrá mucho desperdicio de potencia, pero en los Verdes y Azules, el voltaje requerido es muy cercano al suministrado. Es por ello que las resistencias de los rojos disiparán bastante más potencia que las otras, pero tuve que colocarle las resistencias, porque si bien como decía Marcos, no hay información disponible sobre el uso o no de resistencias limitadoras, me parece que los cálculos que hice pueden ser los correctos, y en dicho caso la presencia de resistencias es inminente en casi todos las aplicaciones.

Mis cálculos reales:

Características de los LEDs(según Datasheet):
Red:   20mA   2.0V
Green:   20mA   3.2V
Blue:    20mA   3.4V

Total de voltaje y corriente por grupo de 9 LEDs(3 grupos en paralelo de 3 LEDs en serie c/u):   
Red    =   6V   @60mA
Green    =   9.6V   @60mA
Blue   =   10.2V   @60mA

Resistencias limitadoras:
Red   =   100R   potencia disipada(max):   .360W
Green   =   40R   potencia disipada(max):   .144W
Blue   =   30R   potencia disipada(max):   .108W
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Controlador RGB (TLC5940)
« Respuesta #44 en: 31 de Diciembre de 2012, 19:11:52 »
Mira que buena informacion me terminan dando con una pregunta tan simple !!! :D :D ((:-)) ((:-)) ((:-))

Gracias !! Y feliz Año 2013 !!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


 

anything