Fix timer channel bug

This commit is contained in:
Jan-Henrik 2020-07-17 00:02:56 +02:00
parent 752b8c9d93
commit c28c870687
3 changed files with 9 additions and 13 deletions

View file

@ -29,6 +29,8 @@ static const uint16_t kGpioPins[] = { GPIO_PIN_8, GPIO_PIN_9, GPIO_PIN_10, GPIO_
static GPIO_TypeDef* kGpioColorPorts[] = {GPIOC, GPIOC, GPIOF, GPIOF}; static GPIO_TypeDef* kGpioColorPorts[] = {GPIOC, GPIOC, GPIOF, GPIOF};
static const uint16_t kGpioColorPins[] = {GPIO_PIN_14, GPIO_PIN_15, GPIO_PIN_6, GPIO_PIN_7}; static const uint16_t kGpioColorPins[] = {GPIO_PIN_14, GPIO_PIN_15, GPIO_PIN_6, GPIO_PIN_7};
static const uint32_t timer_channel[] = {TIM_CHANNEL_1, TIM_CHANNEL_2, TIM_CHANNEL_3, TIM_CHANNEL_4};
class Leds { class Leds {
public: public:
Leds() Leds()
@ -68,24 +70,18 @@ class Leds {
sConfigOC.Pulse = 100; sConfigOC.Pulse = 100;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2);
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3);
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4);
for(size_t i = 0; i < kNumChannels; i++) { for(size_t i = 0; i < kNumChannels; i++) {
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, timer_channel[i]);
gpioInit.Mode = GPIO_MODE_AF_PP; gpioInit.Mode = GPIO_MODE_AF_PP;
gpioInit.Pin = kGpioPins[i]; gpioInit.Pin = kGpioPins[i];
gpioInit.Pull = GPIO_NOPULL; gpioInit.Pull = GPIO_NOPULL;
gpioInit.Speed = GPIO_SPEED_FREQ_MEDIUM; gpioInit.Speed = GPIO_SPEED_FREQ_MEDIUM;
gpioInit.Alternate = GPIO_AF2_TIM1; gpioInit.Alternate = GPIO_AF2_TIM1;
HAL_GPIO_Init(kGpioPorts[i], &gpioInit); HAL_GPIO_Init(kGpioPorts[i], &gpioInit);
HAL_TIM_PWM_Start(&htim1, timer_channel[i]);
} }
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
} }
void Write() void Write()
@ -101,13 +97,13 @@ class Leds {
if(targetColor == LED_COLOR_RED) { if(targetColor == LED_COLOR_RED) {
HAL_GPIO_WritePin(kGpioColorPorts[i], kGpioColorPins[i], GPIO_PIN_SET); HAL_GPIO_WritePin(kGpioColorPorts[i], kGpioColorPins[i], GPIO_PIN_SET);
intensity = 65534 - lut_led_red_gamma[intensity >> 4]; intensity = 65535 - lut_led_red_gamma[intensity >> 4];
} else if(targetColor == LED_COLOR_GREEN) { } else if(targetColor == LED_COLOR_GREEN) {
HAL_GPIO_WritePin(kGpioColorPorts[i], kGpioColorPins[i], GPIO_PIN_RESET); HAL_GPIO_WritePin(kGpioColorPorts[i], kGpioColorPins[i], GPIO_PIN_RESET);
intensity = lut_led_green_gamma[intensity >> 4]; intensity = lut_led_green_gamma[intensity >> 4];
} }
__HAL_TIM_SET_COMPARE(&htim1, i, intensity >> 4); __HAL_TIM_SET_COMPARE(&htim1, timer_channel[i], intensity >> 4);
} }
} }

View file

@ -1,5 +1,5 @@
#define ENABLE_DEBUG_PIN //#define ENABLE_DEBUG_PIN
#include "drivers/debug_pin.h" #include "drivers/debug_pin.h"
#include "drivers/adc.h" #include "drivers/adc.h"

View file

@ -24,9 +24,9 @@ class UI {
}; };
void Init() { void Init() {
for (size_t i = 0; i < kNumChannels; i++) { for (size_t i = 0; i < kNumChannels; i++) {
uint16_t* volume_hidden_params[kNumChannels] = {&volume_att_pots[i], &volume_att_pots[i], &volume_att_pots[i], &volume_att_pots[i]}; uint16_t* volume_hidden_params[] = {&volume_att_pots[i], &volume_att_pots[i], &volume_att_pots[i], &volume_att_pots[i]};
potControllers[i].Init(&volume_pots[i], volume_hidden_params); potControllers[i].Init(&volume_pots[i], volume_hidden_params);
uint16_t* pan_hidden_params[kNumChannels] = {&pan_att_pots[i], &pan_att_pots[i], &pan_att_pots[i], &pan_att_pots[i]}; uint16_t* pan_hidden_params[] = {&pan_att_pots[i], &pan_att_pots[i], &pan_att_pots[i], &pan_att_pots[i]};
potControllers[i + kNumChannels].Init(&pan_pots[i], pan_hidden_params); potControllers[i + kNumChannels].Init(&pan_pots[i], pan_hidden_params);
volume_att_pots[i] = pan_att_pots[i] = 32767 + (32767 / 2); volume_att_pots[i] = pan_att_pots[i] = 32767 + (32767 / 2);