Page 1 of 1

convert raw reading from GPIO39 to voltage would result in crash

Posted: Fri Apr 12, 2019 2:39 pm
by erik2727
<r>I could not understanding why ESP-IDF voltage calculation if apply to convert the raw reading from GPIO39 would result in crash
<br/>
uint32_t voltage = esp_adc_cal_raw_to_voltage(read_raw, adc_chars);<br/>
<br/>
Below is the simple source code<br/>
<br/>
  1. #include <stdio.h><br/>
  2. #include <stdlib.h><br/>
  3. #include "freertos/FreeRTOS.h"<br/>
  4. #include "freertos/task.h"<br/>
  5. #include "freertos/queue.h"<br/>
  6. #include "driver/gpio.h"<br/>
  7. #include "driver/adc.h"<br/>
  8. #include "driver/dac.h"<br/>
  9. #include "esp_system.h"<br/>
  10. #include "esp_adc_cal.h"<br/>
  11. #define BLINK_GPIO 2
  12. <br/>
  13. <br/>
  14. static void Read_GPIO39() {<br/>
  15.     int read_raw = 0;<br/>
  16.     adc1_config_width(ADC_WIDTH_BIT_12);<br/>
  17.     adc1_config_channel_atten(ADC1_CHANNEL_3, ADC_ATTEN_DB_11);<br/>
  18.     read_raw=adc1_get_raw(ADC1_CHANNEL_3);<br/>
  19.     **//uint32_t voltage = esp_adc_cal_raw_to_voltage(read_raw, adc_chars);**<br/>
  20.     printf("Intensity : %d\n", read_raw);<br/>
  21. <br/>
  22.     //printf("Voltage: %d\n", voltage);<br/>
  23.     gpio_pad_select_gpio(BLINK_GPIO);<br/>
  24.     gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);<br/>
  25.     gpio_set_level(BLINK_GPIO, 1);<br/>
  26. }<br/>
  27. <br/>
  28. <br/>
  29. void app_main() {<br/>
  30.     ESP_ERROR_CHECK(nvs_flash_init());<br/>
  31.     // initialise_wifi();<br/>
  32.     while (1) {<br/>
  33.         Read_GPIO39();<br/>
  34. <br/>
  35.         vTaskDelay(3000 / portTICK_PERIOD_MS);<br/>
  36.         gpio_set_level(BLINK_GPIO, 0);<br/>
  37. }<br/>
  38. }

Re: convert raw reading from GPIO39 to voltage would result in crash

Posted: Mon Apr 15, 2019 3:34 am
by ESP_Sprite
What is adc_chars? How did you define it?

Re: convert raw reading from GPIO39 to voltage would result in crash

Posted: Mon Apr 15, 2019 11:40 am
by erik2727
with below statement , 7% variance is observed. I have doubt on the atten not sure should this be ADC_ATTEN_DB_11 or some others value for GPIO39 , voltage reading is very unstable on genuine espressif dev Wrover B development board


static const adc_atten_t atten = ADC_ATTEN_DB_11;
static const adc_unit_t unit = ADC_UNIT_1;
#define DEFAULT_VREF 1100
adc_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));

esp_adc_cal_characterize(unit, atten, ADC_WIDTH_BIT_12, DEFAULT_VREF,adc_chars);