I have an addressable LED strip with TM1814 IC's. (So it's actually a RGBW strip. Download datasheet here.) When set to orange at full brightness, it's orange. But when set to orange at 10%, it becomes red. If I were to redesign the schematics of the LED strip, there a hardware fix? Or should the solution be found in software (gamma correction)?

Longer story:

I have two addressable LED strips:

  1. With SK6812 LEDs (similar to WS2812, upper one in photo)
  2. With TM1814 IC's and separate RGBW LEDs (lower one in photo)

Photo showing the color of the LEDs, from orange to red.

I know it's hard to see on the photo above, but on the left you can see 20% orange (R=26, G=7, B=0, W=0) and on the right 100% orange (R=255, G=70, B=0, W=0). On the upper SK6812 LED strip you see that the color is the same, and that the left part is just less bright. On the lower TM1814 LED strip, you see that the left side is not just less bright, but just has a different color. It's more red than orange. I don't want it to be red, I want it to look orange, but less bright.

The problem can be fixed by using gamma correction on the red channel in software. So when going from (R=26, G=7, B=0, W=0) to (R=19, G=7, B=0, W=0) the overall orange color is better (not so red anymore).

Although it is possible to create a nice gamma correction curve, I was wondering if there is also a hardware fix for this problem? Is it because of the choice of RGBW LEDs?

Download the TM1814 IC datasheet here.

I hope someone can help me out! Thanks in advance.

For reference, here is a photo and a typical schematic of the LED strip:

Photo of RGBW LED strip with TM1814 IC's Typical schematic of LED strip with TM1814 IC's

  • \$\begingroup\$ LED wavelengths change with different drive currents. Lasers too. Maybe tweak the R values for each colour? \$\endgroup\$
    – DKNguyen
    Oct 18, 2020 at 20:07
  • \$\begingroup\$ I don't think that's happening. The color orange is made up by red and green. When I dim the red LED individually, it just stays red. Same goes for the green LED. It's the mixing that makes it orange. The problem is that 10% of the red LED is much more red than the green LED is green at 10%. Therefore the color changes when mixing. \$\endgroup\$
    – empewoow
    Oct 18, 2020 at 20:10
  • \$\begingroup\$ Non-linear driving (is your Vcc sagging even a little bit with increased load? BOOM! Non-linear!), thermal variance (check your datasheet) and non-linear human eye perception. \$\endgroup\$
    – winny
    Oct 18, 2020 at 20:21
  • \$\begingroup\$ It looks orange to me. Darker orange, but orange still. Isn’t this just a perception issue? \$\endgroup\$
    – jcaron
    Oct 18, 2020 at 20:48
  • \$\begingroup\$ Colorspaces are not linear in intensity, so if you dim the LEDs linearly the color will change. You could design hardware that dimmed the LEDs according to a gamma curve, but software is usually how this is implemented. \$\endgroup\$ Oct 18, 2020 at 21:11

1 Answer 1


I suspect the main issue is because "255" in 8 bit PWM is not perceived by humans as "double" the brightness of "127" in 8 bit PWM.

So 255,70,0 would not directly convert to 25,7,0.

Added to that, there's the issue that at higher currents the voltage on the strip will drop more, shifting the colors of the strip.

And then on top of that, "255,255,255" would not be "white" because the efficiency of the LEDs will be different (i.e. blue will be brighter so it will be a cold-ish white, and so on).

In essence a bunch of non-linearities combined. Not ideal to try to get decent colors on addressable LED strips.

Adafruit has a nice article with suggested fixes for the perceived non linearities of the LEDs.

  • \$\begingroup\$ Thanks, I've read the Adafruit article before posting here, so I know about gamma correction. What you see also is that they do it on all channels at the same time. I would have to do it only on the red channel, as that one is more bright at lower values, compared to green. But with the SK6812 LEDs, that are perfectly calibrated, in a way that when R, G and B are at 100%, and you dim to 10%, the color is the same. So when dimming the orange color, it stays the same color. (See top LED strip in my picture.) Why can't this be achieved with the TM1814 IC and separate RGB(W) LEDs? \$\endgroup\$
    – empewoow
    Oct 19, 2020 at 11:00
  • \$\begingroup\$ By the way, there is no voltage drop on this strip, I have powered them from two sides and it doesn't fix the problem, the colors stay the same. \$\endgroup\$
    – empewoow
    Oct 19, 2020 at 11:02
  • \$\begingroup\$ I don't understand why you would want to apply gamma correction on one channel only, it helps in this case in particular but for general usage it would shift the colors even more (if green where brighter than red for instance). Powering from both sides just guarantees that the voltage drop within the strip will be more uniform than powering from one side only. You will still have the issue of voltage drop on the cable. \$\endgroup\$
    – Wesley Lee
    Oct 19, 2020 at 12:58
  • \$\begingroup\$ IMO the best software fix is the one you did, tweak it till you like the colors. The best hardware fix, if you want the best possible orange, is to use LEDs of the color you want and even then dimming it will cause a slight color shift (more so if constant-current dimming instead of PWM). \$\endgroup\$
    – Wesley Lee
    Oct 19, 2020 at 12:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.