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

Problems with the use of ADC at low power

Hi, everyone,

I am pretty new to nRF52 development. Right now,I want to turn SAADC off at low power and turn it back on when wake up, but after  nrfx_saadc_uninit();When I use user_adc_init() again, the SAADC state is always busy.

Parents
  • void user_adc_init(void)
    {
    	ret_code_t errCode;
    	user_adc_enable();
        nrf_saadc_channel_config_t channel_config =
            NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN3);
    
        errCode = nrf_drv_saadc_init(NULL, saadc_callback);
        APP_ERROR_CHECK(errCode);
    
        errCode = nrf_drv_saadc_channel_init(3, &channel_config);
        APP_ERROR_CHECK(errCode);
    
    
    	errCode = nrf_drv_saadc_buffer_convert(m_buffer_pool, 1);
        APP_ERROR_CHECK(errCode);
    
    
    }
    
    void saadc_callback(nrf_drv_saadc_evt_t const * p_event)
    {
    	float adcval;
    	ret_code_t err_code;
        if (p_event->type == NRF_DRV_SAADC_EVT_DONE)
        {
            ret_code_t err_code;
    
            err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer, 1);
            APP_ERROR_CHECK(err_code);
    			adcval = (float)p_event->data.done.p_buffer[0]*3.6;
        }
    }
    
    void user_adc_read(void)
    {
    	ret_code_t errCode;
    	errCode = nrf_drv_saadc_sample();
    	APP_ERROR_CHECK(errCode);
    }

Reply
  • void user_adc_init(void)
    {
    	ret_code_t errCode;
    	user_adc_enable();
        nrf_saadc_channel_config_t channel_config =
            NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN3);
    
        errCode = nrf_drv_saadc_init(NULL, saadc_callback);
        APP_ERROR_CHECK(errCode);
    
        errCode = nrf_drv_saadc_channel_init(3, &channel_config);
        APP_ERROR_CHECK(errCode);
    
    
    	errCode = nrf_drv_saadc_buffer_convert(m_buffer_pool, 1);
        APP_ERROR_CHECK(errCode);
    
    
    }
    
    void saadc_callback(nrf_drv_saadc_evt_t const * p_event)
    {
    	float adcval;
    	ret_code_t err_code;
        if (p_event->type == NRF_DRV_SAADC_EVT_DONE)
        {
            ret_code_t err_code;
    
            err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer, 1);
            APP_ERROR_CHECK(err_code);
    			adcval = (float)p_event->data.done.p_buffer[0]*3.6;
        }
    }
    
    void user_adc_read(void)
    {
    	ret_code_t errCode;
    	errCode = nrf_drv_saadc_sample();
    	APP_ERROR_CHECK(errCode);
    }

Children
No Data
Related