nrf52832 PWM Driver Issue

Hi All,

I am in the early development stages of a project using the nRF52832 ble module. I have a custom board already, which has 2 RGB LEDs. By default, it looks like the nrf_drv_pwm driver is configured to have 4 channels. For this project I am looking to use 6 channels. I attempted to add 2 more channels to the driver files as I'll display below. This issue I am having is that the two new channels (channel 4 and channel 5) do not seem to work properly. I very well could be doing something wrong. The other 4 channels operate as expected, but the last 2 channels are always outputting 100% duty cycle immediately after initialization and do not respond to subsequent nrf_drv_pwm_simple_playback() calls to adjust. Thanks for your time!

nrf52832

nRF5_SDK_17.1.0_ddde560

segger 5.70a

Below is the test function I am calling to control the LEDs

void Leds_Color_Set(led_select_t led_select, led_color_t color)
{
if (led_select == LED1)
{
switch (color)
{
case COLOR_RED:
seq_values.channel_0 = 500; //red1
seq_values.channel_1 = 0; //green1
seq_values.channel_2 = 0; //blue1
break;

case COLOR_BLUE:
seq_values.channel_0 = 0; //red1
seq_values.channel_1 = 0; //green1
seq_values.channel_2 = 500; //blue1
break;

case COLOR_GREEN:
seq_values.channel_0 = 0; //red1
seq_values.channel_1 = 500; //green1
seq_values.channel_2 = 0; //blue1
break;

case COLOR_WHITE:
seq_values.channel_0 = 500; //red1
seq_values.channel_1 = 500; //green1
seq_values.channel_2 = 500; //blue1
break;

case COLOR_YELLOW:
seq_values.channel_0 = 500; //red1
seq_values.channel_1 = 500; //green1
seq_values.channel_2 = 0; //blue1
break;

case COLOR_OFF:
seq_values.channel_0 = 0; //red1
seq_values.channel_1 = 0; //green1
seq_values.channel_2 = 0; //blue1
break;

case COLOR_TEAL:
seq_values.channel_0 = 0; //red1
seq_values.channel_1 = 500; //green1
seq_values.channel_2 = 500; //blue1
break;

default:
break;
}
}else if(led_select == LED2)
{
switch (color)
{
case COLOR_RED:
seq_values.channel_3 = 500; //red2
seq_values.channel_4 = 0; //green2
seq_values.channel_5 = 0; //blue2
break;

case COLOR_BLUE:
seq_values.channel_3 = 0; //red2
seq_values.channel_4 = 0; //green2
seq_values.channel_5 = 500; //blue2
break;

case COLOR_GREEN:
seq_values.channel_3 = 0; //red2
seq_values.channel_4 = 500; //green2
seq_values.channel_5 = 0; //blue2
break;

case COLOR_WHITE:
seq_values.channel_3 = 500; //red2
seq_values.channel_4 = 500; //green2
seq_values.channel_5 = 500; //blue2
break;

case COLOR_YELLOW:
seq_values.channel_3 = 500; //red2
seq_values.channel_4 = 500; //green2
seq_values.channel_5 = 0; //blue2
break;

case COLOR_OFF:
seq_values.channel_3 = 0; //red2
seq_values.channel_4 = 0; //green2
seq_values.channel_5 = 0; //blue2
break;

case COLOR_TEAL:
seq_values.channel_0 = 0; //red1
seq_values.channel_1 = 500; //green1
seq_values.channel_2 = 500; //blue1
break;

default:
break;
}
}else{
//do nothing
}

nrf_pwm_sequence_t seq;
seq.values.p_individual = &seq_values;
seq.length = NRF_PWM_VALUES_LENGTH(seq_values);
seq.repeats = 0;
seq.end_delay = 0;

(void)nrf_drv_pwm_simple_playback(&m_pwm0, &seq, 1, NRF_DRV_PWM_FLAG_LOOP);
}

Parents Reply Children
Related