From b3d728df9177ba2e7f727176c0e92a7f0fa41007 Mon Sep 17 00:00:00 2001 From: cschwinne Date: Tue, 12 Nov 2019 19:33:34 +0100 Subject: [PATCH] Add 12V brightness limiter and configurable per-led current (#295) --- wled00/FX.h | 1 + wled00/FX_fcn.cpp | 19 ++-- wled00/data/settings_leds.htm | Bin 14294 -> 19782 bytes wled00/html_settings.h | 162 +++++++++++++++++++++------------- wled00/wled00.ino | 4 +- wled00/wled01_eeprom.ino | 23 +++-- wled00/wled02_xml.ino | 6 ++ wled00/wled03_set.ino | 4 +- wled00/wled05_init.ino | 2 +- wled00/wled18_server.ino | 4 +- wled00/wled19_json.ino | 2 +- 11 files changed, 138 insertions(+), 89 deletions(-) diff --git a/wled00/FX.h b/wled00/FX.h index 2cd886f61..f691ec850 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -363,6 +363,7 @@ class WS2812FX { paletteFade = 0, paletteBlend = 0, colorOrder = 0, + milliampsPerLed = 55, getBrightness(void), getMode(void), getSpeed(void), diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 429def728..50e881ed9 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -183,11 +183,7 @@ void WS2812FX::setCronixieDigits(byte d[]) //Stay safe with high amperage and have a reasonable safety margin! //I am NOT to be held liable for burned down garages! -//fine tune power estimation constants for your setup -#define PU_PER_MA 3600 //power units per milliamperere for accurate power estimation - //formula: 195075 divided by mA per fully lit LED, here ~54mA) - //lowering the value increases the estimated usage and therefore makes the ABL more aggressive - +//fine tune power estimation constants for your setup #define MA_FOR_ESP 100 //how much mA does the ESP use (Wemos D1 about 80mA, ESP32 about 120mA) //you can set it to 0 if the ESP is powered by USB and the LEDs by external @@ -197,12 +193,13 @@ void WS2812FX::show(void) { //one PU is the power it takes to have 1 channel 1 step brighter per brightness step //so A=2,R=255,G=0,B=0 would use 510 PU per LED (1mA is about 3700 PU) - if (ablMilliampsMax > 149 && ablMilliampsMax < 65000) //lower numbers and 65000 turn off calculation + if (ablMilliampsMax > 149 && milliampsPerLed > 0) //0 mA per LED and too low numbers turn off calculation { - uint32_t powerBudget = (ablMilliampsMax - MA_FOR_ESP) * PU_PER_MA; //100mA for ESP power - if (powerBudget > PU_PER_MA * _length) //each LED uses about 1mA in standby, exclude that from power budget + uint32_t puPerMilliamp = 195075 / milliampsPerLed; + uint32_t powerBudget = (ablMilliampsMax - MA_FOR_ESP) * puPerMilliamp; //100mA for ESP power + if (powerBudget > puPerMilliamp * _length) //each LED uses about 1mA in standby, exclude that from power budget { - powerBudget -= PU_PER_MA * _length; + powerBudget -= puPerMilliamp * _length; } else { powerBudget = 0; @@ -232,10 +229,10 @@ void WS2812FX::show(void) { uint8_t scaleB = (scaleI > 255) ? 255 : scaleI; uint8_t newBri = scale8(_brightness, scaleB); bus->SetBrightness(newBri); - currentMilliamps = (powerSum0 * newBri) / PU_PER_MA; + currentMilliamps = (powerSum0 * newBri) / puPerMilliamp; } else { - currentMilliamps = powerSum / PU_PER_MA; + currentMilliamps = powerSum / puPerMilliamp; bus->SetBrightness(_brightness); } currentMilliamps += MA_FOR_ESP; //add power of ESP back to estimate diff --git a/wled00/data/settings_leds.htm b/wled00/data/settings_leds.htm index 7c062cbcbdfc3937e24f5c1452079d9bfe6244e1..dc87e409fe829d41129c02a2bcb78e8413e8d4ab 100644 GIT binary patch delta 4137 zcmcInOKe+36rD77Z0AcFA}da4o?X($cAAev3T;Bbgs4L}BsCijV-YK!U;wl?6g^;CD0`| z1MTvSZ+C#Z;0_0wJK5!Zc%#}L^;W9(|KPbYxvQ_Y4EqH&t1F{nAlE$|ZHy?bGRQ(H z1D(bObI*!Ss8MFF!<~;)>Zp5XZLS@g-8Jlt15?`q@WV>ikGO)0+T0j@L{~>QuP$Ln zg@YP;EL=_ll}3(g^lw+ns5~F&?OcEc#3?8?zM4B?__VnM1G(4(Er=UM~2XuxG#H}PipOTrI8cns0bJq zDw(Z;;ok23C}9>-ypu{aMC83df1`z8uC-5IYD~zxjX%n3o^|=s=a&;Lp3WMAAt3}w zNNE6rl$F(1mrIb}KTsi{nW_eK6x(_XxyDtWK!Pc7YHkO+$7_gdK4vLN z)JEm5H`?u}eYhMIMkTDZsN858kf)pG;)@TU!S8f59`K8 z1bJG*6z11eJoCUm8Da?+$72CshVbQe6{!=Cv7_^GW*fIIF_=lh9Fu2=Xbnxbj9DC2 zQ<{dR%Z>m5T$2Zwc%?A$Ra* zR{v}p*z9ZntvL`;Xka8GDi@+Xax2j+PT0ROrKixkj+h6Qh@Mkh8#aPC8;F93)cEp+pukB$P?$PFKz%@|VA5ai7|&4yh;fMeVbYE#kR~ zEHZN}80S?MPtsBW>n0u!h77!5>cEeQ!<}U0A4sry~EKW-&@U&o}7VXSyI|fvjK}nR(;GRW}7FAgLZI3ni zMogyVK+kv57j7M&f^`l^vn!K(dn#g%ELx_}DkVud7YoYGSZn_*wCqrH@K)40S;boc zz89oF5yZ)Xd0`F%Hdkk=;N_|4Uscn#Fm518U#DYauKUM_7lHlG#+_TW0`fb+QgK_ zRvtMgO<8pFJbVQjv_TVTh|lVsT7?}R4KjK+ zjKRH6*6kJ8C0%CVpP1#k=|=992ukZGJH+^{#s0t1Zuuf~jg@XBE@pb)EWdx>I~geZ zl$O3^dFAUqAy=IxmP}uA1dx9U@Jr6&Fg%X;%Q!}C&2^m6WlG z9u8kxiH~b5R>uq~*3NJWd1eq~U!&Ki*| z9*y@g&$>cb5-3~J o4vS&<8-W$jV}Ng($Vl3oFFbOlQ@$D--u!tu=G%PZ;OU0{0F624{{R30 delta 524 zcmZ8eIY6cLnLuxN=HTlq!qr%xOt3vda!A8UwQC!B?v&+T zDP-WIcjd@qhZT$XJ87f1ktW=ljo-+yHJD%SLWx614+aoM2thipt#<@PHi!sxy5T$o z9qs6{D(IQ>FlXHuK zwUkm^+ZP+$YX{;?1){8LmM#PRyVlk!I(c|dgbE*fWw2N4tZhjs&0vSoMWk784)X%f zF_Om$SNOQnz?N{t;#!_qZfE$GXO6)>wIRm5EaIquESzd(Ih)ARN8p&w62<07c&d`F ydNuP_*UDOw%t Not active
//LED settings const char PAGE_settings_leds[] PROGMEM = R"=====( - -LED Settings