When I test the timer example with nrf52832 DK, it so nice to 4 minutes.
uint32_t time_ms = 240000;
But when I set the time interval over 5 minutes, then the event handler run more rapidly.
So, what should I do for long time period?
When I test the timer example with nrf52832 DK, it so nice to 4 minutes.
uint32_t time_ms = 240000;
But when I set the time interval over 5 minutes, then the event handler run more rapidly.
So, what should I do for long time period?
Hi JW,
By default, the timer runs at 16 MHz and the maximum bit width of the timer is 32-bit. This corresponds to a maximum timer value of:
(2^32)-1 = 4294967295
The reason why you see event handler more rapidly with 5 minutes, is that nrf_drv_timer_ms_to_ticks
use the configured frequency and the time_ms
parameter to generate the number of ticks, and return this in a 32 bit variable:
5*60*16000000 = 4800000000
This overflows the 32 bit variable, giving you a tick count of 505032705 = ~31.5 seconds.
You need to change the frequency of the timer to make it run run slower. This is done by changing the timer configuration:
timer_cfg.frequency = NRF_TIMER_FREQ_8MHz;
You can set it to any of the frequencies documented here.
Best regards,
Jørgen
Your observations are correct, this change will not affect the time between event handler calls. What it will change is the output from nrf_drv_timer_ms_to_ticks()
, the variable time_ticks
. With time_ms = 1000
and frequency set to 16 MHz, the returned value will be 16 000 000. With time_ms = 1000
and frequency set to 8 MHz, it will return 8 000 000. Reducing the frequency will reduce the resolution of the timer, but it will increase the time the timer can run before overflowing.
Your observations are correct, this change will not affect the time between event handler calls. What it will change is the output from nrf_drv_timer_ms_to_ticks()
, the variable time_ticks
. With time_ms = 1000
and frequency set to 16 MHz, the returned value will be 16 000 000. With time_ms = 1000
and frequency set to 8 MHz, it will return 8 000 000. Reducing the frequency will reduce the resolution of the timer, but it will increase the time the timer can run before overflowing.