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.

TLC59116: Unwanted light flashes

Part Number: TLC59116
Other Parts Discussed in Thread: TIDA-03026

We are experiencing unwnated short flashes of some LEDs if we dim the LEDs dynamically via the GRPPWM register.

Background:
We want to display some kind of a "breathing effect", i.e. slow, continuously dimming up and down of 16 RGB-Leds which are connected to three TLC59116.

Vled is 5V; Vcc is 3.3V
Rext is 1k69

This is the initialization of the ICs:

setChipRegister(I2C_ADR_LED_DRIVER_1, MODE1, 1);
setChipRegister(I2C_ADR_LED_DRIVER_2, MODE1, 1);
setChipRegister(I2C_ADR_LED_DRIVER_3, MODE1, 1);

/* oscillator internal to led-driver-chip needs approx. 0.5ms startup time */
CyDelay(1); // delay of 1ms

setChipRegister(I2C_ADR_LED_DRIVER_ALL, MODE2, 0);
setChipRegister(I2C_ADR_LED_DRIVER_ALL, GRPPWM, 0);
setChipRegister(I2C_ADR_LED_DRIVER_ALL, LEDOUT0, 0xFF);
setChipRegister(I2C_ADR_LED_DRIVER_ALL, LEDOUT1, 0xFF);
setChipRegister(I2C_ADR_LED_DRIVER_ALL, LEDOUT2, 0xFF);
setChipRegister(I2C_ADR_LED_DRIVER_ALL, LEDOUT3, 0xFF);
setChipRegister(I2C_ADR_LED_DRIVER_ALL, IREF, 0x3F);

The used I2C-addresses are as follows:
#define I2C_ADR_LED_DRIVER_1 (0xC0)
#define I2C_ADR_LED_DRIVER_2 (0xC2)
#define I2C_ADR_LED_DRIVER_3 (0xC4)
#define I2C_ADR_LED_DRIVER_ALL (0xD0)

After setting the individual brightness registers PWM0 to PWM15,
we send every 30ms the following command, where brightness is incremented from 0 to max (i.e. 0x40) and back to zero again in steps of one:
setChipRegister(I2C_ADR_LED_DRIVER_ALL, GRPPWM, brightness);

But there are unwanted intermittent (very short) changes of brightness, which look like short flashes.
I can prepare a video if necessary.

We checked the I2C communication and the commands are all send correctly.
Tests were done with 100kBit and 400kBit.
No difference there and no errors on the I2C lines.

Are we doing something wrong?
Is there another way to achieve the desired effect?

Thanks in advance and best regards,
Martin

  • Minor correction:
    Vcc is tied to Vled, so Vcc is also 5V
  • Can nobody help, please?

  • Hi, Martin,

    Sorry for the delay.

    This should be the way to achieve the breathing effect.

    Can you give a quick video for this?

    Let me also double check the code.

    Thanks.
    Regards,
    Kenneth
  • Hi Kenneth,

    thanks for helping.

    I made a video showing the issue.

    Making the recording eith a mobile phone was more difficule then expected, but I think it is o.k..

    The first occurence of an error is right after 1 second.

    Then a couple of times every few seconds.

    Please let me know, when you need more information.

    Best regards,

    Martin

  • Hi, Martin,

    That is quite strange.

    Let me double check about you code on my board.

    Thanks.
    Regards,
    Kenneth
  • Hi Kenneth,

    indeed, this is strange.

    I did some further tests and found that it is not necessary to dim the LEDs like shown in the video.

    The same effect occurs, if the GRPPWM register is toggled between two values, for example 0x1A and 0x1B every 30ms.
    Is it possible, that this is some kind of synchronization effect with the internal 190Hz PWM?
    To double check, I also send the same value every time. This does not show the error.
    So it is not the write command to the GRPPWM register itself, but the change of the GRPPWM register, it seems.

    I really hope, we can fix this by software, because this is an already finished design.
    We have 30 prototype boards here and are ready to release the design to production, just this effect is stopping us now.

    Best regards,
    Martin

  • Hi, Martin,

    This should be OK and I suggest you to refer to TIDA-03026.
    www.ti.com/.../watch.tsp
    In the following user guide, it mentions "Each of the TLC59116 LED drivers has an internal oscillator, which can vary due to process variation.
    Therefore, when using multiple TLC59116 devices to control one RGB LED, the difference in timing between each LED driver can be visually noticed. To fix this issue, the LED drivers need to be periodically reset so that all devices are in sync. The reset and reinitialization happens so quickly that it is visually undetectable."
    www.ti.com/.../tiduc95.pdf

    This should help you.

    Thanks.
    Regards,
    Kenneth
  • Hi Kenneth,

    thanks for the hint.

    I implemented a software reset and reinitialization every time the brightness goes to zero during the breathing effect.

    But unfortunately this doesn't help.

    Is the source code of the TIDA-03026 available?

    Maybe I am still doing something wrong?

    I can see that the reset command is working because the LEDs stay off if I disable the reinitialization after the reset command.

    Is there a recommended intervall, in which the reset command should be send?

    Best regards,

    Martin

  • Hi Kenneth,

    do you have any news regarding this issue?

    You mentioned that you would try to reproduce this on your Eval-Board, did you had a chance to do this?

    I tried to download the design files of TIDA-03026, but I get an error that the files are not available.
    As mentioned in my precious post, sending a reset command to the driver doesn't help.

    I am really stuck on this without help from TI.

    Best regards,
    Martin

  • Hi, Martin,

    Sorry for the delay.

    Would you try to insert some Reset in your code to try if it solves your problem?

    It should be easy to insert some SWRST and initiation code in your current software and the period can be adjusted based on the results.

    Please let me know if this solves your problem.
    Thanks.
    Regards,
    Kenneth
  • Hi Kenneth,

    please take a look at my message from June 27.

    As mentioned there, I implemented the software reset and reinitialization  command.

    But this didn't change the behaviour. The issue is not affected by this measure.

    Best regards,

    Martin