New: LED Power / Battery Management New on the FastLED 2.1 branch:

Ok, some more results for you. All these 640 pixels on full-white:

set_max_power_in_milliwatts(5000);
power demand at full brightness mW = 165905
power limit mW = 5000
recommended brightness # = 7
resultant power demand mW = 4536
8.7W, LED on

set_max_power_in_milliwatts(10000);
power demand at full brightness mW = 165905
power limit mW = 10000
recommended brightness # = 15
resultant power demand mW = 9720
11.4W, LED on

set_max_power_in_milliwatts(20000);
power demand at full brightness mW = 165905
power limit mW = 20000
recommended brightness # = 30
resultant power demand mW = 19441
21.1W, LED on

set_max_power_in_milliwatts(30000);
power demand at full brightness mW = 165905
power limit mW = 30000
recommended brightness # = 46
resultant power demand mW = 29811
33.8W, LED on

set_max_power_in_milliwatts(40000);
power demand at full brightness mW = 165905
power limit mW = 40000
recommended brightness # = 61
resultant power demand mW = 39532
44.8W, LED on

set_max_power_in_milliwatts(50000);
power demand at full brightness mW = 165905
power limit mW = 50000
recommended brightness # = 77
resultant power demand mW = 49901
56.4W, LED on

set_max_power_in_milliwatts(60000);
power demand at full brightness mW = 165905
power limit mW = 60000
recommended brightness # = 92
resultant power demand mW = 59622
67.2W, LED on

set_max_power_in_milliwatts(70000);
power demand at full brightness mW = 165905
power limit mW = 70000
recommended brightness # = 108
resultant power demand mW = 69991
78.6W, LED on

set_max_power_in_milliwatts(80000);
power demand at full brightness mW = 165905
power limit mW = 80000
recommended brightness # = 123
resultant power demand mW = 79712
89.2W, LED on

set_max_power_in_milliwatts(90000);
power demand at full brightness mW = 165905
power limit mW = 90000
recommended brightness # = 138
resultant power demand mW = 89433
99.8W, LED on

set_max_power_in_milliwatts(100000);
power demand at full brightness mW = 165905
power limit mW = 100000
recommended brightness # = 154
resultant power demand mW = 99802
110.5W, LED on.

So, that looks better.

Great data and thank you.
I’ll commit a couple of small code changes Really appreciate all the help and it looks like it’s ready for prime/playa time!

Here’s some output with max power as 20000, running a sound-activated version of Fire2012, which hovers between about 12W and 25W depending on how loud it is:
power demand at full brightness mW = 24341
power limit mW = 20000
recommended brightness # = 210
resultant power demand mW = 19967

power demand at full brightness mW = 22087
power limit mW = 20000
recommended brightness # = 231
resultant power demand mW = 19930

power demand at full brightness mW = 21183
power limit mW = 20000
recommended brightness # = 241
resultant power demand mW = 19941

power demand at full brightness mW = 19451
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 18785
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 18613
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 18149
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 17101
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 17800
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 18305
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 19354
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 18756
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 19778
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 20073
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 20605
power limit mW = 20000
recommended brightness # = 248
resultant power demand mW = 19961

power demand at full brightness mW = 22089
power limit mW = 20000
recommended brightness # = 231
resultant power demand mW = 19931

power demand at full brightness mW = 23529
power limit mW = 20000
recommended brightness # = 217
resultant power demand mW = 19944

power demand at full brightness mW = 23641
power limit mW = 20000
recommended brightness # = 216
resultant power demand mW = 19947

power demand at full brightness mW = 23713
power limit mW = 20000
recommended brightness # = 215
resultant power demand mW = 19915

power demand at full brightness mW = 22752
power limit mW = 20000
recommended brightness # = 225
resultant power demand mW = 19996

power demand at full brightness mW = 22044
power limit mW = 20000
recommended brightness # = 232
resultant power demand mW = 19977

power demand at full brightness mW = 21296
power limit mW = 20000
recommended brightness # = 240
resultant power demand mW = 19965

power demand at full brightness mW = 19610
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 17747
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 17166
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 16188
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 15516
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 14617
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 13755
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 13950
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 14865
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 17051
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 19658
power limit mW = 20000
demand is under the limitpower demand at full brightness mW = 20522
power limit mW = 20000
recommended brightness # = 249
resultant power demand mW = 19960

power demand at full brightness mW = 20898
power limit mW = 20000
recommended brightness # = 245
resultant power demand mW = 20000

power demand at full brightness mW = 21395
power limit mW = 20000
recommended brightness # = 239
resultant power demand mW = 19974

power demand at full brightness mW = 20865
power limit mW = 20000
recommended brightness # = 245
resultant power demand mW = 19968

power demand at full brightness mW = 21421
power limit mW = 20000
recommended brightness # = 239
resultant power demand mW = 19998

power demand at full brightness mW = 20157
power limit mW = 20000
recommended brightness # = 254
resultant power demand mW = 19999

No man, it’s all you. What turned out to be the problem in the end? Overflow somewhere?

Looks great, and working as intended now. Updates committed. It looks like it was a 16-bit overflow issue when there were lots of LEDs. I may yet make an AVR assembly version of (parts of) this code, but I think we’re good for now. Thanks very much for the boots-on-the-ground testing and debugging! The new power coefficients that I committed are a blend of my previous findings and the new power measurements that you did. So…

If you’re measuring power wattage on the pre-PSU side of things, and you want to limit things on that side, you’ll want to cut the wattage that you tell to set_max_power_in_milliwatts to account for losses in the PSU. E.g., if you want a to stay under 20 Watts on the input side of your PSU, and your PSU is (let’s say) 80% efficient, you’ll want to do this:
set_max_power_in_milliwatts( 20000 * 0.80 ); // = 16W on output side

FASTLED CAN’T HANDLE MY SCALE!

:smiley:

(Thanks so much for all your awesome work on this btw. You’ve almost certainly saved me from blowing myself up!)

Drat! That woulda looked hella cool on playa… all those amps…

Can the new power management stuff be used with the normal setBrightness()? I.e., it’ll take the lower of the two? Having now hooked everything up in a dark room, I realise I might want to manually turn it down a bit :slight_smile:

Yep! Works great with setBrightness!
The only thing it doesn’t take into account (yet) is the color and temperature calibrations, but it errs on the conservative side so no worries.

Quick clarification question on your documentation you’ve presented here. First you say, “specify the maximum power (in milliamps) that you want your LEDs to draw” which I took to mean the max power for each led to consume. Later you say “specify the maximum power you want your project to draw”. This indicates to me total power for everything. I take the latter to be your meaning, but just want to be clear before I go accidentally burning something out.

Yep! You are correct: the power limit you specify is for the whole collection of LEDs together. Let us know how it goes!