diff options
author | fauxpark <fauxpark@gmail.com> | 2019-06-20 15:33:39 +1000 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-06-19 22:33:39 -0700 |
commit | 317b8095647e208a7ac1ecf6b110051ca46553a8 (patch) | |
tree | 724a2dc9d0b5071999f25400c453ca061e1c0827 | |
parent | 67e0c951afee99ac1e1e96354655296457f57b78 (diff) |
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
-rw-r--r-- | docs/config_options.md | 2 | ||||
-rw-r--r-- | docs/feature_backlight.md | 10 | ||||
-rw-r--r-- | quantum/quantum.c | 17 |
3 files changed, 19 insertions, 10 deletions
diff --git a/docs/config_options.md b/docs/config_options.md index 7418e8dbf9..eb0a441ccc 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -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` * number of levels your backlight will have (maximum 15 excluding off) * `#define BACKLIGHT_BREATHING` - * enables backlight breathing (only works with backlight pins B5, B6 and B7) + * enables backlight breathing * `#define BREATHING_PERIOD 6` * the length of one backlight "breath" in seconds * `#define DEBOUNCE 5` diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md index 5a21a67901..b06db89e4d 100644 --- a/docs/feature_backlight.md +++ b/docs/feature_backlight.md @@ -64,11 +64,17 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`: |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_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_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 | +|`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 diff --git a/quantum/quantum.c b/quantum/quantum.c index 36b7942d5d..6530738b71 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -707,8 +707,9 @@ bool process_record_quantum(keyrecord_t *record) { #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING) case BL_BRTG: { - if (record->event.pressed) + if (record->event.pressed) { breathing_toggle(); + } return false; } #endif @@ -1148,13 +1149,13 @@ void backlight_off(uint8_t backlight_pin) { #define BACKLIGHT_PIN_INIT BACKLIGHT_PINS #endif -#define FOR_EACH_LED(x) \ +#define FOR_EACH_LED(x) \ 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; @@ -1233,7 +1234,9 @@ ISR(TIMERx_COMPA_vect) { // this one triggers at F_CPU/65536 =~ 244 Hz ISR(TIMERx_OVF_vect) { #ifdef BACKLIGHT_BREATHING - breathing_task(); + if(is_breathing()) { + breathing_task(); + } #endif // for very small values of OCRxx (or backlight level) // we can't guarantee this whole code won't execute |