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

Работа с ADC esp8266

nikolz

Well-known member
максимальное значение на выходе однополярного АЦП - это число со всеми единицами в разрядах.
Если взять число размером в байт т е 11111111 (255,0xFF) и преобразовать в short через арифметическое расширение то преобразование будет выполнено путем расширения знака т е получим 1111111111111111 или ,в формате unsigned short 65535 а long - это 4 байта т е в формате unsigned long 4294967295
 

Zhenya88

Member
Спасибо за разъяснения.
Тогда не понятно, как вы в ESP функцию Esp.vcc используете, если она по умолчанию максимальное значение возвращает. Просто смотрю примеры и не виде там функций map или иных для перевода. Просто вызывают все esp.vcc и получают миливольты. У меня получается тоже выход в воздухе висит без фоторезистора
 

Сергей_Ф

Moderator
Команда форума
@Zhenya88 для работы Esp.vcc аналоговый вход должен висеть в воздухе. Вы вывпаяли только фоторезистор или резистор делителя тоже? Скорее всего резистор делителя оставили - вот показания и врут. Ну и инициализация ADC_MODE(ADC_VCC) обязательна.
 

Сергей_Ф

Moderator
Команда форума
"ESP.getVcc ()
Чтобы прочитать напряжение питания, вход АЦП должен быть отключен физически от любых цепей. Кроме того, следующая строка должна быть добавлена к скетчу:
ADC_MODE (ADC_VCC);
Эта строка должна появиться вне всяких функций, например сразу после #include строк скетча."
 

Zhenya88

Member
выпаял резистор (теперь ни обычного, ни фоторезистора). Питание через микроюсб (т.е. через стаб ams).
IMG_20190522_181855_HDR.jpg
IMG_20190522_181916.jpg
код в скетче
ADC_MODE (ADC_VCC);
double vcc = (double)ESP.getVcc()/1000; //измерение напряжения питания
String msg = "Battery_Vin = "+String(vcc);
void setup() {
Serial.begin(115200); // initialize serial communications at 115200 bps:
}
void loop() {
// msg = "Battery_Vin = "+String(vcc);
Serial.println(msg);
delay(5000);
}
даёт
Код:
Battery_Vin = 4.47
я правильно понимаю, что должно быть 3.3?
т.е. достаточно просто коэффициент/множитель 0,7382 использовать или функцию map необходимо?
 
Сверху Снизу