Fix breathing always on for soft PWM (#5983)

* Fix breathing always on for soft PWM

* Remove reference to hardware PWM pins in BACKLIGHT_BREATHING description

Now, breathing will only be unsupported when Timers 1 and 3 are both used by Audio

* Document BACKLIGHT_ON_STATE and its purpose
This commit is contained in:
fauxpark 2019-06-20 15:33:39 +10:00 committed by Drashna Jaelre
parent 67e0c951af
commit 317b809564
3 changed files with 19 additions and 10 deletions

View File

@ -80,7 +80,7 @@ This is a C header file that is one of the first things included, and will persi
* `#define BACKLIGHT_LEVELS 3` * `#define BACKLIGHT_LEVELS 3`
* number of levels your backlight will have (maximum 15 excluding off) * number of levels your backlight will have (maximum 15 excluding off)
* `#define BACKLIGHT_BREATHING` * `#define BACKLIGHT_BREATHING`
* enables backlight breathing (only works with backlight pins B5, B6 and B7) * enables backlight breathing
* `#define BREATHING_PERIOD 6` * `#define BREATHING_PERIOD 6`
* the length of one backlight "breath" in seconds * the length of one backlight "breath" in seconds
* `#define DEBOUNCE 5` * `#define DEBOUNCE 5`

View File

@ -64,11 +64,17 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`:
|Define |Default |Description | |Define |Default |Description |
|---------------------|-------------|-------------------------------------------------------------------------------------------------------------| |---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this| |`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information| |`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information |
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 15 excluding off) | |`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 15 excluding off) |
|`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) | |`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported | |`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported |
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds | |`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
|`BACKLIGHT_ON_STATE` |`0` |The state of the backlight pin when the backlight is "on" - `1` for high, `0` for low |
## Backlight On State
Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *low*.
Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case you must `#define BACKLIGHT_ON_STATE 1`, so that when the transistor is on, the pin is driven *high* instead.
## Multiple backlight pins ## Multiple backlight pins

View File

@ -707,8 +707,9 @@ bool process_record_quantum(keyrecord_t *record) {
#if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING) #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING)
case BL_BRTG: { case BL_BRTG: {
if (record->event.pressed) if (record->event.pressed) {
breathing_toggle(); breathing_toggle();
}
return false; return false;
} }
#endif #endif
@ -1148,13 +1149,13 @@ void backlight_off(uint8_t backlight_pin) {
#define BACKLIGHT_PIN_INIT BACKLIGHT_PINS #define BACKLIGHT_PIN_INIT BACKLIGHT_PINS
#endif #endif
#define FOR_EACH_LED(x) \ #define FOR_EACH_LED(x) \
for (uint8_t i = 0; i < BACKLIGHT_LED_COUNT; i++) \ for (uint8_t i = 0; i < BACKLIGHT_LED_COUNT; i++) \
{ \ { \
uint8_t backlight_pin = backlight_pins[i]; \ uint8_t backlight_pin = backlight_pins[i]; \
{ \ { \
x \ x \
} \ } \
} }
static const uint8_t backlight_pins[BACKLIGHT_LED_COUNT] = BACKLIGHT_PIN_INIT; static const uint8_t backlight_pins[BACKLIGHT_LED_COUNT] = BACKLIGHT_PIN_INIT;
@ -1233,7 +1234,9 @@ ISR(TIMERx_COMPA_vect) {
// this one triggers at F_CPU/65536 =~ 244 Hz // this one triggers at F_CPU/65536 =~ 244 Hz
ISR(TIMERx_OVF_vect) { ISR(TIMERx_OVF_vect) {
#ifdef BACKLIGHT_BREATHING #ifdef BACKLIGHT_BREATHING
breathing_task(); if(is_breathing()) {
breathing_task();
}
#endif #endif
// for very small values of OCRxx (or backlight level) // for very small values of OCRxx (or backlight level)
// we can't guarantee this whole code won't execute // we can't guarantee this whole code won't execute