Тема вольтметра, наверное, вторая по популярности (заезженности) после «блинка». Но все же решился написать про свой способ измерения напряжения.
Естественно самым точным (при применении «голой» ардуины) будет способ с использованием внешнего опорного напряжения. Но на ProMini вывод для подключения AREF отсутствует, там он просто подключен через конденсатор к GND. Поэтому приходится, что-то придумывать.
Если «загуглите» тему «секретный вольтметр» то это как раз, то о чем я буду рассказывать.
Суть задачи в том, чтобы вначале используя внутреннее опорное напряжение 1.1V измерить напряжение питания контроллера Vcc, которое потом будет использовано как опорное напряжение.
Ниже показан примерный скетч, который это и выполняет. Скетч я закомментировал, поэтом особо расписывать тут не буду.
Это настройки :

В строке 6 задаем значение опорного напряжения (в реале оно не всегда 1.1V и отличается у экземпляров МК). Для этого измеряем мультиметром напряжение Vcc на плате и корректируем VBG, пока расчетное значение не совпадет с реальным значением.
В строках 22 – 24 немного ускоряем работу АЦП.
Собственно функция измерения напряжения:

В строке 71 задаем вход АЦП на котором будем измерять напряжение:
А0 = 0000, А1 = 0001, А2 = 0010, А3 = 0011, А4 = 0100, А5 = 0101, А6 = 0110, А7 = 0111
Вот полученный результат:

Обратите внимание на выделенные участки, это замкнул вывод A0 на Vcc …

Комментарии 4
встречал еще вариант с калибровкой.
сначала прошивается скетч калибровки. он через монитор порта выдает напряжение питания измеренное.
и просит ввести измеренное мультиметром. затем подсчитывает реальное значение внутреннего опорного источника и вписывает его в EEPROM.
затем прошиваем наш скетч а он уже берет из EEPROM реальное значение источника опорного напряжения.
а зная его значение мы уже можем измерять более точно напряжения.
вот только потерял я его где то а как на зло мне оно сейчас очень нужно
Это как ехать из Днепра в Киев через Ужгород.
Или это сделано для того, чтобы не распространять программу БЕЗ исходника. Сам когда то так делал.
Если есть исходник то внутреннее опорное корректируем просто в тексте без заморочек с двумя программами.
Вспомнил. Это для удобства.
Какая то библиотека от Alex Gyver .
Там сначала в скетче функцию SetupWizard или как то так вызываешь. И запускаешь монитор порта. Микроконтроллер выдаст напряжение питания, которое он изменил учитывая опорное 1.1 … Затем надо ввести напряжение измеренное мультиметром.
Ардуина спросит записать в еепром. И по какому адресу.
Затем прошиваем скетч свой и используем из еепром константу. Думаю для большой партии удобно.
А так можно и дефацном в скетче прописать
Если, " …библиотека от Alex Gyver " тогда конечно я молчу …