Adding 16-bit brightness control to LCD backlight
This commit is contained in:
parent
581b464a13
commit
64b232c878
44
Scan/STLcd/capabilities.kll
Normal file
44
Scan/STLcd/capabilities.kll
Normal file
@ -0,0 +1,44 @@
|
||||
Name = STLcdCapabilities;
|
||||
Version = 0.1;
|
||||
Author = "HaaTa (Jacob Alexander) 2015";
|
||||
KLL = 0.3c;
|
||||
|
||||
# Modified Date
|
||||
Date = 2015-08-01;
|
||||
|
||||
# Defines available to the STLcd sub-module
|
||||
|
||||
# PWM Prescalar
|
||||
# In general this can be left alone
|
||||
# A higher prescalar should be lower power usage (less switching)
|
||||
# However, flickering may be noticeable.
|
||||
#
|
||||
# Here's a calculation table valid at a 72 MHz system clock
|
||||
# Prescalars range from 0 to 7 (1 to 128)
|
||||
# 0 - 72 MHz - Highest power usage/best result
|
||||
# 1 - 36 MHz
|
||||
# 2 - 18 MHz
|
||||
# 3 - 9 MHz - Slightly visible flicker (peripheral vision)
|
||||
# 4 - 4 500 kHz - Visible flickering
|
||||
# 5 - 2 250 kHz
|
||||
# 6 - 1 125 kHz
|
||||
# 7 - 562 500 Hz
|
||||
# Defaulting to no prescalar, looks the best
|
||||
STLcdBacklightPrescalar => STLcdBacklightPrescalar_define;
|
||||
STLcdBacklightPrescalar = 0;
|
||||
|
||||
# Default Backlight Channel Brightness
|
||||
# There are 3 channels, RGB
|
||||
# In order to get other colors you must mix the 3 colors
|
||||
# Each channel is a 16-bit register (65536 levels)
|
||||
# Technically, this means, the backlight is a 48-bit RGB pixel
|
||||
# In practice, it may be difficult to get color consistency at times if too bright or too dim
|
||||
STLcdBacklightRed => STLcdBacklightRed_define;
|
||||
STLcdBacklightGreen => STLcdBacklightGreen_define;
|
||||
STLcdBacklightBlue => STLcdBacklightBlue_define;
|
||||
|
||||
# Defaults to 6% brightness, white
|
||||
STLcdBacklightRed = 0xFFF;
|
||||
STLcdBacklightGreen = 0xFFF;
|
||||
STLcdBacklightBlue = 0xFFF;
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
// Project Includes
|
||||
#include <cli.h>
|
||||
#include <kll.h>
|
||||
#include <led.h>
|
||||
#include <print.h>
|
||||
|
||||
@ -276,16 +277,49 @@ inline void LCD_setup()
|
||||
|
||||
// Setup Backlight
|
||||
// TODO Expose default settings
|
||||
// TODO Setup PWM
|
||||
GPIOC_PDDR |= (1<<1);
|
||||
PORTC_PCR1 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1);
|
||||
GPIOC_PCOR |= (1<<1);
|
||||
GPIOC_PDDR |= (1<<2);
|
||||
PORTC_PCR2 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1);
|
||||
GPIOC_PCOR |= (1<<2);
|
||||
GPIOC_PDDR |= (1<<3);
|
||||
PORTC_PCR3 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1);
|
||||
GPIOC_PCOR |= (1<<3);
|
||||
SIM_SCGC6 |= SIM_SCGC6_FTM0;
|
||||
FTM0_CNT = 0; // Reset counter
|
||||
|
||||
// PWM Period
|
||||
// 16-bit maximum
|
||||
FTM0_MOD = 0xFFFF;
|
||||
|
||||
// Set FTM to PWM output - Edge Aligned, Low-true pulses
|
||||
FTM0_C0SC = 0x24; // MSnB:MSnA = 10, ELSnB:ELSnA = 01
|
||||
FTM0_C1SC = 0x24;
|
||||
FTM0_C2SC = 0x24;
|
||||
|
||||
// Base FTM clock selection (72 MHz system clock)
|
||||
// Pre-scalar calculations
|
||||
// 0 - 72 MHz - Highest power usage/best result
|
||||
// 1 - 36 MHz
|
||||
// 2 - 18 MHz
|
||||
// 3 - 9 MHz - Slightly visible flicker (peripheral vision)
|
||||
// 4 - 4 500 kHz - Visible flickering
|
||||
// 5 - 2 250 kHz
|
||||
// 6 - 1 125 kHz
|
||||
// 7 - 562 500 Hz
|
||||
// System clock, /w prescalar setting
|
||||
FTM0_SC = FTM_SC_CLKS(1) | FTM_SC_PS( STLcdBacklightPrescalar_define );
|
||||
|
||||
/* Write frequency TODO API
|
||||
FTM0_SC = 0;
|
||||
FTM0_CNT = 0;
|
||||
FTM0_MOD = mod;
|
||||
FTM0_SC = FTM_SC_CLKS(1) | FTM_SC_PS(prescale);
|
||||
*/
|
||||
|
||||
// Red
|
||||
FTM0_C0V = STLcdBacklightRed_define;
|
||||
PORTC_PCR1 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(4);
|
||||
|
||||
// Green
|
||||
FTM0_C1V = STLcdBacklightGreen_define;
|
||||
PORTC_PCR2 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(4);
|
||||
|
||||
// Blue
|
||||
FTM0_C2V = STLcdBacklightBlue_define;
|
||||
PORTC_PCR3 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(4);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user