This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nrf_pwm library questions

I don't understand how the numbers in the nrf_pwm_init are calculated. Specifically these:

case PWM_MODE_LED_100:   // 0-100 resolution, 321Hz PWM frequency, 32kHz timer frequency (prescaler 9)
    PWM_TIMER->PRESCALER = 9; 
    pwm_max_value = 100;
    break;
case PWM_MODE_LED_255:   // 8-bit resolution, 122Hz PWM frequency, 32kHz timer frequency (prescaler 9)
    PWM_TIMER->PRESCALER = 9;
    pwm_max_value = 255;  
    break;
case PWM_MODE_LED_1000:  // 0-1000 resolution, 250Hz PWM frequency, 250kHz timer frequency (prescaler 6)
    PWM_TIMER->PRESCALER = 6;
    pwm_max_value = 1000;
    break;
case PWM_MODE_MTR_100:   // 0-100 resolution, 20kHz PWM frequency, 2MHz timer frequency (prescaler 3)
    PWM_TIMER->PRESCALER = 3;
    pwm_max_value = 100;
    break;
case PWM_MODE_MTR_255:    // 8-bit resolution, 31kHz PWM frequency, 8MHz timer frequency (prescaler 1)	
    PWM_TIMER->PRESCALER = 1;
    pwm_max_value = 255;
    break;
case PWM_MODE_BUZZER_255:  // 8-bit resolution, 62.5kHz PWM frequency, 16MHz timer frequency (prescaler 0)
    PWM_TIMER->PRESCALER = 0;
    pwm_max_value = 255;
    break;

If I wanted to drive an led with a pwm frequency of 1000Hz with 0-100 for the duty-cycle %, how do I do it?

How is the timer frequency chosen?

Can it be done using the external 32768Hz clock to save power?

Thanks.

Related