Skip to content

Commit

Permalink
Add support for 328P hardware backlight on B1/B2 (qmk#6776)
Browse files Browse the repository at this point in the history
  • Loading branch information
fauxpark authored and Philip Karlsson committed Dec 3, 2019
1 parent 4473391 commit cc4a82d
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 10 deletions.
22 changes: 12 additions & 10 deletions docs/feature_backlight.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,18 @@ This feature is distinct from both the [RGB underglow](feature_rgblight.md) and

Hardware PWM is supported according to the following table:

|Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|
|-------------|-------------|-------------|-------------|---------|
|`B5` |Timer 1 |Timer 1 | | |
|`B6` |Timer 1 |Timer 1 | | |
|`B7` |Timer 1 |Timer 1 |Timer 1 | |
|`C4` |Timer 3 | | | |
|`C5` |Timer 3 | |Timer 1 | |
|`C6` |Timer 3 |Timer 3 |Timer 1 | |
|`D4` | | | |Timer 1 |
|`D5` | | | |Timer 1 |
|Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|ATmega328P|
|-------------|-------------|-------------|-------------|---------|----------|
|`B1` | | | | |Timer 1 |
|`B2` | | | | |Timer 1 |
|`B5` |Timer 1 |Timer 1 | | | |
|`B6` |Timer 1 |Timer 1 | | | |
|`B7` |Timer 1 |Timer 1 |Timer 1 | | |
|`C4` |Timer 3 | | | | |
|`C5` |Timer 3 | |Timer 1 | | |
|`C6` |Timer 3 |Timer 3 |Timer 1 | | |
|`D4` | | | |Timer 1 | |
|`D5` | | | |Timer 1 | |

All other pins will use software PWM. If the [Audio](feature_audio.md) feature is disabled or only using one timer, the backlight PWM can be triggered by a hardware timer:

Expand Down
16 changes: 16 additions & 0 deletions quantum/quantum.c
Original file line number Diff line number Diff line change
Expand Up @@ -1104,6 +1104,22 @@ void matrix_scan_quantum() {
# define COMxx1 COM1A1
# define OCRxx OCR1A
# endif
# elif defined(__AVR_ATmega328P__) && (BACKLIGHT_PIN == B1 || BACKLIGHT_PIN == B2)
# define HARDWARE_PWM
# define ICRx ICR1
# define TCCRxA TCCR1A
# define TCCRxB TCCR1B
# define TIMERx_OVF_vect TIMER1_OVF_vect
# define TIMSKx TIMSK1
# define TOIEx TOIE1

# if BACKLIGHT_PIN == B1
# define COMxx1 COM1A1
# define OCRxx OCR1A
# elif BACKLIGHT_PIN == B2
# define COMxx1 COM1B1
# define OCRxx OCR1B
# endif
# else
# if !defined(BACKLIGHT_CUSTOM_DRIVER)
# if !defined(B5_AUDIO) && !defined(B6_AUDIO) && !defined(B7_AUDIO)
Expand Down

0 comments on commit cc4a82d

Please sign in to comment.