]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Adding cli API call to set LCD backlight brightness (16 bit per channel)
authorJacob Alexander <haata@kiibohd.com>
Sun, 2 Aug 2015 05:47:34 +0000 (22:47 -0700)
committerJacob Alexander <haata@kiibohd.com>
Sun, 2 Aug 2015 05:47:34 +0000 (22:47 -0700)
Scan/STLcd/capabilities.kll
Scan/STLcd/lcd_scan.c

index a327bc2529743c46c321371f61fdaf2205e198ea..73a97e1c597e5301688933675ff552fb75d5a977 100644 (file)
@@ -15,15 +15,19 @@ Date = 2015-08-01;
 #
 # 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
+
+# Base FTM clock selection (72 MHz system clock)
+# @ 0xFFFF period, 72 MHz / 0xFFFF * 2 = Actual period
+# Higher pre-scalar will use the most power (also look the best)
+# Pre-scalar calculations
+# 0 -      72 MHz -> 549 Hz
+# 1 -      36 MHz -> 275 Hz
+# 2 -      18 MHz -> 137 Hz
+# 3 -       9 MHz ->  69 Hz (Slightly visible flicker)
+# 4 -   4 500 kHz ->  34 Hz (Visible flickering)
+# 5 -   2 250 kHz ->  17 Hz
+# 6 -   1 125 kHz ->   9 Hz
+# 7 - 562 500  Hz ->   4 Hz
 STLcdBacklightPrescalar => STLcdBacklightPrescalar_define;
 STLcdBacklightPrescalar = 0;
 
@@ -38,7 +42,7 @@ STLcdBacklightGreen => STLcdBacklightGreen_define;
 STLcdBacklightBlue  => STLcdBacklightBlue_define;
 
 # Defaults to 6% brightness, white
-STLcdBacklightRed   = 0xFFF;
-STLcdBacklightGreen = 0xFFF;
-STLcdBacklightBlue  = 0xFFF;
+STLcdBacklightRed   = 0x0FFF;
+STLcdBacklightGreen = 0x0FFF;
+STLcdBacklightBlue  = 0x0FFF;
 
index 49a1b82e6f6ed547c0e3d2f66085d2f18c06c29a..b4933cb9cb8d894e5f29f448681c82099eb7c8c1 100644 (file)
 // ----- Function Declarations -----
 
 // CLI Functions
-void cliFunc_lcdCmd( char* args );
-void cliFunc_lcdInit( char* args );
-void cliFunc_lcdTest( char* args );
+void cliFunc_lcdCmd  ( char* args );
+void cliFunc_lcdColor( char* args );
+void cliFunc_lcdInit ( char* args );
+void cliFunc_lcdTest ( char* args );
 
 
 
@@ -65,11 +66,13 @@ uint8_t cliNormalReverseToggleState = 0;
 
 // Scan Module command dictionary
 CLIDict_Entry( lcdCmd,      "Send byte via SPI, second argument enables a0. Defaults to control." );
+CLIDict_Entry( lcdColor,    "Set backlight color. 3 16-bit numbers: R G B. i.e. 0xFFF 0x1444 0x32" );
 CLIDict_Entry( lcdInit,     "Re-initialize the LCD display." );
 CLIDict_Entry( lcdTest,     "Test out the LCD display." );
 
 CLIDict_Def( lcdCLIDict, "ST LCD Module Commands" ) = {
        CLIDict_Item( lcdCmd ),
+       CLIDict_Item( lcdColor ),
        CLIDict_Item( lcdInit ),
        CLIDict_Item( lcdTest ),
        { 0, 0, 0 } // Null entry for dictionary end
@@ -290,25 +293,23 @@ inline void LCD_setup()
        FTM0_C2SC = 0x24;
 
        // Base FTM clock selection (72 MHz system clock)
+       // @ 0xFFFF period, 72 MHz / 0xFFFF * 2 = Actual period
+       // Higher pre-scalar will use the most power (also look the best)
        // 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
+       // 0 -      72 MHz -> 549 Hz
+       // 1 -      36 MHz -> 275 Hz
+       // 2 -      18 MHz -> 137 Hz
+       // 3 -       9 MHz ->  69 Hz (Slightly visible flicker)
+       // 4 -   4 500 kHz ->  34 Hz (Visible flickering)
+       // 5 -   2 250 kHz ->  17 Hz
+       // 6 -   1 125 kHz ->   9 Hz
+       // 7 - 562 500  Hz ->   4 Hz
+       // Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced
+       // Which will reduce the brightness range
+
        // 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);
@@ -400,3 +401,34 @@ cmd:
        LCD_writeControlReg( cmd );
 }
 
+void cliFunc_lcdColor( char* args )
+{
+       char* curArgs;
+       char* arg1Ptr;
+       char* arg2Ptr = args;
+
+       // Colors
+       uint16_t rgb[3]; // Red, Green, Blue
+
+       // Parse integers from 3 arguments
+       for ( uint8_t color = 0; color < 3; color++ )
+       {
+               curArgs = arg2Ptr;
+               CLI_argumentIsolation( curArgs, &arg1Ptr, &arg2Ptr );
+
+               // Give up if not enough args given
+               if ( *arg1Ptr == '\0' )
+                       return;
+
+               // Convert argument to integer
+               rgb[ color ] = numToInt( arg1Ptr );
+       }
+
+       // Set PWM channels
+       FTM0_C0V = rgb[0];
+       FTM0_C1V = rgb[1];
+       FTM0_C2V = rgb[2];
+
+       print( NL ); // No \r\n by default after the command is entered
+}
+