Enable de-ghosting for RGB/LED matrix on all ISSI LED drivers (#14508)
* Initial work for de-ghost enable * Dumb mistake with the redefine * Added Copywrite stuff on source files * Fixed whitespace errors * Added support for all ISSI LED drivers * Updated docs for support for ISSI LED driver pull-up pull-down * Applied clang format * Added 'boolean' flag to enable de-ghosting for the is31fl3731 IC * Fixed some of the grammer in the docs * Fixed comment placement and grammer of comment * Fixed whitespace errors from lint Co-authored-by: donicrosby <donicrosby1995@gmail.com>
This commit is contained in:
parent
7ae0f371cf
commit
0c72501763
11 changed files with 136 additions and 10 deletions
|
@ -21,6 +21,7 @@ You can use between 1 and 4 IS31FL3731 IC's. Do not specify `DRIVER_ADDR_<N>` de
|
||||||
|----------|-------------|---------|
|
|----------|-------------|---------|
|
||||||
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
|
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
|
||||||
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
|
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
|
||||||
|
| `ISSI_3731_DEGHOST` | (Optional) Set this define to enable de-ghosting by halving Vcc during blanking time | |
|
||||||
| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
|
| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
|
||||||
| `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | |
|
| `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | |
|
||||||
| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
|
| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
|
||||||
|
@ -85,6 +86,8 @@ You can use between 1 and 4 IS31FL3733 IC's. Do not specify `DRIVER_ADDR_<N>` de
|
||||||
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
|
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
|
||||||
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
|
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
|
||||||
| `ISSI_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3733B only | 0 |
|
| `ISSI_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3733B only | 0 |
|
||||||
|
| `ISSI_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
|
||||||
|
| `ISSI_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
|
||||||
| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
|
| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
|
||||||
| `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | |
|
| `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | |
|
||||||
| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
|
| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
|
||||||
|
@ -96,6 +99,18 @@ You can use between 1 and 4 IS31FL3733 IC's. Do not specify `DRIVER_ADDR_<N>` de
|
||||||
| `DRIVER_SYNC_3` | (Optional) Sync configuration for the third RGB driver | 0 |
|
| `DRIVER_SYNC_3` | (Optional) Sync configuration for the third RGB driver | 0 |
|
||||||
| `DRIVER_SYNC_4` | (Optional) Sync configuration for the fourth RGB driver | 0 |
|
| `DRIVER_SYNC_4` | (Optional) Sync configuration for the fourth RGB driver | 0 |
|
||||||
|
|
||||||
|
The IS31FL3733 IC's have on-chip resistors that can be enabled to allow for de-ghosting of the RGB matrix. By default these resistors are not enabled (`ISSI_SWPULLUP`/`ISSI_CSPULLUP` are given the value of`PUR_0R`), the values that can be set to enable de-ghosting are as follows:
|
||||||
|
|
||||||
|
| `ISSI_SWPULLUP/ISSI_CSPULLUP` | Description |
|
||||||
|
|----------------------|-------------|
|
||||||
|
| `PUR_0R` | (default) Do not use the on-chip resistors/enable de-ghosting |
|
||||||
|
| `PUR_05KR` | The 0.5k Ohm resistor used during blanking period (t_NOL) |
|
||||||
|
| `PUR_3KR` | The 3k Ohm resistor used at all times |
|
||||||
|
| `PUR_4KR` | The 4k Ohm resistor used at all times |
|
||||||
|
| `PUR_8KR` | The 8k Ohm resistor used at all times |
|
||||||
|
| `PUR_16KR` | The 16k Ohm resistor used at all times |
|
||||||
|
| `PUR_32KR` | The 32k Ohm resistor used during blanking period (t_NOL) |
|
||||||
|
|
||||||
Here is an example using 2 drivers.
|
Here is an example using 2 drivers.
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
@ -156,11 +171,25 @@ Configure the hardware via your `config.h`:
|
||||||
|----------|-------------|---------|
|
|----------|-------------|---------|
|
||||||
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
|
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
|
||||||
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
|
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
|
||||||
|
| `ISSI_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
|
||||||
|
| `ISSI_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
|
||||||
| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
|
| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
|
||||||
| `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | |
|
| `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | |
|
||||||
| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
|
| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
|
||||||
| `DRIVER_ADDR_2` | (Optional) Address for the second RGB driver | |
|
| `DRIVER_ADDR_2` | (Optional) Address for the second RGB driver | |
|
||||||
|
|
||||||
|
The IS31FL3737 IC's have on-chip resistors that can be enabled to allow for de-ghosting of the RGB matrix. By default these resistors are not enabled (`ISSI_SWPULLUP`/`ISSI_CSPULLUP` are given the value of`PUR_0R`), the values that can be set to enable de-ghosting are as follows:
|
||||||
|
|
||||||
|
| `ISSI_SWPULLUP/ISSI_CSPULLUP` | Description |
|
||||||
|
|----------------------|-------------|
|
||||||
|
| `PUR_0R` | (default) Do not use the on-chip resistors/enable de-ghosting |
|
||||||
|
| `PUR_05KR` | The 0.5k Ohm resistor used during blanking period (t_NOL) |
|
||||||
|
| `PUR_1KR` | The 1k Ohm resistor used during blanking period (t_NOL) |
|
||||||
|
| `PUR_2KR` | The 2k Ohm resistor used during blanking period (t_NOL) |
|
||||||
|
| `PUR_4KR` | The 4k Ohm resistor used during blanking period (t_NOL) |
|
||||||
|
| `PUR_8KR` | The 8k Ohm resistor during blanking period (t_NOL) |
|
||||||
|
| `PUR_16KR` | The 16k Ohm resistor during blanking period (t_NOL) |
|
||||||
|
| `PUR_32KR` | The 32k Ohm resistor used during blanking period (t_NOL) |
|
||||||
|
|
||||||
Here is an example using 2 drivers.
|
Here is an example using 2 drivers.
|
||||||
|
|
||||||
|
@ -184,7 +213,7 @@ Here is an example using 2 drivers.
|
||||||
```
|
```
|
||||||
!> Note the parentheses, this is so when `DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)` will give very different results than `rand() % DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL`.
|
!> Note the parentheses, this is so when `DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)` will give very different results than `rand() % DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL`.
|
||||||
|
|
||||||
Currently only 2 drivers are supported, but it would be trivial to support all 4 combinations.
|
Currently only 2 drivers are supported, but it would be trivial to support all 4 combinations.
|
||||||
|
|
||||||
Define these arrays listing all the LEDs in your `<keyboard>.c`:
|
Define these arrays listing all the LEDs in your `<keyboard>.c`:
|
||||||
|
|
||||||
|
@ -343,7 +372,7 @@ x = 224 / (NUMBER_OF_COLS - 1) * COL_POSITION
|
||||||
y = 64 / (NUMBER_OF_ROWS - 1) * ROW_POSITION
|
y = 64 / (NUMBER_OF_ROWS - 1) * ROW_POSITION
|
||||||
```
|
```
|
||||||
|
|
||||||
Where NUMBER_OF_COLS, NUMBER_OF_ROWS, COL_POSITION, & ROW_POSITION are all based on the physical layout of your keyboard, not the electrical layout.
|
Where NUMBER_OF_COLS, NUMBER_OF_ROWS, COL_POSITION, & ROW_POSITION are all based on the physical layout of your keyboard, not the electrical layout.
|
||||||
|
|
||||||
As mentioned earlier, the center of the keyboard by default is expected to be `{ 112, 32 }`, but this can be changed if you want to more accurately calculate the LED's physical `{ x, y }` positions. Keyboard designers can implement `#define RGB_MATRIX_CENTER { 112, 32 }` in their config.h file with the new center point of the keyboard, or where they want it to be allowing more possibilities for the `{ x, y }` values. Do note that the maximum value for x or y is 255, and the recommended maximum is 224 as this gives animations runoff room before they reset.
|
As mentioned earlier, the center of the keyboard by default is expected to be `{ 112, 32 }`, but this can be changed if you want to more accurately calculate the LED's physical `{ x, y }` positions. Keyboard designers can implement `#define RGB_MATRIX_CENTER { 112, 32 }` in their config.h file with the new center point of the keyboard, or where they want it to be allowing more possibilities for the `{ x, y }` values. Do note that the maximum value for x or y is 255, and the recommended maximum is 224 as this gives animations runoff room before they reset.
|
||||||
|
|
||||||
|
@ -386,7 +415,7 @@ All RGB keycodes are currently shared with the RGBLIGHT system:
|
||||||
|
|
||||||
* `RGB_MODE_*` keycodes will generally work, but not all of the modes are currently mapped to the correct effects for the RGB Matrix system.
|
* `RGB_MODE_*` keycodes will generally work, but not all of the modes are currently mapped to the correct effects for the RGB Matrix system.
|
||||||
|
|
||||||
`RGB_MODE_PLAIN`, `RGB_MODE_BREATHE`, `RGB_MODE_RAINBOW`, and `RGB_MATRIX_SWIRL` are the only ones that are mapped properly. The rest don't have a direct equivalent, and are not mapped.
|
`RGB_MODE_PLAIN`, `RGB_MODE_BREATHE`, `RGB_MODE_RAINBOW`, and `RGB_MATRIX_SWIRL` are the only ones that are mapped properly. The rest don't have a direct equivalent, and are not mapped.
|
||||||
|
|
||||||
!> By default, if you have both the [RGB Light](feature_rgblight.md) and the RGB Matrix feature enabled, these keycodes will work for both features, at the same time. You can disable the keycode functionality by defining the `*_DISABLE_KEYCODES` option for the specific feature.
|
!> By default, if you have both the [RGB Light](feature_rgblight.md) and the RGB Matrix feature enabled, these keycodes will work for both features, at the same time. You can disable the keycode functionality by defining the `*_DISABLE_KEYCODES` option for the specific feature.
|
||||||
|
|
||||||
|
@ -423,7 +452,7 @@ enum rgb_matrix_effects {
|
||||||
RGB_MATRIX_JELLYBEAN_RAINDROPS, // Randomly changes a single key's hue and saturation
|
RGB_MATRIX_JELLYBEAN_RAINDROPS, // Randomly changes a single key's hue and saturation
|
||||||
RGB_MATRIX_HUE_BREATHING, // Hue shifts up a slight ammount at the same time, then shifts back
|
RGB_MATRIX_HUE_BREATHING, // Hue shifts up a slight ammount at the same time, then shifts back
|
||||||
RGB_MATRIX_HUE_PENDULUM, // Hue shifts up a slight ammount in a wave to the right, then back to the left
|
RGB_MATRIX_HUE_PENDULUM, // Hue shifts up a slight ammount in a wave to the right, then back to the left
|
||||||
RGB_MATRIX_HUE_WAVE, // Hue shifts up a slight ammount and then back down in a wave to the right
|
RGB_MATRIX_HUE_WAVE, // Hue shifts up a slight ammount and then back down in a wave to the right
|
||||||
RGB_MATRIX_FRACTAL, // Single hue fractal filled keys pulsing horizontally out to edges
|
RGB_MATRIX_FRACTAL, // Single hue fractal filled keys pulsing horizontally out to edges
|
||||||
#if define(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
|
#if define(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
|
||||||
RGB_MATRIX_TYPING_HEATMAP, // How hot is your WPM!
|
RGB_MATRIX_TYPING_HEATMAP, // How hot is your WPM!
|
||||||
|
@ -698,7 +727,7 @@ Where `28` is an unused index from `eeconfig.h`.
|
||||||
|
|
||||||
### Indicators :id=indicators
|
### Indicators :id=indicators
|
||||||
|
|
||||||
If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, you can use the `rgb_matrix_indicators_kb` or `rgb_matrix_indicators_user` function for that:
|
If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, you can use the `rgb_matrix_indicators_kb` or `rgb_matrix_indicators_user` function for that:
|
||||||
```c
|
```c
|
||||||
void rgb_matrix_indicators_kb(void) {
|
void rgb_matrix_indicators_kb(void) {
|
||||||
rgb_matrix_set_color(index, red, green, blue);
|
rgb_matrix_set_color(index, red, green, blue);
|
||||||
|
@ -753,18 +782,18 @@ This example sets the modifiers to be a specific color based on the layer state.
|
||||||
```c
|
```c
|
||||||
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||||
HSV hsv = {0, 255, 255};
|
HSV hsv = {0, 255, 255};
|
||||||
|
|
||||||
if (layer_state_is(layer_state, 2)) {
|
if (layer_state_is(layer_state, 2)) {
|
||||||
hsv = {130, 255, 255};
|
hsv = {130, 255, 255};
|
||||||
} else {
|
} else {
|
||||||
hsv = {30, 255, 255};
|
hsv = {30, 255, 255};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hsv.v > rgb_matrix_get_val()) {
|
if (hsv.v > rgb_matrix_get_val()) {
|
||||||
hsv.v = rgb_matrix_get_val();
|
hsv.v = rgb_matrix_get_val();
|
||||||
}
|
}
|
||||||
RGB rgb = hsv_to_rgb(hsv);
|
RGB rgb = hsv_to_rgb(hsv);
|
||||||
|
|
||||||
for (uint8_t i = led_min; i <= led_max; i++) {
|
for (uint8_t i = led_min; i <= led_max; i++) {
|
||||||
if (HAS_FLAGS(g_led_config.flags[i], 0x01)) { // 0x01 == LED_FLAG_MODIFIER
|
if (HAS_FLAGS(g_led_config.flags[i], 0x01)) { // 0x01 == LED_FLAG_MODIFIER
|
||||||
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
|
@ -773,7 +802,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want to indicate a Host LED status (caps lock, num lock, etc), you can use something like this to light up the caps lock key:
|
If you want to indicate a Host LED status (caps lock, num lock, etc), you can use something like this to light up the caps lock key:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/* Copyright 2017 Jason Williams
|
/* Copyright 2017 Jason Williams
|
||||||
* Copyright 2018 Jack Humbert
|
* Copyright 2018 Jack Humbert
|
||||||
* Copyright 2019 Clueboard
|
* Copyright 2019 Clueboard
|
||||||
|
* Copyright 2021 Doni Crosby
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -40,6 +41,9 @@
|
||||||
|
|
||||||
#define ISSI_REG_PICTUREFRAME 0x01
|
#define ISSI_REG_PICTUREFRAME 0x01
|
||||||
|
|
||||||
|
// Not defined in the datasheet -- See AN for IC
|
||||||
|
#define ISSI_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting
|
||||||
|
|
||||||
#define ISSI_REG_SHUTDOWN 0x0A
|
#define ISSI_REG_SHUTDOWN 0x0A
|
||||||
#define ISSI_REG_AUDIOSYNC 0x06
|
#define ISSI_REG_AUDIOSYNC 0x06
|
||||||
|
|
||||||
|
@ -144,6 +148,9 @@ void IS31FL3731_init(uint8_t addr) {
|
||||||
|
|
||||||
// enable software shutdown
|
// enable software shutdown
|
||||||
IS31FL3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
|
IS31FL3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
|
||||||
|
#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
|
||||||
|
IS31FL3731_write_register(addr, ISSI_REG_GHOST_IMAGE_PREVENTION, 0x10);
|
||||||
|
#endif
|
||||||
|
|
||||||
// this delay was copied from other drivers, might not be needed
|
// this delay was copied from other drivers, might not be needed
|
||||||
wait_ms(10);
|
wait_ms(10);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* Copyright 2017 Jason Williams
|
/* Copyright 2017 Jason Williams
|
||||||
* Copyright 2018 Jack Humbert
|
* Copyright 2018 Jack Humbert
|
||||||
|
* Copyright 2021 Doni Crosby
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -39,6 +40,9 @@
|
||||||
|
|
||||||
#define ISSI_REG_PICTUREFRAME 0x01
|
#define ISSI_REG_PICTUREFRAME 0x01
|
||||||
|
|
||||||
|
// Not defined in the datasheet -- See AN for IC
|
||||||
|
#define ISSI_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting
|
||||||
|
|
||||||
#define ISSI_REG_SHUTDOWN 0x0A
|
#define ISSI_REG_SHUTDOWN 0x0A
|
||||||
#define ISSI_REG_AUDIOSYNC 0x06
|
#define ISSI_REG_AUDIOSYNC 0x06
|
||||||
|
|
||||||
|
@ -132,6 +136,9 @@ void IS31FL3731_init(uint8_t addr) {
|
||||||
|
|
||||||
// enable software shutdown
|
// enable software shutdown
|
||||||
IS31FL3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
|
IS31FL3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
|
||||||
|
#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
|
||||||
|
IS31FL3731_write_register(addr, ISSI_REG_GHOST_IMAGE_PREVENTION, 0x10);
|
||||||
|
#endif
|
||||||
|
|
||||||
// this delay was copied from other drivers, might not be needed
|
// this delay was copied from other drivers, might not be needed
|
||||||
wait_ms(10);
|
wait_ms(10);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/* Copyright 2017 Jason Williams
|
/* Copyright 2017 Jason Williams
|
||||||
* Copyright 2018 Jack Humbert
|
* Copyright 2018 Jack Humbert
|
||||||
* Copyright 2018 Yiancar
|
* Copyright 2018 Yiancar
|
||||||
|
* Copyright 2021 Doni Crosby
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -58,6 +59,12 @@
|
||||||
|
|
||||||
#ifndef ISSI_PWM_FREQUENCY
|
#ifndef ISSI_PWM_FREQUENCY
|
||||||
# define ISSI_PWM_FREQUENCY 0b000 // PFS - IS31FL3733B only
|
# define ISSI_PWM_FREQUENCY 0b000 // PFS - IS31FL3733B only
|
||||||
|
#ifndef ISSI_SWPULLUP
|
||||||
|
# define ISSI_SWPULLUP PUR_0R
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ISSI_CSPULLUP
|
||||||
|
# define ISSI_CSPULLUP PUR_0R
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Transfer buffer for TWITransmitData()
|
// Transfer buffer for TWITransmitData()
|
||||||
|
@ -158,6 +165,10 @@ void IS31FL3733_init(uint8_t addr, uint8_t sync) {
|
||||||
|
|
||||||
// Select PG3
|
// Select PG3
|
||||||
IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
|
IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
|
||||||
|
// Set de-ghost pull-up resistors (SWx)
|
||||||
|
IS31FL3733_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
|
||||||
|
// Set de-ghost pull-down resistors (CSx)
|
||||||
|
IS31FL3733_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
|
||||||
// Set global current to maximum.
|
// Set global current to maximum.
|
||||||
IS31FL3733_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
|
IS31FL3733_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
|
||||||
// Disable software shutdown.
|
// Disable software shutdown.
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/* Copyright 2017 Jason Williams
|
/* Copyright 2017 Jason Williams
|
||||||
* Copyright 2018 Jack Humbert
|
* Copyright 2018 Jack Humbert
|
||||||
* Copyright 2018 Yiancar
|
* Copyright 2018 Yiancar
|
||||||
|
* Copyright 2021 Doni Crosby
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -47,6 +48,14 @@ void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bo
|
||||||
void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index);
|
void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index);
|
||||||
void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index);
|
void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index);
|
||||||
|
|
||||||
|
#define PUR_0R 0x00 // No PUR resistor
|
||||||
|
#define PUR_05KR 0x02 // 0.5k Ohm resistor in t_NOL
|
||||||
|
#define PUR_3KR 0x03 // 3.0k Ohm resistor on all the time
|
||||||
|
#define PUR_4KR 0x04 // 4.0k Ohm resistor on all the time
|
||||||
|
#define PUR_8KR 0x05 // 8.0k Ohm resistor on all the time
|
||||||
|
#define PUR_16KR 0x06 // 16k Ohm resistor on all the time
|
||||||
|
#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
|
||||||
|
|
||||||
#define A_1 0x00
|
#define A_1 0x00
|
||||||
#define A_2 0x01
|
#define A_2 0x01
|
||||||
#define A_3 0x02
|
#define A_3 0x02
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
/* Copyright 2018 Jason Williams (Wilba)
|
/* Copyright 2018 Jason Williams (Wilba)
|
||||||
|
* Copyright 2021 Doni Crosby
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -54,6 +55,14 @@
|
||||||
# define ISSI_PERSISTENCE 0
|
# define ISSI_PERSISTENCE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef ISSI_SWPULLUP
|
||||||
|
# define ISSI_SWPULLUP PUR_0R
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ISSI_CSPULLUP
|
||||||
|
# define ISSI_CSPULLUP PUR_0R
|
||||||
|
#endif
|
||||||
|
|
||||||
// Transfer buffer for TWITransmitData()
|
// Transfer buffer for TWITransmitData()
|
||||||
uint8_t g_twi_transfer_buffer[20];
|
uint8_t g_twi_transfer_buffer[20];
|
||||||
|
|
||||||
|
@ -140,6 +149,10 @@ void IS31FL3736_init(uint8_t addr) {
|
||||||
|
|
||||||
// Select PG3
|
// Select PG3
|
||||||
IS31FL3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
|
IS31FL3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
|
||||||
|
// Set de-ghost pull-up resistors (SWx)
|
||||||
|
IS31FL3736_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
|
||||||
|
// Set de-ghost pull-down resistors (CSx)
|
||||||
|
IS31FL3736_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
|
||||||
// Set global current to maximum.
|
// Set global current to maximum.
|
||||||
IS31FL3736_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
|
IS31FL3736_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
|
||||||
// Disable software shutdown.
|
// Disable software shutdown.
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
/* Copyright 2018 Jason Williams (Wilba)
|
/* Copyright 2018 Jason Williams (Wilba)
|
||||||
|
* Copyright 2021 Doni Crosby
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -60,6 +61,15 @@ void IS31FL3736_mono_set_led_control_register(uint8_t index, bool enabled);
|
||||||
void IS31FL3736_update_pwm_buffers(uint8_t addr1, uint8_t addr2);
|
void IS31FL3736_update_pwm_buffers(uint8_t addr1, uint8_t addr2);
|
||||||
void IS31FL3736_update_led_control_registers(uint8_t addr1, uint8_t addr2);
|
void IS31FL3736_update_led_control_registers(uint8_t addr1, uint8_t addr2);
|
||||||
|
|
||||||
|
#define PUR_0R 0x00 // No PUR resistor
|
||||||
|
#define PUR_05KR 0x01 // 0.5k Ohm resistor
|
||||||
|
#define PUR_1KR 0x02 // 1.0k Ohm resistor
|
||||||
|
#define PUR_2KR 0x03 // 2.0k Ohm resistor
|
||||||
|
#define PUR_4KR 0x04 // 4.0k Ohm resistor
|
||||||
|
#define PUR_8KR 0x05 // 8.0k Ohm resistor
|
||||||
|
#define PUR_16KR 0x06 // 16k Ohm resistor
|
||||||
|
#define PUR_32KR 0x07 // 32k Ohm resistor
|
||||||
|
|
||||||
#define A_1 0x00
|
#define A_1 0x00
|
||||||
#define A_2 0x02
|
#define A_2 0x02
|
||||||
#define A_3 0x04
|
#define A_3 0x04
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/* Copyright 2017 Jason Williams
|
/* Copyright 2017 Jason Williams
|
||||||
* Copyright 2018 Jack Humbert
|
* Copyright 2018 Jack Humbert
|
||||||
* Copyright 2018 Yiancar
|
* Copyright 2018 Yiancar
|
||||||
|
* Copyright 2021 Doni Crosby
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -56,6 +57,14 @@
|
||||||
# define ISSI_PERSISTENCE 0
|
# define ISSI_PERSISTENCE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef ISSI_SWPULLUP
|
||||||
|
# define ISSI_SWPULLUP PUR_0R
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ISSI_CSPULLUP
|
||||||
|
# define ISSI_CSPULLUP PUR_0R
|
||||||
|
#endif
|
||||||
|
|
||||||
// Transfer buffer for TWITransmitData()
|
// Transfer buffer for TWITransmitData()
|
||||||
uint8_t g_twi_transfer_buffer[20];
|
uint8_t g_twi_transfer_buffer[20];
|
||||||
|
|
||||||
|
@ -143,6 +152,10 @@ void IS31FL3737_init(uint8_t addr) {
|
||||||
|
|
||||||
// Select PG3
|
// Select PG3
|
||||||
IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
|
IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
|
||||||
|
// Set de-ghost pull-up resistors (SWx)
|
||||||
|
IS31FL3737_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
|
||||||
|
// Set de-ghost pull-down resistors (CSx)
|
||||||
|
IS31FL3737_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
|
||||||
// Set global current to maximum.
|
// Set global current to maximum.
|
||||||
IS31FL3737_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
|
IS31FL3737_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
|
||||||
// Disable software shutdown.
|
// Disable software shutdown.
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/* Copyright 2017 Jason Williams
|
/* Copyright 2017 Jason Williams
|
||||||
* Copyright 2018 Jack Humbert
|
* Copyright 2018 Jack Humbert
|
||||||
* Copyright 2018 Yiancar
|
* Copyright 2018 Yiancar
|
||||||
|
* Copyright 2021 Doni Crosby
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -47,6 +48,15 @@ void IS31FL3737_set_led_control_register(uint8_t index, bool red, bool green, bo
|
||||||
void IS31FL3737_update_pwm_buffers(uint8_t addr1, uint8_t addr2);
|
void IS31FL3737_update_pwm_buffers(uint8_t addr1, uint8_t addr2);
|
||||||
void IS31FL3737_update_led_control_registers(uint8_t addr1, uint8_t addr2);
|
void IS31FL3737_update_led_control_registers(uint8_t addr1, uint8_t addr2);
|
||||||
|
|
||||||
|
#define PUR_0R 0x00 // No PUR resistor
|
||||||
|
#define PUR_05KR 0x01 // 0.5k Ohm resistor in t_NOL
|
||||||
|
#define PUR_1KR 0x02 // 1.0k Ohm resistor in t_NOL
|
||||||
|
#define PUR_2KR 0x03 // 2.0k Ohm resistor in t_NOL
|
||||||
|
#define PUR_4KR 0x04 // 4.0k Ohm resistor in t_NOL
|
||||||
|
#define PUR_8KR 0x05 // 8.0k Ohm resistor in t_NOL
|
||||||
|
#define PUR_16KR 0x06 // 16k Ohm resistor in t_NOL
|
||||||
|
#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
|
||||||
|
|
||||||
#define A_1 0x00
|
#define A_1 0x00
|
||||||
#define A_2 0x01
|
#define A_2 0x01
|
||||||
#define A_3 0x02
|
#define A_3 0x02
|
||||||
|
|
|
@ -61,6 +61,14 @@
|
||||||
# define ISSI_PERSISTENCE 0
|
# define ISSI_PERSISTENCE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef ISSI_SWPULLUP
|
||||||
|
# define ISSI_SWPULLUP PUR_32KR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ISSI_CSPULLUP
|
||||||
|
# define ISSI_CSPULLUP PUR_32KR
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ISSI_MAX_LEDS 351
|
#define ISSI_MAX_LEDS 351
|
||||||
|
|
||||||
// Transfer buffer for TWITransmitData()
|
// Transfer buffer for TWITransmitData()
|
||||||
|
@ -157,7 +165,7 @@ void IS31FL3741_init(uint8_t addr) {
|
||||||
// Set Golbal Current Control Register
|
// Set Golbal Current Control Register
|
||||||
IS31FL3741_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
|
IS31FL3741_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
|
||||||
// Set Pull up & Down for SWx CSy
|
// Set Pull up & Down for SWx CSy
|
||||||
IS31FL3741_write_register(addr, ISSI_REG_PULLDOWNUP, 0x77);
|
IS31FL3741_write_register(addr, ISSI_REG_PULLDOWNUP, ((ISSI_CSPULLUP << 4) | ISSI_SWPULLUP));
|
||||||
|
|
||||||
// IS31FL3741_update_led_scaling_registers(addr, 0xFF, 0xFF, 0xFF);
|
// IS31FL3741_update_led_scaling_registers(addr, 0xFF, 0xFF, 0xFF);
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,15 @@ void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t
|
||||||
|
|
||||||
void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
|
void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
|
||||||
|
|
||||||
|
#define PUR_0R 0x00 // No PUR resistor
|
||||||
|
#define PUR_05KR 0x01 // 0.5k Ohm resistor
|
||||||
|
#define PUR_1KR 0x02 // 1.0k Ohm resistor
|
||||||
|
#define PUR_2KR 0x03 // 2.0k Ohm resistor
|
||||||
|
#define PUR_4KR 0x04 // 4.0k Ohm resistor
|
||||||
|
#define PUR_8KR 0x05 // 8.0k Ohm resistor
|
||||||
|
#define PUR_16KR 0x06 // 16k Ohm resistor
|
||||||
|
#define PUR_32KR 0x07 // 32k Ohm resistor
|
||||||
|
|
||||||
#define CS1_SW1 0x00
|
#define CS1_SW1 0x00
|
||||||
#define CS2_SW1 0x01
|
#define CS2_SW1 0x01
|
||||||
#define CS3_SW1 0x02
|
#define CS3_SW1 0x02
|
||||||
|
|
Loading…
Reference in a new issue