Adding 16-bit brightness control to LCD backlight
This commit is contained in:
		
							parent
							
								
									581b464a13
								
							
						
					
					
						commit
						64b232c878
					
				
					 2 changed files with 88 additions and 10 deletions
				
			
		
							
								
								
									
										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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue