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

NRF51822 Capability

I'm trying to figure out if the NRF51822 is capable of performing the tasks I need for my project. I need to be able to do the following

4x PWM at ~2kHz

4x Analog read at ~2kHz

1x Periodic Battery Level read

2x GPIO interrupt

2x Timer (trigger battery read & flash heartbeat LED)

S110 Softdevice

Is the nrf51822 capable of doing all this? I believe it only has 4 GPIOTE channels and I'm assuming I would need to use all 4 for the PWM. Is there a way to still achieve the ADC reads at that rate?

I should note, that this development is supposed to be done on top of an existing application which is using soft device S110 v7.1

Parents
  • Hi,

    As described in the PWM library documentation, 4 PWM channels will require 4 GPIOTE channels + 12 PPI channels (2 per instance + 2 per channel, each instance providing 2 channels = 22 + 42 = 12). The S110 v7.1 softdevice is based on the S110 softdevice specifications v1.3. From the chapter about PPI resource usage, you can see that this softdevice only leaves PPI channel 0-7 to the application, the rest is used by the softdevice. If you upgrade the softdevice to S110 v8.0 (based on S110 SDS v2.0), you will get 14 available PPI channels, which should be sufficient for the PWM instances.

    The next issue is the GPIO interrupts. This will require available GPIOTE channels, which you allready used for the PWM channels. You can still use GPIOs to wake the chip from System OFF sleep mode, but I don't know what your inputs are or what your will be using these for. Another alternative might be to use the LPCOMP peripheral to detect falling/rising edge of the inputs. If you need 4 analog reads + 1 analog read for battery voltage, you still have 3 available analog inputs, and can use 2 of these to generate interrupts in place of your GPIO interrupts.

    The softdevice will block usage of TIMER0 peripheral, but you still have two more timers available. You need 1 timer for each of the PWM instances, which means you do not have any timers left for triggering ADC sampling and LED blinking. An alternative is to use RTC to trigger these tasks. The softdevice blocks use of RTC0, but RTC1 is available to the application. You can setup the application timer library to use RTC1 and generate multiple timers. The RTC runs at a frequency of 32.768 kHz, but this should be sufficient for your sample rate.

    If your application can run reliably with all these peripherals running at the same time, you will have to test yourself. Note that the softdevice will allways get highest priority for timing critical tasks, which might delay interrupts for PWM, ADC and GPIO/LPCOMP. According to this post, you should be able to achieve a sample rate of 2-8 kHz, depending on the amount of data you send via BLE. When running multiple other interrupt-intensive peripherals like PWM, you might not be able to get to this level.

    I think you will have som troubles getting all this to work on the nRF51822 chip, but if this is an existing project, it might be worth a try. I would really recommend considering moving to the nRF52 series, as this provide hardware PWM peripheral, in addition to EasyDMA which allows you to sample the ADC directly to RAM. The nRF52832 also have more TIMERs, RTCs, GPIOTE channels, and more flexible PPI channels.

    Best regards,

    Jørgen

  • One more thing, I realized that the link I posted in the above answer about sample rates in the ADC with softdevice enabled is with only 1 channel enabled. You will have to divide the expected maximum sample rate on the number of enabled channels, giving you 400 - 1600 Hz maximum sample rate.

Reply Children
No Data
Related