mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-30 21:02:32 +01:00 
			
		
		
		
	moves backlight functionality to keyboard files and updates template makefile
previously there were two backlight.c files (bad)
This commit is contained in:
		
							parent
							
								
									9ab7098c83
								
							
						
					
					
						commit
						0656f2fa10
					
				| @ -171,10 +171,6 @@ endif | ||||
| 
 | ||||
| endif | ||||
| 
 | ||||
| ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) | ||||
| 	SRC := backlight.c $(SRC) | ||||
| endif | ||||
| 
 | ||||
| # Optimize size but this may cause error "relocation truncated to fit"
 | ||||
| #EXTRALDFLAGS = -Wl,--relax
 | ||||
| 
 | ||||
|  | ||||
| @ -57,3 +57,64 @@ void led_set_kb(uint8_t usb_led) { | ||||
| 
 | ||||
| 	led_set_user(usb_led); | ||||
| } | ||||
| 
 | ||||
| #ifdef BACKLIGHT_ENABLE | ||||
| #define CHANNEL OCR1C | ||||
| 
 | ||||
| void backlight_init_ports() | ||||
| { | ||||
| 
 | ||||
|     // Setup PB7 as output and output low.
 | ||||
|     DDRB |= (1<<7); | ||||
|     PORTB &= ~(1<<7); | ||||
|      | ||||
|     // 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 PB7 = OCR1C (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(COM1C1) | _BV(WGM11); // = 0b00001010;
 | ||||
|     TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
 | ||||
| 
 | ||||
|     backlight_init(); | ||||
| } | ||||
| 
 | ||||
| void backlight_set(uint8_t level) | ||||
| { | ||||
|     if ( level == 0 ) | ||||
|     { | ||||
|         // Turn off PWM control on PB7, revert to output low.
 | ||||
|         TCCR1A &= ~(_BV(COM1C1)); | ||||
|         CHANNEL = 0x0; | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|     } | ||||
|     else if ( level == BACKLIGHT_LEVELS ) | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF; | ||||
|     } | ||||
|     else         | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| @ -3,8 +3,11 @@ | ||||
| 
 | ||||
| #include "matrix.h" | ||||
| #include "keymap_common.h" | ||||
| #include "backlight.h" | ||||
| #ifdef BACKLIGHT_ENABLE | ||||
|     #include "backlight.h" | ||||
| #endif | ||||
| #include <stddef.h> | ||||
| #include <avr/io.h> | ||||
| 
 | ||||
| // This a shortcut to help you visually see your layout.
 | ||||
| // The following is an example using the Planck MIT layout
 | ||||
|  | ||||
| @ -1,63 +0,0 @@ | ||||
| 
 | ||||
| #include <avr/io.h> | ||||
| #include "backlight.h" | ||||
| #include "atomic.h" | ||||
| 
 | ||||
| 
 | ||||
| #define CHANNEL OCR1C | ||||
| 
 | ||||
| void backlight_init_ports() | ||||
| { | ||||
| 
 | ||||
|     // Setup PB7 as output and output low.
 | ||||
|     DDRB |= (1<<7); | ||||
|     PORTB &= ~(1<<7); | ||||
|      | ||||
|     // 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 PB7 = OCR1C (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(COM1C1) | _BV(WGM11); // = 0b00001010;
 | ||||
|     TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
 | ||||
| 
 | ||||
|     backlight_init(); | ||||
| } | ||||
| 
 | ||||
| void backlight_set(uint8_t level) | ||||
| { | ||||
|     if ( level == 0 ) | ||||
|     { | ||||
|         // Turn off PWM control on PB7, revert to output low.
 | ||||
|         TCCR1A &= ~(_BV(COM1C1)); | ||||
|         CHANNEL = 0x0; | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|     } | ||||
|     else if ( level == BACKLIGHT_LEVELS ) | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF; | ||||
|     } | ||||
|     else         | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); | ||||
|     } | ||||
| } | ||||
| @ -171,10 +171,6 @@ endif | ||||
| 
 | ||||
| endif | ||||
| 
 | ||||
| ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) | ||||
| 	SRC := backlight.c $(SRC) | ||||
| endif | ||||
| 
 | ||||
| # Optimize size but this may cause error "relocation truncated to fit"
 | ||||
| #EXTRALDFLAGS = -Wl,--relax
 | ||||
| 
 | ||||
|  | ||||
| @ -1,61 +0,0 @@ | ||||
| 
 | ||||
| #include <avr/io.h> | ||||
| #include "backlight.h" | ||||
| 
 | ||||
| #define CHANNEL OCR1C | ||||
| 
 | ||||
| void backlight_init_ports() | ||||
| { | ||||
| 
 | ||||
|     // Setup PB7 as output and output low.
 | ||||
|     DDRB |= (1<<7); | ||||
|     PORTB &= ~(1<<7); | ||||
|      | ||||
|     // 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 PB7 = OCR1C (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(COM1C1) | _BV(WGM11); // = 0b00001010;
 | ||||
|     TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
 | ||||
| 
 | ||||
|     backlight_init(); | ||||
| } | ||||
| 
 | ||||
| void backlight_set(uint8_t level) | ||||
| { | ||||
|     if ( level == 0 ) | ||||
|     { | ||||
|         // Turn off PWM control on PB7, revert to output low.
 | ||||
|         TCCR1A &= ~(_BV(COM1C1)); | ||||
|         CHANNEL = 0x0; | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|     } | ||||
|     else if ( level == BACKLIGHT_LEVELS ) | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF; | ||||
|     } | ||||
|     else         | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); | ||||
|     } | ||||
| } | ||||
| @ -32,3 +32,64 @@ void matrix_scan_kb(void) { | ||||
| void process_action_kb(keyrecord_t *record) { | ||||
| 	process_action_user(record); | ||||
| } | ||||
| 
 | ||||
| #ifdef BACKLIGHT_ENABLE | ||||
| #define CHANNEL OCR1C | ||||
| 
 | ||||
| void backlight_init_ports() | ||||
| { | ||||
| 
 | ||||
|     // Setup PB7 as output and output low.
 | ||||
|     DDRB |= (1<<7); | ||||
|     PORTB &= ~(1<<7); | ||||
|      | ||||
|     // 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 PB7 = OCR1C (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(COM1C1) | _BV(WGM11); // = 0b00001010;
 | ||||
|     TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
 | ||||
| 
 | ||||
|     backlight_init(); | ||||
| } | ||||
| 
 | ||||
| void backlight_set(uint8_t level) | ||||
| { | ||||
|     if ( level == 0 ) | ||||
|     { | ||||
|         // Turn off PWM control on PB7, revert to output low.
 | ||||
|         TCCR1A &= ~(_BV(COM1C1)); | ||||
|         CHANNEL = 0x0; | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|     } | ||||
|     else if ( level == BACKLIGHT_LEVELS ) | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF; | ||||
|     } | ||||
|     else         | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| @ -10,6 +10,7 @@ | ||||
|   #include "rgblight.h" | ||||
| #endif | ||||
| #include <stddef.h> | ||||
| #include <avr/io.h> | ||||
| #ifdef MIDI_ENABLE | ||||
| 	#include <keymap_midi.h> | ||||
| #endif | ||||
|  | ||||
| @ -162,11 +162,6 @@ endif | ||||
| 
 | ||||
| endif | ||||
| 
 | ||||
| ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) | ||||
| 	SRC := backlight.c $(SRC) | ||||
| endif | ||||
| 
 | ||||
| 
 | ||||
| # Optimize size but this may cause error "relocation truncated to fit"
 | ||||
| #EXTRALDFLAGS = -Wl,--relax
 | ||||
| 
 | ||||
|  | ||||
| @ -1,61 +0,0 @@ | ||||
| 
 | ||||
| #include <avr/io.h> | ||||
| #include "backlight.h" | ||||
| 
 | ||||
| #define CHANNEL OCR1C | ||||
| 
 | ||||
| void backlight_init_ports() | ||||
| { | ||||
| 
 | ||||
|     // Setup PB7 as output and output low.
 | ||||
|     DDRB |= (1<<7); | ||||
|     PORTB &= ~(1<<7); | ||||
|      | ||||
|     // 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 PB7 = OCR1C (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(COM1C1) | _BV(WGM11); // = 0b00001010;
 | ||||
|     TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
 | ||||
| 
 | ||||
|     backlight_init(); | ||||
| } | ||||
| 
 | ||||
| void backlight_set(uint8_t level) | ||||
| { | ||||
|     if ( level == 0 ) | ||||
|     { | ||||
|         // Turn off PWM control on PB7, revert to output low.
 | ||||
|         TCCR1A &= ~(_BV(COM1C1)); | ||||
|         CHANNEL = 0x0; | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|     } | ||||
|     else if ( level == BACKLIGHT_LEVELS ) | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF; | ||||
|     } | ||||
|     else         | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); | ||||
|     } | ||||
| } | ||||
| @ -39,3 +39,64 @@ void matrix_scan_kb(void) { | ||||
| void process_action_kb(keyrecord_t *record) { | ||||
| 	process_action_user(record); | ||||
| } | ||||
| 
 | ||||
| #ifdef BACKLIGHT_ENABLE | ||||
| #define CHANNEL OCR1C | ||||
| 
 | ||||
| void backlight_init_ports() | ||||
| { | ||||
| 
 | ||||
|     // Setup PB7 as output and output low.
 | ||||
|     DDRB |= (1<<7); | ||||
|     PORTB &= ~(1<<7); | ||||
|      | ||||
|     // 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 PB7 = OCR1C (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(COM1C1) | _BV(WGM11); // = 0b00001010;
 | ||||
|     TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
 | ||||
| 
 | ||||
|     backlight_init(); | ||||
| } | ||||
| 
 | ||||
| void backlight_set(uint8_t level) | ||||
| { | ||||
|     if ( level == 0 ) | ||||
|     { | ||||
|         // Turn off PWM control on PB7, revert to output low.
 | ||||
|         TCCR1A &= ~(_BV(COM1C1)); | ||||
|         CHANNEL = 0x0; | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|     } | ||||
|     else if ( level == BACKLIGHT_LEVELS ) | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF; | ||||
|     } | ||||
|     else         | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| @ -10,6 +10,7 @@ | ||||
|   #include "rgblight.h" | ||||
| #endif | ||||
| #include <stddef.h> | ||||
| #include <avr/io.h> | ||||
| #ifdef MIDI_ENABLE | ||||
| 	#include <keymap_midi.h> | ||||
| #endif | ||||
|  | ||||
| @ -111,7 +111,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512 | ||||
| 
 | ||||
| 
 | ||||
| # Build Options
 | ||||
| #   comment out to disable the options.
 | ||||
| #   change yes to no to disable
 | ||||
| #
 | ||||
| BOOTMAGIC_ENABLE = yes      # Virtual DIP switch configuration(+1000) | ||||
| MOUSEKEY_ENABLE = yes       # Mouse keys(+4700) | ||||
| @ -120,14 +120,32 @@ CONSOLE_ENABLE = yes		# Console for debug(+400) | ||||
| COMMAND_ENABLE = yes        # Commands for debug and configuration | ||||
| KEYBOARD_LOCK_ENABLE = yes  # Allow locking of keyboard via magic key | ||||
| # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | ||||
| # SLEEP_LED_ENABLE = yes	# Breathing sleep LED during USB suspend
 | ||||
| #NKRO_ENABLE = yes			# USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | ||||
| # BACKLIGHT_ENABLE = yes	# Enable keyboard backlight functionality
 | ||||
| # MIDI_ENABLE = YES			# MIDI controls
 | ||||
| # UNICODE_ENABLE = YES		# Unicode
 | ||||
| # BLUETOOTH_ENABLE = yes	# Enable Bluetooth with the Adafruit EZ-Key HID
 | ||||
| SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend | ||||
| # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | ||||
| NKRO_ENABLE = no            # USB Nkey Rollover | ||||
| BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality | ||||
| MIDI_ENABLE = no            # MIDI controls | ||||
| UNICODE_ENABLE = no         # Unicode | ||||
| BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID | ||||
| AUDIO_ENABLE = no           # Audio output on port C6 | ||||
| 
 | ||||
| 
 | ||||
| ifdef KEYMAP | ||||
| 
 | ||||
| ifeq ("$(wildcard keymaps/$(KEYMAP).c)","") | ||||
| ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","") | ||||
|     include keymaps/$(KEYMAP)/makefile.mk | ||||
| endif  | ||||
| endif | ||||
| 
 | ||||
| else | ||||
| 
 | ||||
| ifneq ("$(wildcard keymaps/default/makefile.mk)","") | ||||
|     include keymaps/default/makefile.mk | ||||
| endif | ||||
| 
 | ||||
| endif | ||||
| 
 | ||||
| # Optimize size but this may cause error "relocation truncated to fit"
 | ||||
| #EXTRALDFLAGS = -Wl,--relax
 | ||||
| 
 | ||||
|  | ||||
| @ -46,3 +46,64 @@ void led_set_kb(uint8_t usb_led) { | ||||
| 
 | ||||
| 	led_set_user(usb_led); | ||||
| } | ||||
| 
 | ||||
| #ifdef BACKLIGHT_ENABLE | ||||
| #define CHANNEL OCR1C | ||||
| 
 | ||||
| void backlight_init_ports() | ||||
| { | ||||
| 
 | ||||
|     // Setup PB7 as output and output low.
 | ||||
|     DDRB |= (1<<7); | ||||
|     PORTB &= ~(1<<7); | ||||
|      | ||||
|     // 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 PB7 = OCR1C (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(COM1C1) | _BV(WGM11); // = 0b00001010;
 | ||||
|     TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
 | ||||
| 
 | ||||
|     backlight_init(); | ||||
| } | ||||
| 
 | ||||
| void backlight_set(uint8_t level) | ||||
| { | ||||
|     if ( level == 0 ) | ||||
|     { | ||||
|         // Turn off PWM control on PB7, revert to output low.
 | ||||
|         TCCR1A &= ~(_BV(COM1C1)); | ||||
|         CHANNEL = 0x0; | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|     } | ||||
|     else if ( level == BACKLIGHT_LEVELS ) | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF; | ||||
|     } | ||||
|     else         | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| @ -3,7 +3,10 @@ | ||||
| 
 | ||||
| #include "matrix.h" | ||||
| #include "keymap_common.h" | ||||
| #include "backlight.h" | ||||
| #ifdef BACKLIGHT_ENABLE | ||||
| 	#include "backlight.h" | ||||
| #endif | ||||
| #include <avr/io.h> | ||||
| #include <stddef.h> | ||||
| 
 | ||||
| // This a shortcut to help you visually see your layout.
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jack Humbert
						Jack Humbert