Есть много ссылок с описанием делителей на измерение напряжения на пине (за счет сравнения с напряжением питания, и за счет опорного напряжения 1,1 В).
Но мне не попалось ни одной статьи, где было бы описана процедура измерения напряжения питания Arduino. Это возможно реализовать?
//---------------------------------------------------------
float Vop= (float)(1.1*16368)/Vbg() ;
//---------------------------------------------------------
int Vbg() {
ADMUX = (1<<REFS0)|(0<<REFS1)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(0<<MUX0);
long buffersamp=0;
for (int n=0x0; n<=0xff; n++ ) {
ADCSRA |= (1<<ADSC)|(1<<ADEN); //Starts a new conversion иногда надо заменить на это ADCSRA = 0xc7;
while (bit_is_set(ADCSRA,ADSC));
buffersamp += ADC; }
buffersamp >>=4; //16368 full scale 14bit
ADCSRA &= ~(1 << ADEN); // отключаем АЦП
return buffersamp;
}
Не моё. Это от @dimax
Ни чего не надо физически подключать к пинам контроллера. Измеряет напряжение с точностью до сотых вольта.
Для измерения напряжения питания не нужны никакие делители. И пинов никаких занимать не нужно.
Вот Вам аппнота от производителя микроконтроллера, где написано как это делается. Когда изучите, скажите, я добавлю кое-что из личного опыта, чего там нет.
Да, нет. Тут не хватает очень важного шага о котором @dimax не мог не сказать, Вы наверное, забыли.
В таком виде точность будет ±10%, т.к. в реальности (по даташиту) опорное 1.1В на поверку может оказаться в интервале 1.0 - 1.2.
Если ±10% достаточно, то можно и так, а если нет, то надо уточнить реальное опорное напряжение для своего экземпляра (в аппноте это прописано). И ещё, если уж нужна точность, я бы измерял в режиме “подавления шумов”.
Возможно и забыл что то, поправте. Я этим пользуюсь измеряя напряжение батарейки датчиков собранных на 328р. Точность с прибором до сотки всегда совпадает.
Это говорит только о том, что вы и не пытались искать.
У компании Dahua отличная память!
Главное, что её … много, в общем.
дада! в переводе на рускей это “очень много”, и это хорошо!