collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]


Focos LED SMD por almamater
[16 de Dezembro de 2023, 14:12]


I Belive por dropes
[15 de Dezembro de 2023, 13:59]


Carga de corrente eletrónica ZPB30A1 60W por jm_araujo
[11 de Dezembro de 2023, 13:27]

Autor Tópico: TLC5940 - Como por a funcionar?  (Lida 14082 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
TLC5940 - Como por a funcionar?
« em: 04 de Junho de 2014, 19:34 »
Ora boas caros colegas da lusorobotica, já algum tempo que nao aparecia cá

Venho de volta pedir-vos a quem ja me ensinou tanto mais um pouco de ajuda.

Bem entao eu decidi fazer um projecto com o driver de LEDs TLC5940/TLC5941.
Andei a ler a datasheet e decidi fazer um teste ainda sem usar o SSI do meu uControlador so para ver o seu funcionamento.
Basicamente fiz um codigo usando delays e outputs digitais, tendo este um clock de frequencia mt baixo.
Pois mas entao nao funciona nada, nenhum LED liga.

Estou ciente que isto não é a melhor (senao a pior) forma de controlar este driver mas se entedi o modo de funcionamente do TLC5940, isto deveria funcionar

uControlador usado: Tiva launchpad da Texas Instruments

Liguei:
TEST a VCC
MODE a VCC
IREF com resistencia 1k a GND
CLK, XTAL, BLANK, SIN  a pin digital do uControlador
GSCLK a pin PWM do uControlador


O pseudo codigo é:

Dá sempre sinal HIGH ao pin SIN do TLC5940.
Tem sempre um sinal de PWM a 50% de duty.
Pulsa 192 vezes o CLK
Liga a HIGH o pin BLANK e rapidamente logo a seguir o pin XTAL (tambem HIGH)
Desliga o XTAL e seguidamente o BLANK

sempre assim.



Pergunta, é necessário fazer dot correction antes?
Que poderei estar a fazer mal?
Agradecia qualquer ajuda de quem ja teve experimencia com este driver
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: TLC5940 - Como por a funcionar?
« Responder #1 em: 04 de Junho de 2014, 21:13 »
Isso é um chip que precisa de muita atenção para funcionar correctamente, posso meter aqui o código que fiz para trabalhar com um atmega328p, numas matrizes de leds RGB de 4x4 que fiz.
Aconselho a ler isto, que tenho ideia que já postei num tópico teu sobre o assunto....
https://sites.google.com/site/artcfox/demystifying-the-tlc5940

Lê o PDF de ponta a ponta, depois lê o código, o meu é baseado nesse, mas com algumas alterações.

Não, o GS não é preciso para o chip funcionar, é preciso sim fazer reset ao GSCKL a cada 4096 transições.
Avr fanboy

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: TLC5940 - Como por a funcionar?
« Responder #2 em: 04 de Junho de 2014, 22:42 »
Isso é um chip que precisa de muita atenção para funcionar correctamente, posso meter aqui o código que fiz para trabalhar com um atmega328p, numas matrizes de leds RGB de 4x4 que fiz.
Aconselho a ler isto, que tenho ideia que já postei num tópico teu sobre o assunto....
https://sites.google.com/site/artcfox/demystifying-the-tlc5940

Lê o PDF de ponta a ponta, depois lê o código, o meu é baseado nesse, mas com algumas alterações.

Não, o GS não é preciso para o chip funcionar, é preciso sim fazer reset ao GSCKL a cada 4096 transições.

Obrigado, por acaso tinha esperanças de vires cá tu que lembro-me de falares de usares este chip.

Sim entao vou tentar criar um interrupt com o PWM do timer.

Depois digo como correu
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: TLC5940 - Como por a funcionar?
« Responder #3 em: 04 de Junho de 2014, 23:18 »
Podes me dizer uma coisa? Para gerar o interrupt dos steps do PWM tiveste de usar outro timer sincronizado? Parece se um problema usar o interrupt de um timer tendo ja estado configurado para PWM


A melhor solução para mim que arranjei foi uma porta ligado ao PWM com um interrupt rising edge
« Última modificação: 05 de Junho de 2014, 01:01 por LuísR.A. »
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: TLC5940 - Como por a funcionar?
« Responder #4 em: 05 de Junho de 2014, 01:08 »
Supondo que isso tem timers muito mais flexiveis que os do atmega, é simplesmente gerar um compare timer interrupt a cada 4096 ciclos do timer que está a gerar o clock, nada mais, nada menos.
Avr fanboy

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: TLC5940 - Como por a funcionar?
« Responder #5 em: 05 de Junho de 2014, 01:20 »
Supondo que isso tem timers muito mais flexiveis que os do atmega, é simplesmente gerar um compare timer interrupt a cada 4096 ciclos do timer que está a gerar o clock, nada mais, nada menos.

Até agora nao consegui ver como configurar para isso. Vou pesquisar melhor mas por agora terá de servir.

A questão é que eu para gerar PWM estou so mesmo a usar o timer, não é modulo PWM. Eu divido um timer de 32bits em 2 de 16bits
Vou ver se será possivel pelo menos com a outra metade
« Última modificação: 05 de Junho de 2014, 01:23 por LuísR.A. »
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: TLC5940 - Como por a funcionar?
« Responder #6 em: 05 de Junho de 2014, 23:43 »
Então continuo sem sucesso em sequer ligar um LED. E não estou certo porque.

Tenho o SIN sempre a 1.

Tenho um timer a executar o PWM para o GSCLK e outro a gerar um CLK. Está feito para que quando acabe o seu ciclo (de 4096 e 192 steps respetivamente), que espere que o outro acabe, estão de modo a que este tempo de espera seja o minimo possivel.

Ai depois de terem ambos feito esses cliclos, simplesmente:
Ligo BLANK
Ligo XTAL
Desligo XTAL
Desligo BLANK

Isto tudo com um delay(1); entre eles


há algo que me esteja a esquecer para o funcionamento do microcontrolador?
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

StarRider

  • Visitante
Re: TLC5940 - Como por a funcionar?
« Responder #7 em: 06 de Junho de 2014, 00:00 »
Então continuo sem sucesso em sequer ligar um LED. E não estou certo porque.

Tenho o SIN sempre a 1.

Tenho um timer a executar o PWM para o GSCLK e outro a gerar um CLK. Está feito para que quando acabe o seu ciclo (de 4096 e 192 steps respetivamente), que espere que o outro acabe, estão de modo a que este tempo de espera seja o minimo possivel.

Ai depois de terem ambos feito esses cliclos, simplesmente:
Ligo BLANK
Ligo XTAL
Desligo XTAL
Desligo BLANK

Isto tudo com um delay(1); entre eles


há algo que me esteja a esquecer para o funcionamento do microcontrolador?

Esperar como ? Dentro do interrupt do timer ? Num ciclo em que é controlado o contador do timer ?
Sem ver código é estar a dar palpites para o ar.

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: TLC5940 - Como por a funcionar?
« Responder #8 em: 06 de Junho de 2014, 00:09 »
Então continuo sem sucesso em sequer ligar um LED. E não estou certo porque.

Tenho o SIN sempre a 1.

Tenho um timer a executar o PWM para o GSCLK e outro a gerar um CLK. Está feito para que quando acabe o seu ciclo (de 4096 e 192 steps respetivamente), que espere que o outro acabe, estão de modo a que este tempo de espera seja o minimo possivel.

Ai depois de terem ambos feito esses cliclos, simplesmente:
Ligo BLANK
Ligo XTAL
Desligo XTAL
Desligo BLANK

Isto tudo com um delay(1); entre eles


há algo que me esteja a esquecer para o funcionamento do microcontrolador?

Esperar como ? Dentro do interrupt do timer ? Num ciclo em que é controlado o contador do timer ?
Sem ver código é estar a dar palpites para o ar.

dentro do interrupt so tenho controlo de variaveis.

Eu posto o codigo, qualquer duvida sobre as funçoes do api so perguntarem

Código: [Seleccione]
#include "inc/hw_ints.h"
#include "driverlib/interrupt.c"
#include "driverlib/sysctl.c"
#include "driverlib/Timer.c"


#include"inc/tm4c123gh6pm.h"

#define XLAT GPIO_PORTF_BASE, GPIO_INT_PIN_3
#define BLANK GPIO_PORTF_BASE, GPIO_INT_PIN_1

uint32_t  contaPWM =0;
uint32_t  contaCLK =0;
void setup()
{

  IntPrioritySet(INT_TIMER0B,0xE1);
  IntPrioritySet(INT_TIMER1A,0xE0);

  //pinMode(PF_3,OUTPUT);
  // put your setup code here, to run once:
  PWMoutInit();
  CLKInit();
}

void loop()
{
  // put your main code here, to run repeatedly:
  if( (contaPWM == 4096) && (contaCLK == 192) ){
    GPIOIntClear(BLANK); //MUITO necessário para resetar a flag de interrupt
    delay(1);
    GPIOIntClear(XLAT); //MUITO necessário para resetar a flag de interrupt
    GPIOIntClear(XLAT); //MUITO necessário para resetar a flag de interrupt
    delay(1);   
    GPIOIntClear(BLANK); //MUITO necessário para resetar a flag de interrupt
    delay(1);   
  }


}


void CLKInit(){

  //Configurar porta F3: Ligar GPIO, Definir bit 2 como output
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
  GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);
  // 
  unsigned long ulPeriod, dutyCycle;
  ulPeriod = 5000; // 16 Khz
  dutyCycle = ulPeriod/2; // dutyCycle é o tempo que fica a 0

  // Configure PB4 as T1CCP0
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);   
  GPIOPinConfigure(GPIO_PB4_T1CCP0);             
  GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_4); 
  //

  // Configure timer
  SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);                       
  TimerConfigure(TIMER1_BASE, TIMER_CFG_SPLIT_PAIR|TIMER_CFG_A_PWM);   
  TimerLoadSet(TIMER1_BASE, TIMER_A, ulPeriod -1);                     
  TimerMatchSet(TIMER1_BASE, TIMER_A, dutyCycle); // PWM   

  //Configura Interrupt no timer
  TimerIntRegister(TIMER1_BASE,TIMER_A,CLKint);
  TimerControlEvent(TIMER1_BASE,TIMER_A,TIMER_EVENT_POS_EDGE);
  TimerIntEnable(TIMER1_BASE,TIMER_CAPA_EVENT);

  //Liga PWM 
  TimerEnable(TIMER1_BASE, TIMER_A);
  // 


}
void PWMoutInit(){

  //Configurar porta F3: Ligar GPIO, Definir bit 3 como output
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
  GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3);
  //


  unsigned long ulPeriod, dutyCycle;
  ulPeriod = 1000; // 80 Khz
  dutyCycle = ulPeriod/2; // dutyCycle é o tempo que fica a 0

  // Configure PB7 as T0CCP1
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);   
  GPIOPinConfigure(GPIO_PB7_T0CCP1);             
  GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_7); 
  //

  // Configure timer
  SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);                       
  TimerConfigure(TIMER0_BASE, TIMER_CFG_SPLIT_PAIR|TIMER_CFG_B_PWM);   
  TimerLoadSet(TIMER0_BASE, TIMER_B, ulPeriod -1);                     
  TimerMatchSet(TIMER0_BASE, TIMER_B, dutyCycle); // PWM 

  //Configura Interrupt no timer
  TimerIntRegister(TIMER0_BASE,TIMER_B,BLANKint);
  TimerControlEvent(TIMER0_BASE,TIMER_B,TIMER_EVENT_POS_EDGE);
  TimerIntEnable(TIMER0_BASE,TIMER_CAPB_EVENT);

  //Liga o PWM
  TimerEnable(TIMER0_BASE, TIMER_B);
  //
}

void CLKint(){

  if(contaCLK < 192){
    contaCLK++;
  }
  else {
    TimerDisable(TIMER1_BASE, TIMER_A);
  }

  TimerIntClear(TIMER1_BASE, TIMER_CAPA_EVENT);    // Clear TIMER_CAPA_EVENT immediately. 

}
void BLANKint(){

  if(contaPWM < 4096){
    contaPWM++;
  }
  else {
    TimerDisable(TIMER0_BASE, TIMER_B);
  }
  TimerIntClear(TIMER0_BASE, TIMER_CAPB_EVENT);    // Clear TIMER_CAPB_EVENT immediately.
}


Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.943
  • NERD!
Re: TLC5940 - Como por a funcionar?
« Responder #9 em: 06 de Junho de 2014, 00:15 »
Lendo por alto a datasheet e uns documentos na net (http://flipmu.com/files/2011/04/Demystifying-the-TLC5940.pdf), não te esqueceste de ligar o VPRG à GND?

Edit:
Estava a ler a datasheet do TLC5940, reparei agora que pelo nome dos pinos, estás a usar o TLC5941. Nesse caso não devias ligar o MODE à GND (modo GS- GrayScale PWM). Ligado ao VCC estás em modo DC (Dot Correction)
« Última modificação: 06 de Junho de 2014, 00:20 por jm_araujo »

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: TLC5940 - Como por a funcionar?
« Responder #10 em: 06 de Junho de 2014, 00:32 »
Lendo por alto a datasheet e uns documentos na net (http://flipmu.com/files/2011/04/Demystifying-the-TLC5940.pdf), não te esqueceste de ligar o VPRG à GND?

Edit:
Estava a ler a datasheet do TLC5940, reparei agora que pelo nome dos pinos, estás a usar o TLC5941. Nesse caso não devias ligar o MODE à GND (modo GS- GrayScale PWM). Ligado ao VCC estás em modo DC (Dot Correction)

Na verdade estou ate a usar o TLC5940. Eu é que pensava que tinha o TLC5941 e fiquei com esses nomes na cabeça.
Tenho quase a certeza que liguei tudo bem mas vou ver se volta ligar tudo de novo e verificar com o multimetro de nao ha fios partidos
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.943
  • NERD!
Re: TLC5940 - Como por a funcionar?
« Responder #11 em: 06 de Junho de 2014, 00:34 »
Chamei a atenção porque no início do tópico disseste:
Liguei:
MODE a VCC
E se for assim não vai funcionar.

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: TLC5940 - Como por a funcionar?
« Responder #12 em: 06 de Junho de 2014, 00:39 »
Chamei a atenção porque no início do tópico disseste:
Liguei:
MODE a VCC
E se for assim não vai funcionar.

queres ver que sou uma besta quadrada? -.-

Obrigado pelo reparo quando puder vou tentar fazer as ligaçoes todas de novo
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.943
  • NERD!
Re: TLC5940 - Como por a funcionar?
« Responder #13 em: 06 de Junho de 2014, 00:58 »
Que exagerado :D

Antes de refazer todas as ligações, troca só o MODE e corre o código. Se era esse o erro vês logo resultados ;)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: TLC5940 - Como por a funcionar?
« Responder #14 em: 06 de Junho de 2014, 03:21 »
No pdf que deixei tem um esquema e tudo..
Avr fanboy