• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Общие вопросы по Arduino IDE для ESP8266

Telek

New member
Вопрос по ADC. Измеряю напряжение питания 3.3v. Делаю делитель 15к + 1к - получаю значение ADC 136 (пересчитываем 1/1024*136*16=2.1v)
Меняю делитель на 10к+1к - получаю ADC 251 (пересчитываю 1/1024*251*11=2.7v). Почему значения так меняются от делителя и почему они не похожи на реальные?
Тестером проверил, делители делят правильно.
 
Вопрос по ADC. Измеряю напряжение питания 3.3v. Делаю делитель 15к + 1к - получаю значение ADC 136 (пересчитываем 1/1024*136*16=2.1v)
Меняю делитель на 10к+1к - получаю ADC 251 (пересчитываю 1/1024*251*11=2.7v). Почему значения так меняются от делителя и почему они не похожи на реальные?
Тестером проверил, делители делят правильно.
Модуль умеет измерять напряжение от 0 до 1В
 

Telek

New member
АлександрН, поэтому я и измеряю через делитель. Вопрос, в том, почему показания отличаются сильно от реального, в том числе зависят от суммарного сопротивления делителя? И как измерить правильно?
 

pvvx

Активный участник сообщества
Вопрос, в том, почему показания отличаются сильно от реального, в том числе зависят от суммарного сопротивления делителя? И как измерить правильно?
А что и чем вы измеряете? У чипа на ногу ADC назначается подтяжка. Есть три известных программных процедуры измерения в SDK. Измерение ADC у чипа "полусофтовое" и зависимостей масса. Ток утечки на ногу ADC, при нормальном измерении я измерял. Он мал. Поставьте на вход емкость (возможно поможет) - там полусофтовый SAR и входного буфера у него нет.
Процедура readvdd33() вообще измеряет сопротивление, подключенное ко входу ADC (падение на нем при включенной подтяжке входа к чему-то там внутрях).

В доках к новым SDK указано, что переключение типов измерения ADC производится изменением в ячейке 107 вроде esp_init_data_default.bin, который записывается в flash но 0x7c000
 
Последнее редактирование:

Telek

New member
pvvx, измеряю через analogRead(0).
readvdd33() - дает верный результат(если я делитель уберу), но мне она не подходит, т.к. я хочу измерять внешнее напряжение(на аккумуляторе 12v)
 

pvvx

Активный участник сообщества
readvdd33() - дает верный результат(если я делитель уберу), но мне она не подходит, т.к. я хочу измерять внешнее напряжение(на аккумуляторе 12v)
Утечку смотрите и кондер на вход.... При 1 кОм такого быть не должно.

Только что:
47к на корпус + 8.2к на источник в 0.628В. Получаем деление в 1.1745. ADC показывает 555.
47к на корпус +422к на источник в 0.628В. Получаем деление в 9.979. ADC показывает 66.
555*1.1745/9.979 = 65.321926.
Отношение делителей примерно 0.117 - ставлю напряжение чтобы показывало 1000 при малом делителе и переключаю делитель - показывает 117
 
Последнее редактирование:

Telek

New member
pvvx, дома проверю. В моем случае получается, что чем меньше сопротивление делителя - тем точнее результат. Как будто у ADC внутреннее сопротивление соизмеримое с моим делителем(т.е. Относительно большой ток утечки)... Может это в моем экземпляре... С др. стороны свое напряжение он измеряет верно. А там не может как-то подтяжка для readvdd33 оставаться при измерении?
 

pvvx

Активный участник сообщества
А там не может как-то подтяжка для readvdd33 оставаться при измерении?
Может. Про то и в начале разговора говорил. Надо смотреть софт и реализацию - зависит от режимов WiFi. Ещё ADC вроде плохо работает при одиночных замерах. Чем чаше опрашивается, тем точнее :) Предел - 20кГц. Я то проверяю в своей Web-свалке - system_adc_read(). Есть system_get_vdd33(), readvdd33(), phy_get_vdd33() и мой собственный опрос ADC в 12 бит (который до 20кГц). У Espressif вроде ошибка в нуле, т.е. смещение +- 1 и мелкие замеры неверны на неё. И опора не 1.000В у ADC.
 
Последнее редактирование:

JustACat

Moderator
Команда форума
Telek, и WiFi должен быть отключен на время измерения, емнип. Иначе они вообще не гарантируют ничего.
 

Telek

New member
JustACat, а как его выключить? Просто отсоединиться от точки доступа или там есть команды на выключения wifi?
 

pvvx

Активный участник сообщества
Telek, и WiFi должен быть отключен на время измерения, емнип. Иначе они вообще не гарантируют ничего.
Там оно (в SDK) автоматом отключается и включается (pm_set_sleep_mode()....pm_wakeup_init()). Код system_adc_read() приведен в моей свалке (Web_Base\app\driver\adc.c) и от него у меня используется только часть для демки записи wav на 20kHz.
И я не выключаю WiFi вообще. Там завязка с оборудованием WiFi и всё наоборот - когда WiFi блок отключен, то ADC не работает. И это не ADC, а кусок - компаратор и ещё пару блоков источников тока, да ещё мелочи... Всё программно запускается и суммируется для вычисления кода конечного значения ADC.
CLEAR_PERI_REG_MASK(0x60000D50,2);SET_PERI_REG_MASK(0x60000D50,2); запускает сравниватель, накопитель...
while(READ_PERI_REG(0x60000D50)&(0x7<<24)); ожидание накопления (тут и всё ограничение на скорость - 50us - 20кГц).
read_sar_dout(sardata); выдает (считывает из регистров) 8-мь интервалов сравнения и они суммируются для получения кода ADC.
Уверен, что можно поменять тайминг SAR-a и получим нормальный 44kHz оцифровку. Но надо делать потоковое аудио, а лень.
 
Последнее редактирование:
проверил с делителями 10к+1к - выдает 303, 22к+1к - 147 что похоже на правду
использую AnalogRead(0), wifi подключен
 

SamGold

New member
С небольшими танцами тоже собрал под Ubuntu x32. Подскажите, пожалуйста, как компилировать не через Arduino редактор. Может какой-то makefile есть(найти не смог). Хочу в качестве редактора использовать NetBeans так как привык к нему.
 

SamGold

New member
Спасибо! А сам алгоритм компиляции прописан в это IDE? То есть мэйквайла нет, чтобы привязать к любому другому редактору?
 

Victor

Administrator
Команда форума
Поправлял что-то @igrr, чтобы плагин к Eclipse работал - поищите в issue.
Тогда, возможно, разберетесь как к NetBeans прикрутить
 
Сверху Снизу