типа не меняется, ну мы то знаем ничего в мире постоянного нет, просто сильно меньше 10%
Ради интереса проверил, залил скетч
void setup ()
{
ADMUX = bit (REFS0) | bit (REFS1);
}
void loop () { }
измерил напряжение:
Оказалось не соврал, указав 1.1 вольт, однако в скетче следует данное значение вынести в отдельную переменную.
я думаю (даже сказал бы уверен) этот прибор не годится для измерения опоры, если есть нормальный откалиброванный осциллограф измерь им
Хорошо, у меня правда осциллограф FNiRSi 1013D не уверен, что он тоже эталонный прибор.
китайцы продают источники опорного напряжения, поверенные, можно по ним откалиброваться
PS нужен вольтметр с входным сопротивлением хотя бы 1 мегаом
Что посоветуете, а то я на ali зашёл и там разброс от 300 до 10000 рублей, хотелось бы бюджетный вариант.
у меня есть всё профессиональное из СССР, не посоветую, не покупал, может у друзей есть сертифицированный милливольтметр? Нужно же один раз по сути, точно могу сказать на вашем местном ТВ есть все необходимые приборы и там есть инженер )))
ЗЫ поставь константу 1.11 будет близко к эталону
Хорошо.
Теоретически Вы правильно поняли, но в реальности неправильно (“Жизнь такова, какова она есть, и больше никакова”).
То, что Вы измерили, надо измерять высокоомным мультиметром, а не каким попало. Моя практика показала, что чем выше входное сопротивление мультиметра, тем точнее, НО …
У меня есть ахрененно дорогой мультиметр с сопротивлением 50МΩ (друзья на юбилей подарили, сам бы ни в жисть … жаба бы удавилась), но даже он здесь немного подвирает.
В итоге я сделал маленький скетч, который просто подбирает значение. Я ввожу ему текущее напряжение питания (его можно чем попало измерять, там нет таких жестких требований) и он просто перебирая по единичке, подбирает мне опорное (в милливольтах) так, чтобы получалось именно это напряжение питания. После этого, измеренное питание никогда не отличается от хорошего мультиметра более чем на пару-тройку милливольт.
Если говорить дальше про измерения напряжений на АВР, там есть ещё пара тонкостей, которые Вы не учитываете, но если их все соблюсти, то можно реально добиться тех самых погрешностей в 2 lsb, о которых написано в даташитие. Если делать просто контроль батареи, то можно об этом не париться. Но Вы же измерительный прибор делаете. Я бы, на Вашем месте, заморочился, правда. Рассказать про “тонкости”?
то-есть, я был очень большой оптимист советуя 1 мегаом хотя бы )))
PS кстати при таком высоком входном сопротивлении таким прибором ещё надо уметь пользоваться, наводки идишь его, так что добрый старый советский осциллограф наше всё
Да, мне нравятся Ваши статьи, с удовольствием почитаю.
Ну, какая там статья, там собственно две вещи, которые надо соблюдать, чтобы выжать из авр-овского АЦП всё, что он умеет.
1.
Правильно развести питание аналоговой части МК. В Ардуино оно разведено неправильно – сэкономили на двух конденсаторах и индукторе. Как правильно развести, написано в даташите, прямо схема приведена. Т.е. если нужна хорошая работа АЦП, берём не ардуино, а голый чип и правильно разводим питание аналоговой части.
2.
Измерять нужно в специально режиме Noise Reduction, т.е. по максимум исключить собственные шумы МК. Для этого его нужно погрузить в сон, чтобы во время измерения он не работал и не шумел. Если нужен пример, как это делается, то в моей “библиотеке” это делается
вот так:
//
// Запуск измерения с погружением МК в сон, пока идёт измерение
// Это т.н. техника "Noise Reduction", процессор не "шумит" пока идёт измерение
// Необходимо включить прерывания, иначе он не сможет выйти из режима сна.
//
static inline void adcCoversionWithSleep(void) {
adcClearPendingInterrupt();
adcSetInterruptBit();
const uint8_t oldSREG = SREG;
sei();
// adcStartConversion() здесь не нужно - само запустится при переходе в SLEEP_MODE_ADC
set_sleep_mode(SLEEP_MODE_ADC);
sleep_mode();
adcClearInterruptBit();
//
// следующая строка нужна ТОЛЬКО в том случае, если выход из сна
// произошёл не по готовности результата, а по другой причине
// (TWI, асинхронный таймер и т.п.)
// в этом случае надо таки дождаться готовности результата
// если же всё нормально, она убедится и пойдёт дальше
while(adcConversionInProgress());
SREG = oldSREG;
}
Для этого кода требуется обработчик прерывания АЦП, хотя бы пустой. Например,
EMPTY_INTERRUPT(ADC_vect)
В коде используются четыре маленькие функции,
вот они:
static inline void adcSetInterruptBit(void) { ADCSRA |= bitMask(ADIE); }
static inline void adcClearInterruptBit(void) { ADCSRA &= ~ bitMask(ADIE); }
static inline void adcClearPendingInterrupt(void) { ADCSRA |= bitMask(ADIF); }
static inline bool adcConversionInProgress(void) { return ADCSRA & bitMask(ADSC); }
Кстати, там есть комментарий, что процесс измерении был прерван посторонним прерыванием и, типа, надо подождать пока измерение таки завершится. Когда я делал совсем уж параноидальную версию, я в этом месте (если измерение прервано посторонним прерыванием) не ждал, а отказывался от этого результата и запускал новое измерение. Т.е. добивался, чтобы измерение прошло полностью во сне.
Чтобы измерения пореже прерывались чем попало, имеет смысл на время измерения отключить нулевой таймер, чтобы не щёлкало его “миллисное” прерывание постоянно. Но это повлияет на миллис, само собой.
Спасибо за рекомендации, поэксперементирую в выходные.
Очепятка?
Да, только, поскольку она везде плодилась копипастом, библиотека нормально работает. Даже не знаю сейчас как теперь исправлять – столько проектов повалится Наверное, заведу функцию с правильным названием, а эту таки оставлю для совместимости
И пометить ее как устаревшую ))
???
“Обратите внимание, что при отсутствии внешнего источника питания, подключенного к USB-порту или контактам IN, на пины OUT начнет поступать питание от аккумулятора. На выходе будет напряжение 3,7 Вольт”
из
Из-за отсутствия схемы непонятно, как же решен вопрос с питанием.
И сразу надо отметить, что импульсные схемы заведомо плохо влияют на АЦП, к схеме зарядки батареи это не относится.
Да мелочи)
Я вот лишился пары проектов. Не только код, но и схемы, платы… А всё из-за халатности. При переустановке Окон, наивно полагая что файлы лежат в основном хранилище, взял и форматнул к чертям😱
Пару библиотечек таки нашёл на своём же Гите, о котором и думать забыл)
да нет, опора должна держать нагрузку и расхождение у ЕвгенияП связаны скорее с тем, что ацп грузит и чуть подсаживает опору при работе.