CIE 1931 for the LCD backlight
This commit is contained in:
parent
f113f95440
commit
951b6f33a0
2 changed files with 29 additions and 6 deletions
|
@ -70,10 +70,33 @@ void lcd_backlight_hal_init(void) {
|
|||
RGB_PORT->PCR[BLUE_PIN] = RGB_MODE;
|
||||
}
|
||||
|
||||
static uint16_t cie_lightness(uint16_t v) {
|
||||
// The CIE 1931 formula for lightness
|
||||
// Y = luminance (output) 0-1
|
||||
// L = lightness input 0 - 100
|
||||
|
||||
// Y = (L* / 902.3) if L* <= 8
|
||||
// Y = ((L* + 16) / 116)^3 if L* > 8
|
||||
|
||||
float l = 100.0f * (v / 65535.0f);
|
||||
float y = 0.0f;
|
||||
if (l <= 8.0f) {
|
||||
y = l / 902.3;
|
||||
}
|
||||
else {
|
||||
y = ((l + 16.0f) / 116.0f);
|
||||
y = y * y * y;
|
||||
if (y > 1.0f) {
|
||||
y = 1.0f;
|
||||
}
|
||||
}
|
||||
return y * 65535.0f;
|
||||
}
|
||||
|
||||
void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) {
|
||||
CHANNEL_RED.CnV = r;
|
||||
CHANNEL_GREEN.CnV = g;
|
||||
CHANNEL_BLUE.CnV = b;
|
||||
CHANNEL_RED.CnV = cie_lightness(r);
|
||||
CHANNEL_GREEN.CnV = cie_lightness(g);
|
||||
CHANNEL_BLUE.CnV = cie_lightness(b);
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue