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

считывание аналогового сигнала

IamTeapot

New member
Доброго времени суток.
Я начал свое знакомство с esp8266 c такой вот сборки (ESP8266 IOT Board(Arduino IDE or NodeMCU Lua Programming) - Elecrow)

Решил попробовать оцифровать аналоговый сигнал. Тут стандартно 10-ти разрядное АЦП оцифровывает сигнал до 1В. Высокая точность мне не важна, так что этого должно хватить с головой. Программирую контроллер в Arduino IDE. Вот функция, получающая сигнал:
void dataread(){
out = (unsigned int) analogRead(Ao);
sprintf(line,"<h1>out_volt = %d mV<h1>", out);
server.send(200, "text/html", line);
}
out задекларирован как uint16_t, line как char[30]
A0 - input: pinMode(A0, INPUT);

Проблема в том, что данные, которые я в результате получаю на экран в где-то в 3.5 - 4 раза меньше тех, которые я подаю и параллельно меряю мультиметром. То есть при подаче 337 мВ в браузере получаю 86. При 720 - в браузере 207. При 910 получаю 260. (во всех числах погрешность 5-10 мВ).
В начале предположил, что что-то не правильно считывает или преобразует. Например сдвигает на 2 бита вправо. Но в таком случае я бы не мог получить больше чем 256, а я получаю.
Так как опыта у меня нет, я теряюсь в вопросе, куда мне копать. Буду благодарен любому совету.
 

nikolz

Well-known member
Доброго времени суток.
Я начал свое знакомство с esp8266 c такой вот сборки (ESP8266 IOT Board(Arduino IDE or NodeMCU Lua Programming) - Elecrow)

Решил попробовать оцифровать аналоговый сигнал. Тут стандартно 10-ти разрядное АЦП оцифровывает сигнал до 1В. Высокая точность мне не важна, так что этого должно хватить с головой. Программирую контроллер в Arduino IDE. Вот функция, получающая сигнал:
void dataread(){
out = (unsigned int) analogRead(Ao);
sprintf(line,"<h1>out_volt = %d mV<h1>", out);
server.send(200, "text/html", line);
}
out задекларирован как uint16_t, line как char[30]
A0 - input: pinMode(A0, INPUT);

Проблема в том, что данные, которые я в результате получаю на экран в где-то в 3.5 - 4 раза меньше тех, которые я подаю и параллельно меряю мультиметром. То есть при подаче 337 мВ в браузере получаю 86. При 720 - в браузере 207. При 910 получаю 260. (во всех числах погрешность 5-10 мВ).
В начале предположил, что что-то не правильно считывает или преобразует. Например сдвигает на 2 бита вправо. Но в таком случае я бы не мог получить больше чем 256, а я получаю.
Так как опыта у меня нет, я теряюсь в вопросе, куда мне копать. Буду благодарен любому совету.
На платах nodemcu на входе АЦП стоит делитель напряжение.
 
Сверху Снизу