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.