Skip to content

Commit 1d5de57

Browse files
committed
Yeah well, ugh.
1 parent ef539af commit 1d5de57

File tree

5 files changed

+38
-37
lines changed

5 files changed

+38
-37
lines changed

ledpwm.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -115,23 +115,23 @@ ISR(TIMER2_COMPA_vect, ISR_NAKED) {
115115
temp_r24 = (temp_r24 >> 1) | (temp_r24 << 7); // basically, ror - // 3 cy
116116
portb_mask = temp_r24; // 1 cy
117117

118-
if(GPIOR0 & (LEDPWM_ROTATE_BACK_BUFFER_FLAG)) {
119-
asm volatile(
120-
"push r25 \n\t"
121-
"in r24, %[portb_val_io_reg] \n\t"
122-
"andi r24, 15 \n\t" // temp_r24 &= 0x0F
123-
"in r25, %[portb_val_io_reg] \n\t"
124-
"andi r25, 240 \n\t" // temp_r25 &= 0xF0
125-
"add r25, r25 \n\t" // temp_r25 *= 2
126-
"brcc .+2 \n\t" // skip if there was no carry
127-
"sbr r25, 4 \n\t" // set bit 4 if bit 7 was set
128-
"or r25, r24 \n\t" // temp_r24 |= temp_r25
129-
"out %[portb_val_io_reg], r25 \n\t"
130-
"pop r25 \n\t"
131-
::
132-
[portb_val_io_reg] "I" (_SFR_IO_ADDR(portb_val))
133-
);
134-
} // 2cy or 14 cy
118+
// // if(GPIOR0 & (LEDPWM_ROTATE_BACK_BUFFER_FLAG)) {
119+
// asm volatile(
120+
// "push r25 \n\t"
121+
// "in r24, %[portb_val_io_reg] \n\t"
122+
// "andi r24, 15 \n\t"
123+
// "in r25, %[portb_val_io_reg] \n\t"
124+
// "andi r25, 240 \n\t"
125+
// "bst r25, 7 \n\t"
126+
// "add r25, r25 \n\t"
127+
// "bld r25, 4 \n\t" // bit 7 moved to bit 4
128+
// "or r25, r24 \n\t" // temp_r24 |= temp_r25
129+
// "out %[portb_val_io_reg], r25 \n\t"
130+
// "pop r25 \n\t"
131+
// ::
132+
// [portb_val_io_reg] "I" (_SFR_IO_ADDR(portb_val))
133+
// );
134+
// // } // 2cy or 14 cy
135135

136136
asm volatile( "out __SREG__, r25 \n\t"); // 1cy
137137
asm volatile( "pop r25 \n\t"); // 2cy

ledpwm.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ extern DigitalPin<BEAT_PIN_2> tempo_pin;
3636

3737
#define disable_backbuffer_rotation() (GPIOR0 &= ~(LEDPWM_ROTATE_BACK_BUFFER_FLAG))
3838
#define enable_backbuffer_rotation() (GPIOR0 |= (LEDPWM_ROTATE_BACK_BUFFER_FLAG))
39-
// #define enable_backbuffer_rotation()
4039

4140
static void inline __attribute__((always_inline)) set_status_leds_and_mask_within_interrupt(uint8_t new_portb_val, uint8_t new_portb_mask)
4241
{
@@ -88,8 +87,8 @@ static void inline __attribute__((always_inline)) set_status_leds_and_mask_rotat
8887
// } else {
8988
// enable_backbuffer_rotation();
9089
// }
90+
// enable_backbuffer_rotation();
9191
set_status_leds_and_mask_within_interrupt(new_portb_val, new_portb_mask);
92-
enable_backbuffer_rotation();
9392
sei();
9493
}
9594

loop.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
extern bool filter_beat;
2626
extern uint8_t my_current_sample;
2727
extern uint16_t my_sample_sum;
28-
extern struct Framestate F;
28+
extern Framestate F;
2929

3030
__attribute__((always_inline)) static void inline one_frame_sample_handler() {
3131

pwm_constants.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
// 0b11111111 is "invisible" and 0b00000000 is "super bright" not that the human eye can tell
1212
#ifndef MASK_RESET_VAL
13-
# define MASK_RESET_VAL 0b00000000
13+
# define MASK_RESET_VAL 0b01111111
1414
#endif
1515

1616
// These values are specific to the LEDs you choose.

vu3.ino

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -109,34 +109,36 @@ static bool auto_mode_change(bool is_beat) {
109109
return false;
110110
}
111111

112+
static const uint8_t masks[16] = {
113+
0b11111110, 0b11111110, 0b11111110, 0b11111110,
114+
0b11111110, 0b11111110, 0b11111110, 0b11101110,
115+
0b10101010, 0b10101010, 0b10001000, 0b10001000,
116+
0b10000000, 0b10000000, 0b10001000, 0b10101010
117+
};
118+
119+
// there are only 4 lights, so 5 brightness levels
120+
static const uint8_t vals[16] = {
121+
0b00000000, 0b00000000, 0b00000000, 0b00000000,
122+
0b00000000, 0b00000000, 0b00000000, 0b00000000,
123+
0b00000000, 0b00000000, 0b00000000, 0b00000000,
124+
0b00000000, 0b11110000, 0b11110000, 0b11110000
125+
};
112126

113127
/*
114128
* Mess with the brightness of the status LEDs (by adjusting the mask and double-buffer content)
115129
* so that it's VU reactive. Kinda ugly but also kinda cool at the same time.
116130
*/
117131
static void ledpwm_vu_1() {
118132

119-
static const PROGMEM uint8_t masks[16] = {
120-
0b11111110, 0b11111110, 0b11111110, 0b11111110,
121-
0b11101110, 0b11101110, 0b11101010, 0b11101010,
122-
0b10101010, 0b10101010, 0b10101010, 0b10101010,
123-
0b10101010, 0b10101010, 0b10101010, 0b10101010
124-
};
125-
126-
// there are only 4 lights, so 5 brightness levels
127-
static const PROGMEM uint8_t vals[8] = {
128-
0b00000000, 0b00010000, 0b01000000, 0b10100000,
129-
0b01010000, 0b11100000, 0b01110000, 0b11110000
130-
};
131-
132133
// uint8_t volatile old_portb_val = portb_val;
133134

134-
uint8_t four_bit_level = (F.vu_width >> 4) & 0b00001111;
135+
uint8_t four_bit_level = F.vu_width / 4;
136+
if(four_bit_level > 15) four_bit_level = 15;
135137
uint8_t new_portb_mask = masks[four_bit_level];
136138

137-
uint8_t three_bit_level = (four_bit_level >> 1) & 0b00000111;
139+
// uint8_t three_bit_level = (four_bit_level >> 1) & 0b00000111;
138140
// uint8_t new_portb_val = (old_portb_val & 0x0F) | vals[three_bit_level];
139-
uint8_t new_portb_val = vals[three_bit_level] | seven_seg(F.mode);
141+
uint8_t new_portb_val = vals[four_bit_level] | seven_seg(F.mode);
140142

141143
set_status_leds_and_mask_rotate(new_portb_val, new_portb_mask);
142144
}

0 commit comments

Comments
 (0)