The Official TI TLC5916 Datasheet is far more confusing on the subject of calculating the external current-setting resistor than it really needs to be.
The basic relations appear on page 17, but the detailed discussion on page 22 will make your head explode. Here’s how I see it …
VRext, the voltage across Rext, the reference resistor, is controlled by a 1.26 V band gap reference multiplied by VG, the voltage gain of a 7-bit DAC.
VRext = 1.26 V * VG
The DAC produces VG from the HC (High Current) bit and the six CC0..CC5 (Configuration Code register) bits. HC selects a range and CC0..CC5 are a binary multiplier.
VG = ((1 + HC) * (1 + CC/64) ) / 4
The minimum VG value for HC = 0 is 1/4 and the max is 1/4 + 63/256 = 127/256:
VG = (1 + CC/64)/4 = 1/4 + CC/256
The minimum VG value for HC = 1 is 1/2 and the max is 1/2 + 63/128 = 127/128:
VG = (1 + CC/64)/2 = 1/2 + CC/128
The absolute minimum VG = 0.25 happens when HG and CC0..5 are all zero. Conversely, absolute maximum VG = 0.992 happens when they’re all one.
That means VRext varies from
VRext (min) = 1.26 * 0.25 = 0.315 V
VRext (max) = 1.26 * 0.992 = 1.25 V
There’s a kink in the middle of that range, as shown in the graph on page 23, where HC shifts gears to the high range.
Rext then converts that voltage into Iref, the LED reference current:
Iref = VRext / Rext
The CG (Current Gain) multiplies Iref to set the actual LED current. The CM bit controls CG. You can either use the weird exponential formula in the datasheet or just remember:
- CM = 0 selects CG = 5
- CM = 1 selects CG = 15
Sooo, finally, Iout (LED current) is just:
Iout = CG * Iref
Knowing all that, you can choose Rext so that the absolute maximum current doesn’t exceed the LED rating:
Iout (max) = 20 mA = 15 * (1.25 V / Rext)
Which tells you that Rext must be no less than
Rext = (15 * 1.25 V) / (0.02 A) = 938 Ω
Then you can find the minimum current through the LEDs:
Iout (min) = 5 * (0.315 V / 938 Ω) = 1.68 mA
Now, given that the chip’s specs seem to indicate that the minimum regulated current is 5 mA, I suspect that all bets are off as regards linearity and matching and all that. Given that my friend wants a really dim clock, I think this will work out just fine…
Memo to Self: For whatever reason (and it must be a real stinker), TI numbers the CC bits backwards. CC0 is the Most Significant Bit, CC5 is the Least Significant Bit.
And because CC5 is the first bit shifted into the TLC5916’s shift register, you must run the Arduino hardware-assisted SPI in LSB-first mode.