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

ADC channel resistors

I have configured 3 differential ADC channels to sample with timer/PPI/DMA buffer. When I turned everything off, I couldn't get below 20uA current (with only LFCLK running).

I realised recently that resistor dividers, used in SAADC channel config, are not deactivated with SAADC_channel_uninit().

With workaround code below I got current down to 12uA. Obviously, configuring GPIO's didn't didn't help in this case, with ADC channels dividers left on.

//trying to remove any pull_up/pull_down 
channel_0_config.resistor_p = NRF_SAADC_RESISTOR_DISABLED;
channel_0_config.resistor_n = NRF_SAADC_RESISTOR_DISABLED;
channel_1_config.resistor_p = NRF_SAADC_RESISTOR_DISABLED;
channel_1_config.resistor_n = NRF_SAADC_RESISTOR_DISABLED;
channel_2_config.resistor_p = NRF_SAADC_RESISTOR_DISABLED;
channel_2_config.resistor_n = NRF_SAADC_RESISTOR_DISABLED;
nrf_saadc_channel_init(0, &channel_0_config);
nrf_saadc_channel_init(1, &channel_1_config);
nrf_saadc_channel_init(2, &channel_2_config);

Is there any simpler/more elegant code to turn off these resistors, shouldn't that be the part of ..uninit() function?

Regards Tomasz

Parents
  • Can you provide more information about your sampling and your current consumption. Do you mean 12uA average current? or 12uA while the ADC is sampling, or 12uA when the ADC is between samples? Are you measuring the current with a scope to get this kind of resolution?

    What is your sample rate, is this 1Hz or 1000Hz?

  • Ok so I have a list of suggestions, some of which are probably obvious but you never know.

    • What board are you using? A custom or dev board?
    • Do you have a segger debugger attached to your target while you are making this measurement. On my board I have a 2uA sleep current (just the RC running), but if I have the debugger SWCLK line attached, I get 12uA
    • How exactly are you measuring the current, you say 100R impedance, but with your multimeter in uA mode? If you are using a shunt resistor you need to be measuring volts. Maybe you mean that your multimeter has a 100R burden internal?
    • If you make your software do none of the initialisation and just have the device immediately sleep on boot, what current do you get?
    • Are you able to measure current if you do a system_power_off? I get 300nA on my board (RTC off).
Reply
  • Ok so I have a list of suggestions, some of which are probably obvious but you never know.

    • What board are you using? A custom or dev board?
    • Do you have a segger debugger attached to your target while you are making this measurement. On my board I have a 2uA sleep current (just the RC running), but if I have the debugger SWCLK line attached, I get 12uA
    • How exactly are you measuring the current, you say 100R impedance, but with your multimeter in uA mode? If you are using a shunt resistor you need to be measuring volts. Maybe you mean that your multimeter has a 100R burden internal?
    • If you make your software do none of the initialisation and just have the device immediately sleep on boot, what current do you get?
    • Are you able to measure current if you do a system_power_off? I get 300nA on my board (RTC off).
Children
No Data
Related