got LEDs working, ribbon trail program initially implemented

- fixed soft I2C master set hi/lo routines
- fixed bug in matrix_send not setting all LEDs from map
- fix AWU interrupt not firing; requires EXTI line to be configured too even if unused
- fixed wrong dividers used in system clock set function
This commit is contained in:
true
2026-05-08 16:12:18 -07:00
parent d95af918fa
commit abd985e3a1
10 changed files with 117 additions and 56 deletions

View File

@@ -13,7 +13,7 @@
#define AW20X_DIM 31 // initial global current setting
#define AW20X_DIM 28 // initial global current setting
#define AW20X_COLS 6
#define AW20X_ROWS 12
@@ -24,17 +24,16 @@
AW20x awled;
static uint8_t awled_fade[AW20X_FADE_COUNT];
uint8_t awled_fade[AW20X_FADE_COUNT];
static uint8_t led_matrix_needs_update = 0;
uint16_t led_map_size;
const LedMap led_map = {
// map is 1-based to match part numbers on the board
{ // ribbon
1, 25, 13, 49,
.ribbon = { // ribbon
13, 25, 1, 49,
37, 14,
28, 2, 38,
26, 2, 38,
50, 3,
27, 15,
39, 51,
@@ -54,19 +53,20 @@ const LedMap led_map = {
55, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
8, 20, 32,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,
8, 0, 0, 20, 0, 0, 32,
0, 0
},
{ // "A"
.a = { // "A"
9, 21, 33, 0, 0, 0, 45, 57, 10,
22,
34, 46, 58, 11, 23, 35, 47, 59, 12
},
{ // "//" left one
.ii_lf = { // "//" left one
61, 62, 63, 64, 44
},
{ // "//" right one
.ii_rt = { // "//" right one
60, 48, 36, 24, 56
}
};
@@ -95,8 +95,6 @@ void matrix_init()
aw20x_set_dim_global(&awled, AW20X_DIM);
aw20x_set_fade(&awled);
aw20x_led_enable_range(&awled, 0, (AW20X_COLS * AW20X_MAX_ROWS) - 1);
led_map_size = sizeof(led_map.ribbon) + sizeof(led_map.a) + sizeof(led_map.ii_lf) + sizeof(led_map.ii_rt);
}
void matrix_flag_update()
@@ -104,9 +102,14 @@ void matrix_flag_update()
led_matrix_needs_update = 1;
}
/*
static uint8_t delay = 0;
static uint8_t work = 0;
*/
void matrix_send()
{
int8_t i;
uint32_t i;
uint8_t *fade = awled_fade;
uint8_t *map = (uint8_t *)&led_map;
uint8_t *set = (uint8_t *)&led_set;
@@ -115,14 +118,35 @@ void matrix_send()
led_matrix_needs_update = 0;
// remap data for sending
for (i = 0; i < led_map_size; i++) {
if ((*map) & (*map <= AW20X_FADE_COUNT)) {
fade[*map - 1] = *set;
for (i = 0; i < sizeof(led_map); i++) {
if ((*map) && ((*map) <= AW20X_FADE_COUNT)) {
fade[(*map) - 1] = *set;
}
map++;
set++;
map++; set++;
}
/* testing
if (delay) {
delay--;
} else {
delay = 20;
for (int i = 0; i < sizeof(led_map.ribbon); i++) {
if (led_map.ribbon[i]) {
awled_fade[led_map.ribbon[i] - 1] = 0;
}
}
if (led_map.ribbon[work]) {
awled_fade[led_map.ribbon[work] - 1] = 0xff;
}
work++;
if (work >= sizeof(led_map.ribbon)) work = 0;
matrix_flag_update();
}
*/
aw20x_set_fade(&awled);
}
}