PontusO / mlight-4_2_pmd

4/2 channel LED light controller
1 stars 0 forks source link

Rewrite the lin/log conversion #26

Closed PontusO closed 12 years ago

PontusO commented 12 years ago

Currently the lin/log conversion is based on a integer math implementation that requires the use of 32-bit integers making it consume a lot of both FLASH memory and RAM. It also suffers from the fact that the input argument ranges from 0 to 100 (0% - 100%) which makes small steps clearly visible. Also the current log function is shifted to much towards the upper end of the scale.

PontusO commented 12 years ago

The exp function was replace by a pre calculated exponential table in flash and a function that interpolates between points in that table to reach high accuracy on the light settings. This surgery also reduced the flash usage another 2-3 kbytes Yuhuuu.....

Usage, When setting up ramps the "Ramp to Level" value have been extended to go between 0-1000 to give the extra resolution. However we could easily have a small translator in the parameter reader and the cgi that converts this to normal 0-100% values if this is desired.

PontusO commented 12 years ago

With some restructuring of the interpolation algorithm the resolution was increased on smaller numbers which made it look even better than before.

AndreasKSweden commented 12 years ago

Jag har testat lite nu och jag är tveksam till att köra logaritmiskt faktiskt. När man tänt ljuset 50% (500% enligt status sidan) så har man knappt något ljus alls. Vid 70% är det lite bättre men den mesta ljusstegringen sker från 85% och framåt. Jag skulle vilja testa att ha helt linjärt ljus.

PontusO commented 12 years ago

De går utmärkt att testa detta. Funktionen calc_pwm i filen lib/lightlib.c är den som gör mappningen av värdena. Här kan du lägga in en formel som omvandlar ljusinvärdet (0-1000) till ett pwm värde (0-65535).

Men jag tror inte att det är det som är problemet. Har du möjlighet att testa en list på ditt labbaggregat ? Ställ in aggregatet på den önskade maxströmmen och kör mlighten med det istället.

Jag ska prova att köra lite xp-g'er jag också och se om jag kan se samma fenomen.

PontusO commented 12 years ago

Jag har provat att köra (och lyckats bränna en också =) två stycken XP-G lister på både ett linjärt labbaggregat samt med den AC/DC MeanWell drivaren jag lånat av Dig och det fungerar klockrent här hemma. Ska prova med den andra MW drivaren också för att se om det är någon skillnad.

PontusO commented 12 years ago

Vi fortsätter diskussionen i issue #27 som är öppen i investigating så stänger jag denna så länge.