• Система автоматизации с открытым исходным кодом на базе 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 на входе АЦП стоит делитель напряжение.
 
Сверху Снизу