fix power calculation for NeoPixelBusLg
power estimation results from estimateCurrentAndLimitBri() were too low (example: estimated 1.3Amp, measured 1.6Amp). This change corrects the power calculation. Due to the changed behavior of getPixelColor, powerSum must be used as-is, not scaled down again by brightness.
This commit is contained in:
parent
196779ffb6
commit
788a276616
@ -1223,7 +1223,8 @@ void WS2812FX::estimateCurrentAndLimitBri() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32_t powerSum0 = powerSum;
|
uint32_t powerSum0 = powerSum;
|
||||||
powerSum *= _brightness;
|
//powerSum *= _brightness; // for NPBrightnessBus
|
||||||
|
powerSum *= 255; // no need to scale down powerSum - NPB-LG getPixelColor returns colors scaled down by brightness
|
||||||
|
|
||||||
if (powerSum > powerBudget) //scale brightness down to stay in current limit
|
if (powerSum > powerBudget) //scale brightness down to stay in current limit
|
||||||
{
|
{
|
||||||
@ -1232,9 +1233,10 @@ void WS2812FX::estimateCurrentAndLimitBri() {
|
|||||||
uint8_t scaleB = (scaleI > 255) ? 255 : scaleI;
|
uint8_t scaleB = (scaleI > 255) ? 255 : scaleI;
|
||||||
uint8_t newBri = scale8(_brightness, scaleB);
|
uint8_t newBri = scale8(_brightness, scaleB);
|
||||||
// to keep brightness uniform, sets virtual busses too - softhack007: apply reductions immediately
|
// to keep brightness uniform, sets virtual busses too - softhack007: apply reductions immediately
|
||||||
if (scaleB < 255) busses.setBrightness(scaleB, true); // NPB-LG has already applied brightness, so its suffifient to post-apply scaling
|
if (scaleB < 255) busses.setBrightness(scaleB, true); // NPB-LG has already applied brightness, so its suffifient to post-apply scaling ==> use scaleB instead of newBri
|
||||||
busses.setBrightness(newBri, false); // set new brightness for next frame
|
busses.setBrightness(newBri, false); // set new brightness for next frame
|
||||||
currentMilliamps = (powerSum0 * newBri) / puPerMilliamp;
|
//currentMilliamps = (powerSum0 * newBri) / puPerMilliamp; // for NPBrightnessBus
|
||||||
|
currentMilliamps = (powerSum0 * scaleB) / puPerMilliamp; // for NPBus-LG
|
||||||
} else {
|
} else {
|
||||||
currentMilliamps = powerSum / puPerMilliamp;
|
currentMilliamps = powerSum / puPerMilliamp;
|
||||||
busses.setBrightness(_brightness, false); // set new brightness for next frame
|
busses.setBrightness(_brightness, false); // set new brightness for next frame
|
||||||
|
Loading…
Reference in New Issue
Block a user