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
|
// Project Includes
|
||||||
#include <cli.h>
|
#include <cli.h>
|
||||||
|
#include <kll.h>
|
||||||
#include <led.h>
|
#include <led.h>
|
||||||
#include <print.h>
|
#include <print.h>
|
||||||
|
|
||||||
@ -276,16 +277,49 @@ inline void LCD_setup()
|
|||||||
|
|
||||||
// Setup Backlight
|
// Setup Backlight
|
||||||
// TODO Expose default settings
|
// TODO Expose default settings
|
||||||
// TODO Setup PWM
|
SIM_SCGC6 |= SIM_SCGC6_FTM0;
|
||||||
GPIOC_PDDR |= (1<<1);
|
FTM0_CNT = 0; // Reset counter
|
||||||
PORTC_PCR1 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1);
|
|
||||||
GPIOC_PCOR |= (1<<1);
|
// PWM Period
|
||||||
GPIOC_PDDR |= (1<<2);
|
// 16-bit maximum
|
||||||
PORTC_PCR2 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1);
|
FTM0_MOD = 0xFFFF;
|
||||||
GPIOC_PCOR |= (1<<2);
|
|
||||||
GPIOC_PDDR |= (1<<3);
|
// Set FTM to PWM output - Edge Aligned, Low-true pulses
|
||||||
PORTC_PCR3 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1);
|
FTM0_C0SC = 0x24; // MSnB:MSnA = 10, ELSnB:ELSnA = 01
|
||||||
GPIOC_PCOR |= (1<<3);
|
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