Skip to content

Commit

Permalink
moves backlight functionality to keyboard files and updates template …
Browse files Browse the repository at this point in the history
…makefile

previously there were two backlight.c files (bad)
  • Loading branch information
jackhumbert committed Apr 30, 2016
1 parent 9ab7098 commit 0656f2f
Show file tree
Hide file tree
Showing 15 changed files with 287 additions and 215 deletions.
4 changes: 0 additions & 4 deletions keyboard/atomic/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
61 changes: 61 additions & 0 deletions keyboard/atomic/atomic.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:https://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
5 changes: 4 additions & 1 deletion keyboard/atomic/atomic.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
63 changes: 0 additions & 63 deletions keyboard/atomic/backlight.c

This file was deleted.

4 changes: 0 additions & 4 deletions keyboard/planck/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
61 changes: 0 additions & 61 deletions keyboard/planck/backlight.c

This file was deleted.

61 changes: 61 additions & 0 deletions keyboard/planck/planck.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:https://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
1 change: 1 addition & 0 deletions keyboard/planck/planck.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "rgblight.h"
#endif
#include <stddef.h>
#include <avr/io.h>
#ifdef MIDI_ENABLE
#include <keymap_midi.h>
#endif
Expand Down
5 changes: 0 additions & 5 deletions keyboard/preonic/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
61 changes: 0 additions & 61 deletions keyboard/preonic/backlight.c

This file was deleted.

Loading

0 comments on commit 0656f2f

Please sign in to comment.