• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Странные значения, получаемые от аналогового входа.

Andrey L

Member
Приветствую.

Тестирую очередной пример от espressif (ADC) - espressif/esp-idf

Поскольку не смог найти у себя переменный резистор, смастерил делитель напряжение из двух равных резисторов. (Потом начал по отдельности отсоединять резисторы.)

Вот только вывод мне совсем не нравится.

При старте модуль выдаёт
eFuse Two Point: NOT supported
eFuse Vref: Supported
Characterized using eFuse Vref
Потом он мерит лишь два значения
"Raw: 4095 Voltage: 1039mV" - если входящий пин связан с 3,3V, но при этом не влияет соединяю ли я его с "GND" или нет. (Т.е. ограничивающий резистор или делитель напряжения.)
"Raw: 0 Voltage: 75mV" - если входящий пин не связан с 3,3V.

Я что-то не так делаю?

P.S. У меня подделка под DOIT Esp32 DevKit v1.
 

Andrey L

Member
В поисках ответов нашёл на ютубе код от Колбана.
Код:
#include <driver/adc.h>
#include <esp_log.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include "sdkconfig.h"

static char tag[] = "adc1";

void app_main() {
    ESP_LOGD(tag, ">> adc1");
    adc1_config_width(ADC_WIDTH_12Bit);
    adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_0db);
    while (1)
    {
        int value = adc1_get_voltage(ADC1_CHANNEL_0);
        ESP_LOGD(tag, "value: %d", value);
        printf ("value: %d  \n", value);
        vTaskDelay(1000/portTICK_PERIOD_MS);
    }
    vTaskDelete(NULL);
}
Но нормальные результаты я пока не получил.
 

Юрий Ботов

Moderator
Команда форума
ацп 8266 мерит 0...1В. Этим все сказано. Подавая на него 3.3 вольта вы его тупо перегружаете.
 

Andrey L

Member
@Юрий Ботов В "Readme" к примеру было написано следующее: "In this example, we use ADC_UNIT_1 by default, we need to connect a voltage source (0 ~ 3.3v) to GPIO34."

Т.е. у меня не ЕSP32, а перекрашенная ESP8266?
 

nikolz

Well-known member
@Юрий Ботов В "Readme" к примеру было написано следующее: "In this example, we use ADC_UNIT_1 by default, we need to connect a voltage source (0 ~ 3.3v) to GPIO34."

Т.е. у меня не ЕSP32, а перекрашенная ESP8266?
Какой у Вас модуль?
ESP32 или ESP8266?
Какой номинал резисторов
Куда вы их подключаете
Что показывает тестер на пине когда туда подключаете резистор
 

sharikov

Active member
Теперь я запутался. Документация "Analog to Digital Converter", первый пример с "ADC_ATTEN_DB_0": "The input voltage in above example is from 0 to 1.1V (0 dB attenuation)."

Но почему на Github они при этом же "ADC_ATTEN_DB_0" написали, что можно подавать до 3,3V?
В idf ведь все написано:
[inline]components/driver/include/driver/adc.h :
ADC_ATTEN_DB_0 = 0, /*!<The input voltage of ADC will be reduced to about 1/1 */
...
ADC_ATTEN_DB_11 = 3, /*!<The input voltage of ADC will be reduced to about 1/3.6*/[/inline]
Если у вас на вход Adc подается 3.3 V следует настраивать ADC_ATTEN_DB_11
 
Сверху Снизу