• Система автоматизации с открытым исходным кодом на базе 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 необходимо?
 
Сверху Снизу