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.

TLC5955: TLC5955 Change configuration (DC, MC, ...) "at runtime"

Part Number: TLC5955


Hi,

Is there something specific to do if I want, for example,  to change the Dot Correction after the chip get initialized?

At startup, when I change the Dot Correction, or the Max Current, it works.
But, after I initialize the TLC5955, when I try to set another configuration (DC, or MC), it get just ignored...

The LED just get off, but when I resend a new GS, my new configuration are not applied.


Thanks for the help

  • Hi, Steven,

    Have you tried to send it twice?

    Thanks.

    Regards,

    Kenneth

  • Hi,

    Yes, I already test this solution without any success.
    The thing is, I just want to change the Dot Correction at anytime, *it works only* on the first initialization.

    All configurations (except the first) are ignored.
  • Nobody are experiencing this issue?

    Even if I deactivate the LDO of the chip, it dosn't works.
    The thing is : at startup I have no problems, I can't understand.

    What can I do for debug?
  • Hi, Steven,

    Can you attach your code and schematic for reference?

    Thanks.

    Regards,

    Kenneth

  • Hi,

    Sorry I didn't get all the things you wanted, but here is what we're doing.

    This is what we do at boot (works) :

        /* Configure HAL related timer/GPIO/SPI */
        DRV_TLC5955_init();
    
        /* These call set the values of a global array */
        DRV_TLC5955_setGlobalBrightness(E_RGB_RED, 0x7F);
        DRV_TLC5955_setGlobalBrightness(E_RGB_GREEN, 0x7F);
        DRV_TLC5955_setGlobalBrightness(E_RGB_BLUE, 0x7F);
        DRV_TLC5955_setMaximumCorrection(E_RGB_RED, 0x00);
        DRV_TLC5955_setMaximumCorrection(E_RGB_GREEN, 0x00);
        DRV_TLC5955_setMaximumCorrection(E_RGB_BLUE, 0x00);
    
        for(ledId=0 ; ledId <SRV_LED_MATRIX_LED_NUM ; ledId++)
        {
            SRV_LED_MATRIX_setLedDotCorrection(ledId, &t_LedMatrix_dotCorrection[ledId]);
        }
    
        DRV_TLC5955_setResetAutoDisplayRepeatMode(1);
        DRV_TLC5955_setResetAutoDataRefreshMode(1);
        DRV_TLC5955_setResetDisplayTimingResetMode(1);
        
        /* Send twice for Maximum Correction */
        DRV_TLC5955_sendDcMcBcFc();
        DRV_TLC5955_latchData();
        DRV_TLC5955_sendDcMcBcFc();
        DRV_TLC5955_latchData();

    And this is what we do "on runtime " (don't works) to change the dot correction :

        /* Set new value in the global array */
        SRV_LED_MATRIX_setLedDotCorrection(calib->idLed, &calib->calibData);
    
        /* Send only once because we don't want to change the 'maximum correction' - but send twice here have no effect too */
        DRV_TLC5955_sendDcMcBcFc();
        DRV_TLC5955_latchData();


    All values are set in a global array, this is why we just change a little part before sending all the values.
    We already checked in debug that values are valid, the chip seem to just ignore the new configuration...

    If we save in FLASH the new values, and load them at boot, it works.

    Do you see something bad in our code design?

  • Hi, Steven,

    Do you send GS data after you refresh DC data?

    Thanks.
    Regards,
    Kenneth