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

Multichannel use of ADC in NRF51822

I want to measure voltages at all 8 channels but when I am enabling all channels its sending the values once only and after that its not sending anything, my requirement is i don't want to use any handler,i am using polling method simultaneously to sample ADC,please suggest if any code available or any support message for the same.

Parents Reply
  • Please verify that you are using the correct pins on the Waveshare board. Could you share with me the pinout of the waveshare board you are using, and how you are testing it?

    Akshay Khairkar said:
    i am connecting to AN0 pin and AN1 pin

    I assume you then have changed the code I provided earlier, to reflect this?
    Please share with me the code you are currently running.

    Akshay Khairkar said:
    10 bit ADC which can give o/p as 2^10 i.e. upto 1024 certainly with or without i/p its giving same value, there is no formula i am using right now i just want some o/p but its giving the o/p as mentioned above queries.

    I do not know what you mean by "o/p", but I agree that reading values in the 500 range using the 10-bit ADC configuration sounds strange.

    Best regards,
    Karl

Children
  • Output (O/p) is nothing but value i am getting after reading ADC, I just want ADC to give me some values according to my input to AN0 or AN1 pin still i am not getting any values.Please suggest me if any other ways if available to read multichannel ADC values or tell me if it is hardware restriction

  • Akshay Khairkar said:
    value i am getting after reading ADC, I just want ADC to give me some values according to my input to AN0 or AN1 pin still i am not getting any values

    You are not giving me a lot to work with here, since you are not answering my questions.
    Please, take a look at what I asked about in my previous reply, and answer the questions I wrote you.
    I require more information in order to help you resolve this issue.

    Akshay Khairkar said:
    or tell me if it is hardware restriction

    I assure you there are no hardware restrictions on reading multiple channels of the ADC. Do not worry, the issue here is not hardware restrictions.

    Best regards,
    Karl

  • static nrf_drv_adc_channel_t m_channel_config_0 = NRF_DRV_ADC_DEFAULT_CHANNEL(NRF_ADC_CONFIG_INPUT_0);
    static nrf_drv_adc_channel_t m_channel_config_1 = NRF_DRV_ADC_DEFAULT_CHANNEL(NRF_ADC_CONFIG_INPUT_1);
    
    static  nrf_adc_value_t sample_channel_0 = 0;
    static  nrf_adc_value_t sample_channel_1 = 0;
    
    static void adc_init(void)
    {
        ret_code_t err_code;
        nrf_drv_adc_config_t config = NRF_DRV_ADC_DEFAULT_CONFIG;
        
        err_code = nrf_drv_adc_init(&config, NULL);
        APP_ERROR_CHECK(err_code);
    }
    
    //Error Code:H1600
    void user_adc_init0(){
             nrf_drv_adc_sample_convert(&m_channel_config_0, &sample_channel_0);
      
             nrf_delay_ms(1000);
    
             printf("\r\n  0 :%d\r\n",sample_channel_0);
       
    }
    //Error Code:H1700
    void user_adc_init1(){
       
       
          nrf_drv_adc_sample_convert(&m_channel_config_1, &sample_channel_1);
       
            printf("\r\n  1 : %d\r\n",sample_channel_1);
    }
    int main(void)
    {
    
    adc_init();
    for (;;)
        {
          printf("\r\n for Start!\r\n");
          user_adc_init0();
          nrf_delay_ms(100);
          user_adc_init1();
          nrf_delay_ms(100);
          nrf_delay_ms(2000);
          printf("\r\nADC fin!\r\n");
          
          printf("\r\n  0 :%d\r\n",sample_channel_0);
          printf("\r\n  1 : %d\r\n",sample_channel_1);
          
         }
    }
    
    

  • So here is my code for sampling 2 ADC channels and just printing the values of ADC, i just want ADC to give me values in printf statement according to the i/p like if i am giving  some voltages over this maybe between 1.0V to 3.3v so i should get the values according to voltage i.e.in between 0 - 1024 , but the values  i am getting are not changing i.e with or without input i am getting same values.

  • Akshay Khairkar said:
    i.e with or without input i am getting same values.

    And what values are these? What is this program outputting? You need to tell me what is happening.
    You need to give me all the available information, so that I may best help you.

    I see from your code that you have changed the sample_channel_* variable types from static volatile in the code I provided you earlier. Why have you done this?
    If they are not declared as volatile then the compiler will optimize them to a constant value of 0.

    By omitting such details, or making changes without telling me, you are making it very hard to help you.

    In the future, please write out your problem description, symptoms and goals as clearly as possible in order for others to be able to help you.
    This will reduce the time it takes for you to receive help, and the time it takes to give this help.

    Please try to change the samples' type back to static volatile, and let me know what you observe when running the program.

    Best regards,
    Karl

Related