mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-04 07:12:33 +01:00 
			
		
		
		
	adds backlight levels to the satan keyboard (#431)
* enable 4 levels * remove breathing stuff * update channels, comments, hex
This commit is contained in:
		
							parent
							
								
									e329729d3a
								
							
						
					
					
						commit
						464c8e274f
					
				@ -68,10 +68,6 @@ AUDIO_ENABLE ?= no
 | 
				
			|||||||
UNICODE_ENABLE ?= no 		# Unicode
 | 
					UNICODE_ENABLE ?= no 		# Unicode
 | 
				
			||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
					BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef BACKLIGHT_ENABLE
 | 
					 | 
				
			||||||
    SRC := backlight.c $(SRC)
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ifndef QUANTUM_DIR
 | 
					ifndef QUANTUM_DIR
 | 
				
			||||||
	include ../../Makefile
 | 
						include ../../Makefile
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
				
			|||||||
@ -1,24 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
#include <avr/io.h>
 | 
					 | 
				
			||||||
#include "backlight.h"
 | 
					 | 
				
			||||||
#include "print.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void init_backlight_pin(void) {
 | 
					 | 
				
			||||||
    print("init_backlight_pin()\n");
 | 
					 | 
				
			||||||
    // Set our LED pins as output
 | 
					 | 
				
			||||||
    DDRB |= (1<<6);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Set our LED pins low
 | 
					 | 
				
			||||||
    PORTB &= ~(1<<6);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void backlight_set(uint8_t level) {
 | 
					 | 
				
			||||||
    if ( level == 0 ) {
 | 
					 | 
				
			||||||
        // Turn off light
 | 
					 | 
				
			||||||
        PORTB |= (1<<6);
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        // Turn on light
 | 
					 | 
				
			||||||
        PORTB &= ~(1<<6);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -59,7 +59,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* Backlight configuration
 | 
					/* Backlight configuration
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define BACKLIGHT_LEVELS 1
 | 
					#define BACKLIGHT_LEVELS 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Underlight configuration
 | 
					/* Underlight configuration
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
				
			|||||||
										
											Binary file not shown.
										
									
								
							@ -14,6 +14,64 @@ void matrix_scan_user(void) {
 | 
				
			|||||||
	// leave these blank
 | 
						// leave these blank
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef BACKLIGHT_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void backlight_init_ports()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Setup PB6 as output and output low.
 | 
				
			||||||
 | 
					    DDRB |= (1<<6);
 | 
				
			||||||
 | 
					    PORTB &= ~(1<<6);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Use full 16-bit resolution.
 | 
				
			||||||
 | 
					    ICR1 = 0xFFFF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // I could write a wall of text here to explain... but TL;DW
 | 
				
			||||||
 | 
					    // Go read the ATmega32u4 datasheet.
 | 
				
			||||||
 | 
					    // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Pin PB6 = OCR1B (Timer 1, Channel C)
 | 
				
			||||||
 | 
					    // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
 | 
				
			||||||
 | 
					    // (i.e. start high, go low when counter matches.)
 | 
				
			||||||
 | 
					    // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
 | 
				
			||||||
 | 
					    // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TCCR1A = _BV(COM1B1) | _BV(WGM11); // = 0b00001010;
 | 
				
			||||||
 | 
					    TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    backlight_init();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void backlight_set(uint8_t level)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Prevent backlight blink on lowest level
 | 
				
			||||||
 | 
					    PORTB &= ~(_BV(PORTB6));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( level == 0 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Turn off PWM control on PB6, revert to output low.
 | 
				
			||||||
 | 
					        TCCR1A &= ~(_BV(COM1B1));
 | 
				
			||||||
 | 
					        OCR1B = 0x0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if ( level == BACKLIGHT_LEVELS )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Turn on PWM control of PB6
 | 
				
			||||||
 | 
					        TCCR1A |= _BV(COM1B1);
 | 
				
			||||||
 | 
					        // Set the brightness
 | 
				
			||||||
 | 
					        OCR1B = 0xFFFF;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Turn on PWM control of PB6
 | 
				
			||||||
 | 
					        TCCR1A |= _BV(COM1B1);
 | 
				
			||||||
 | 
					        // Set the brightness
 | 
				
			||||||
 | 
					        OCR1B = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void matrix_init_kb(void) {
 | 
					void matrix_init_kb(void) {
 | 
				
			||||||
	// put your keyboard start-up code here
 | 
						// put your keyboard start-up code here
 | 
				
			||||||
	// runs once when the firmware starts up
 | 
						// runs once when the firmware starts up
 | 
				
			||||||
@ -23,7 +81,7 @@ void matrix_init_kb(void) {
 | 
				
			|||||||
	led_init_ports();
 | 
						led_init_ports();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #ifdef BACKLIGHT_ENABLE
 | 
					    #ifdef BACKLIGHT_ENABLE
 | 
				
			||||||
        init_backlight_pin();
 | 
					        backlight_init_ports();
 | 
				
			||||||
    #endif
 | 
					    #endif
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user