Ir ao conteúdo
  • Cadastre-se

TLC5940 Biblioteca para CCS C


Posts recomendados

Boa tarde pessoal,

há tempos atras eu havia postado que estaria fazendo testes com o CI TLC5940, que é de 12 bits/16 saidas PWM independentes e é muito usado em displays de led rgb. Na época eu até comprei algumas peças para fazer testes e os testes foram bem sucedidos. Agora estou aprofundando no sistema e preciso de mais recursos, o driver que eu consegui é funcional, porém encontrei um outro bem completo só que é para C18. Seria uma boa fazer a tradução deste c18 para ccs c. Alguém se habilita a me ajudar? 

 

 

Vou disponibilizar dois arquivos, um é o driver para CCS C e o outro é um projeto completo para C18.

 

RGB_Bargraph_Firmware_2.zip

 

tlc5940.rar

 

Atenciosamente, Vinícius Cruz.

 

Já havia me esquecendo de postar a fonte deste projeto completo: http://www.waitingforfriday.com/index.php/USB_RGB_LED_VU_Meter

Link para o comentário
Compartilhar em outros sites

 

Então, li, mas não entendi a relação rsrs

A primeira dúvida: como traduzir esta parte para CCS C

// Initialise the displayvoid initialiseRgbDisplay(void){   // Get the TLC5940s ready for action   initialiseTlc5940();      // Write the default values to the display state model   for (int rgbLedNumber = 0; rgbLedNumber < 16; rgbLedNumber++)   {      display.rgbLed[rgbLedNumber].redTarget = 0;      display.rgbLed[rgbLedNumber].greenTarget = 0;      display.rgbLed[rgbLedNumber].blueTarget = 0;            display.rgbLed[rgbLedNumber].redActual = 0;      display.rgbLed[rgbLedNumber].greenActual = 0;      display.rgbLed[rgbLedNumber].blueActual = 0;            display.rgbLed[rgbLedNumber].redFadeSpeed = 0;      display.rgbLed[rgbLedNumber].greenFadeSpeed = 0;      display.rgbLed[rgbLedNumber].blueFadeSpeed = 0;            display.rgbLed[rgbLedNumber].redFadeCounter = 0;      display.rgbLed[rgbLedNumber].greenFadeCounter = 0;      display.rgbLed[rgbLedNumber].blueFadeCounter = 0;            display.rgbLed[rgbLedNumber].fadeOnSpeed = 0;      display.rgbLed[rgbLedNumber].fadeOffSpeed = 0;   }      display.brightnessCounter = 0;   }

esta parte inicializa o tlc5940 e está no arquivo rgbled.c

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Este é outro patamar de pisca led que ainda não atingi mas vejamos um de meus chutes

amigo @ViniciusKruz , esta parte é c nativo. É parte de uma struct/union qualquer. voce não precisa necessariamente "traduzir". Seu foco de preocupação vai ser apenas na parte de inicializar o hw do mc. O resto é c puro. bom pelo menos era pra ser. ouvi dizer que cc não segue padrões de c ao pé da letra. Portanto, analise nos fontes onde e quando há menção dos circuitos e pinos do seu mc e faça o traslado tranquilamente. Depois disso, erros de sintaxe mínimos de fácil correção devem aparecer. Corrija-os.

 

Posso não ter ajudado muito mas.. boa intenção conta?

Link para o comentário
Compartilhar em outros sites

De boa intenção dizem que o inferno está cheio (hahahahaha) Isadora... 

brincadeiras à parte...

eu já imaginava que seria alguma coisa específica do compilador C18. 

Quanto a me concentrar na inicialização, a tradução dela é mais fácil, ela fica em void "initialiseTlc5940()" dentro de tlc5940.c.

 

De repente seria melhor aprimorar o driver que citei acima, porque já é próprio do ccs c, talvez seja mais fácil, dá uma olhada e me diga o que acha? 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

realmente estruturas em c é um treco bem sinistro e até hoje me arrancam cabelo. Mas basicamente são variáveis. Não sei o que quiseste dizer com aprimorar. Seria facilitar a compreensão, trocar de tipo de variável ou algo assim? Não sei se vale a pena. Tente portar como está mesmo. Sinto não analisar o código todo mas sinto que o que o sw driver acima faz é essencialmente zerar memória ou dados que serão enviados pro hw driver. não?

Também não conheço tal tlc5940. Qualquer hora dou uma olhada...

sono......

Link para o comentário
Compartilhar em outros sites

Resumindo as funções deste CI, ele é basicamente como o hc595, a diferença é que no tlc as saídas são PWMs individuais.

 

Aprimorar que eu digo seria adicionar algumas funções que ele não possui, além de estar enviando dados somente para o primeiro CI, se ligo 3 peças em cascata, todas elas recebem os dados igualmente, nesse caso será necessário fazer com que eu possa escolher o endereço de qualquer um deles separadamente, no 74hc595 isso é bem fácil de fazer.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Só porque você insistiu dei uma lida rápida no d.s.

Sério? só se comunicam em cascata? sei não, acho que é cascata hein. Tenta algo tipo assim:

-pinos clock e dado em comum pra todos mesmo.

-individualize cada um com o pino XLAT. o que você não quer mexer, deixe o XLAT queto. Talvez tenha que individualizar o pino VPRG também. sei lá...

-como o acionamento del é +- simples, crie seu proprio driver baseando-se no que você quer efetivamente fazer com ele. (pisca pisca de natal p.ex. anda logo! falta pouco!). Dá só uma olhadela no que os cara fizeram e copie uma coisa ou outra.

 

Bom por hora é o que saiu. O phd em leds é o amigo @ Talvez ele já tenha usado este driver. Só não conta muito com isso pois afinal é o ganha pão dele. E sabe como é que é né... neste caso não se pode abrir as per.. ops... torneiras do conhecimento.

Link para o comentário
Compartilhar em outros sites

Hahahaha, bem humorada você heim!!!

Em um outro driver eu fiz isto que você sugeriu de isolar o pino de ativação do comando e deu certo. Será uma boa opção pelo menos para testes.

 

Agora entendi porque o @ me direcionou para um site impertinente ao assunto, ele estava defendendo o pão dele hahahaha

 

Assim que eu fizer os novos testes postarei o resultado. Minha intenção não é somente aprender a lidar com este CI, mas também deixar registrado aqui uma boa solução para quem se interessar.

 

Abraço!!

Link para o comentário
Compartilhar em outros sites

@ViniciusKruz,

Se voce ligar tres em cascata, basta enviar os dados em sequência, que já vai completando o primeiro e indo para o segundo, e quando completar o segundo já vai para o terceiro. Basta observar o protocolo no Datasheet quando se cascateia dois desses CIs, e estender o mesmo principio para o terceiro ou quantos mais existirem em cascata.

Eu tenho 10 desses CIs comigo ( foi uma oferta irresistível no Ebay... ) mais ainda não montei nada com eles, quem sabe me animo agora !

Paulo

Link para o comentário
Compartilhar em outros sites

@ViniciusKruz,

Se voce ligar tres em cascata, basta enviar os dados em sequência, que já vai completando o primeiro e indo para o segundo, e quando completar o segundo já vai para o terceiro. Basta observar o protocolo no Datasheet quando se cascateia dois desses CIs, e estender o mesmo principio para o terceiro ou quantos mais existirem em cascata.

Eu tenho 10 desses CIs comigo ( foi uma oferta irresistível no Ebay... ) mais ainda não montei nada com eles, quem sabe me animo agora !

Paulo

Então, acredito que hoje terei tempo pra testar, vou analisar com cuidado o ds e também o driver do ccs. Na verdade minha intenção quando criei este post, era "traduzir" o driver do C18 que citei, este sim é um excelente driver, tem todas as funções necessárias. Mas seguindo os conselhos da Isadora, irei começar do zero com base neste driver da ccs c mesmo. Uma coisa já percebi, o pino que deve ser ativado após o envio serial parece ser o XLAT, Tem que testar pra ver. 

 

Abraço.

 

A proposito, Paulo, testa os CIs aí que você vai curtir.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

seguir o que disse o manual é muito fácil. aí fica xato. o legal mesmo é desafiar as regras. brinc... Na verdade o que teorizei é que se eu ligar 100 destes em série e quiser alterar o brilho apenas do 100°, teria que fazer 99 shifts inúteis por isso a teoria do controle individual que nem sei que dá certo.

 

Se você's me disserem algum uso prático pra isso além de pisca de natal e afins, quem sabe me animo a adquirir alguns...

Link para o comentário
Compartilhar em outros sites

Feedback... suando a camisa...

 

 

consegui ter algum progresso:

void TLC5940_SetGS_And_GS_PWM() {                                                     short firstCycle = FALSE;    unsigned char Data_Cnt = 0;    unsigned long GSCLK_Cnt = 0;     indexmxDsp=1;   if(bit_test(PORTB, 0))    {       output_low(VPRG);       firstCycle = TRUE;                     }       output_low(BLANK);   while(TRUE)         {                   if(indexMxDsp==1){         if(!(Data_Cnt > 191))          {                           output_low(SIN);                         output_high(SCLK);             output_low(SCLK);                        Data_Cnt++;                         }                       }            if(indexMxDsp==2){         if(!(Data_Cnt > 191))          {                           output_low(SIN);             output_high(SCLK);             output_low(SCLK);                        Data_Cnt++;                         }                    }            if(indexMxDsp==3){         if(!(Data_Cnt > 191))          {              if(gsData[Data_cnt])            {                      output_high(SIN);             }                        else                    {                      output_low(SIN);             }                                  output_high(SCLK);             output_low(SCLK);                        Data_Cnt++;                         }                       }               output_high(GSCLK);         output_low(GSCLK);                   GSCLK_cnt++;               if(GSCLK_cnt > 4095)       {         output_high(BLANK);         GSCLK_cnt=0;         Data_Cnt=0;         indexMxDsp++;         if(indexMxDsp>3){            //output_toggle(pin_a1);//teste            output_high(XLAT);            output_low(XLAT);            break;                             }      }   }                                    } 

Alterando esta função consegui enviar para 3 TLCs em sequencia. Parece pouco mas por hora foi o que deu pra fazer. Desta forma aí, está dando "flick" nos leds, mas só de conseguir resolver a lógica já é alguma coisa. Até!! 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...