This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/TLC5926-Q1: LED Driver Forum

Part Number: TLC5926-Q1

Tool/software: Code Composer Studio

Hi, 

Could you please share TLC5926-Q1 control source code, can't find in TI web.

Thank you.

  • How do you need to control the TLC5926-Q1? What is the application? 

  • We wants to use cascade of 2pcs 5927.
    And also need to switch mode between normal and special.
    It is efficiently to do our experiment if we have reference code.

    This application is about calculating diopter by flash LEDs in order.
  • #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_sysctl.h"
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_nvic.h"
    #include "inc/hw_gpio.h"
    #include "driverlib/gpio.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/systick.h"
     
    //define delay time 
    #define DELAY_TIME 100
     
    //SDI define SDI
    #define SDI_HEIGHT       GPIOPinWrite(GPIO_PORTJ_BASE, GPIO_PIN_0, ~0);
    #define SDI_LOW          GPIOPinWrite(GPIO_PORTJ_BASE, GPIO_PIN_0, 0);
     
    //CLK define CLK
    #define CLK_HEIGHT       GPIOPinWrite(GPIO_PORTJ_BASE, GPIO_PIN_2, ~0);
    #define CLK_LOW          GPIOPinWrite(GPIO_PORTJ_BASE, GPIO_PIN_2, 0);
     
    //LE define LE
    #define LE_HEIGHT       GPIOPinWrite(GPIO_PORTJ_BASE, GPIO_PIN_3, ~0);
    #define LE_LOW          GPIOPinWrite(GPIO_PORTJ_BASE, GPIO_PIN_3, 0);
     
    //OE define OE
    #define OE_HEIGHT       GPIOPinWrite(GPIO_PORTJ_BASE, GPIO_PIN_4, ~0);
    #define OE_LOW          GPIOPinWrite(GPIO_PORTJ_BASE, GPIO_PIN_4, 0);
     
    //define read SDO
    #define SDO_READ        (GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PIN_1) >> 1)
    #define OUT_ENABLE 		OE_LOW
     
    // mode
    #define NORMAL_MODE 0
    #define SPECIAL_MODE 1
     
    //CLK plus function
    void clkPlus();
    
    // send data with IO and simulate SPI behavior
    void SendData(unsigned char uData);
    //set mode
    void SetMode(unsigned char uMode);
    //send command in special mode to adjust the DC
    void SendCmd(unsigned char uCmd);
    
    //read error code
    unsigned int ReadErrCode();
     
    int main()
    {
           HWREG(SYSCTL_MWRALLOW) =  0xA5A5A5A5;
           unsigned int err;
           unsigned int utData = 0x01;
           unsigned long deData1 = 1000;
           unsigned long deData2 = 1000;
           unsigned long deData3 = 10;
           SysCtlClockConfigSet(SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_2 | SYSCTL_USE_PLL |
                                           (SYSCTL_SPLLIMULT_M & 0x0F));
           // set the GPIO pin function  
           SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
           // send SDI pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_0);
           // send CLK pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_2);
           // set LE pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_3);
           // set OE pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_4);
           // set SDO pin as input
           GPIOPinTypeGPIOInput(GPIO_PORTJ_BASE, GPIO_PIN_5);
     
           LE_HEIGHT;
           OE_HEIGHT;
           CLK_LOW;
     
     
           while(1)
           {
    //rolling effect
                  SendData(utData);                        //set data, rolling effect
                  utData = utData << 1;
    //max LED value is 8.
                  if(utData == 256)
                         utData = 0x01;
     		
                  //enter special mode
                  SetMode(SPECIAL_MODE);                   //special mode
                  err = ReadErrCode();                     //read error code
                                                           // error bit is 0
    //send LED brightness is 50%
     			SendCmd(0xef);
    //return to normal mode
                  SetMode(NORMAL_MODE);                    // set to normal mode
                  OE_LOW;
     
                  while(deData1)                           //rolling effect
                  {
                         deData1 --;
                         while(deData2)
                         {
                                deData2 --;
                                while(deData3)
                                       deData3 --;
                         }
                  }
     
                  deData1 = 1000;
                  deData2 = 1000;
                  deData3 = 10;
    //enter special mode
     			SetMode(SPECIAL_MODE);
    //set 100% brightened 
    			SendCmd(0xff);
    //enter normalmode
    			SetMode(NORMAL_MODE);
           }	
           return 0;
    }
     
    //send data
    void SendData(unsigned char sData)
    {
           unsigned long deData = DELAY_TIME;
           unsigned char times = 8;
     
           LE_LOW;
           CLK_LOW;
     
           while(times)
           {
                  if(sData & 0x80)
                  {
                         SDI_HEIGHT;
                  }
                  else
                  {
                         SDI_LOW;
                  }
     
                  clkPlus();
     
                  sData = sData << 1;
                  times --;
           }
     
           LE_HEIGHT;
           while(deData)
                  deData --;
           LE_LOW;
    }
     
    //set mode
    void SetMode(unsigned char uMode)
    {
           unsigned long deData = DELAY_TIME;
     
           LE_LOW;
           CLK_LOW;
           while(deData)
                  deData --;
           deData = DELAY_TIME;
     
           OE_HEIGHT;
           clkPlus();
     
           OE_LOW;
           clkPlus();
     
           OE_HEIGHT;
           clkPlus();
     
           if(uMode == SPECIAL_MODE)
           {
                  LE_HEIGHT;
           }
           else
           {
                  LE_LOW;
           }
           clkPlus();
     
           LE_LOW;
           clkPlus();
    }
     
    //send command
    void SendCmd(unsigned char uCmd)
    {
           unsigned long deData = DELAY_TIME;
           unsigned char time = 8;
     
           CLK_LOW;
           OE_HEIGHT;
           LE_LOW;
           while(deData)
                  deData --;
           deData = DELAY_TIME;
     	
          //send data command
           while(time)
           {
                  if(uCmd & 0x80)
                  {
                         SDI_HEIGHT;
                  }
                  else
                  {
                         SDI_LOW;
                  }
                  if(time == 1)
                  {
                         LE_HEIGHT;
                  }
                  clkPlus();
     
                  uCmd = uCmd << 1;
                  time --;
           }
           LE_LOW;
           clkPlus();
    }
     
    //read error code
    unsigned int ReadErrCode()
    {
           unsigned long deData = 500;
           unsigned long temp;
           unsigned int index = 8;
           unsigned int errCode = 0x00;
     
           CLK_LOW;
           LE_LOW;
           OE_HEIGHT;
           clkPlus();
     
           OE_LOW;
           while(deData)
           {
                  clkPlus();
                  deData --;
           }
     
           CLK_HEIGHT;
           deData = DELAY_TIME;
           while(deData)
                  deData --;
           deData = DELAY_TIME;
           OE_HEIGHT;
     
           while(index)
           {
                  index --;
                  CLK_LOW;
                  temp = GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PIN_5);
                  while(deData)
                         deData --;
                  deData = DELAY_TIME;
                  if(temp != 0)
                  {
                         errCode = errCode | (0x01 << index);
                  }
     
                  CLK_HEIGHT;
                  while(deData)
                         deData --;
                  deData = DELAY_TIME;
           }
           return errCode;
    }
     
    //simulate CLK
    void clkPlus()
    {
           unsigned long deData = DELAY_TIME;
     
           CLK_HEIGHT;
           while(deData)
                  deData --;
           deData = DELAY_TIME;
     
           CLK_LOW;
           while(deData)
                  deData --;
           deData = DELAY_TIME;
    }
    
    
    
    //the 100% brightness main
    int main()
    {
           HWREG(SYSCTL_MWRALLOW) =  0xA5A5A5A5;
           unsigned int err;
           unsigned int utData = 0x01;
           unsigned long deData1 = 1000;
           unsigned long deData2 = 1000;
           unsigned long deData3 = 10;
           SysCtlClockConfigSet(SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_2 | SYSCTL_USE_PLL |
                                           (SYSCTL_SPLLIMULT_M & 0x0F));
           // set the GPIO pin function  
           SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
           // send SDI pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_0);
           // send CLK pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_2);
           // set LE pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_3);
           // set OE pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_4);
           // set SDO pin as input
           GPIOPinTypeGPIOInput(GPIO_PORTJ_BASE, GPIO_PIN_5);
     
           LE_HEIGHT;
           OE_HEIGHT;
           CLK_LOW;
           while(1)
           {
     SendData(0xff); 
    //enter specialmode
     SetMode(SPECIAL_MODE);
    //send LED 100% brightness
    SendCmd(0xff);
    //进入normal模式
    SetMode(NORMAL_MODE);		
           }
           return 0;
    }
    //set the 50% brightness main function
    int main()
    {
           HWREG(SYSCTL_MWRALLOW) =  0xA5A5A5A5;
           unsigned int err;
           unsigned int utData = 0x01;
           unsigned long deData1 = 1000;
           unsigned long deData2 = 1000;
           unsigned long deData3 = 10;
           SysCtlClockConfigSet(SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_2 | SYSCTL_USE_PLL |
                                           (SYSCTL_SPLLIMULT_M & 0x0F));
           // set the GPIO pin function  
           SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
           // send SDI pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_0);
           // send CLK pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_2);
           // set LE pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_3);
           // set OE pin as output
           GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE, GPIO_PIN_4);
           // set SDO pin as input
           GPIOPinTypeGPIOInput(GPIO_PORTJ_BASE, GPIO_PIN_5);
     
           LE_HEIGHT;
           OE_HEIGHT;
           CLK_LOW;
           while(1)
           {
     SendData(0xff); 
    //enter special mode
     SetMode(SPECIAL_MODE);
    //set LED 50% brightness
    SendCmd(0xef);
    // ENTER normal mode
    SetMode(NORMAL_MODE);		
           }
           return 0;
    }
    
    
    

  • Hi Anda~
    Thank you :)