Представьте себе такую ситуацию: есть устройство на микроконтроллере, в него нужно добавить измерение напряжения питания самого МК, но платы уже изготовлены промышленным способом, и там нет соответствующей дорожки от Vcc до входа АЦП. Тратиться на новые платы не хочется, равно как и вешать перемычки. Мы нашли выход! Если бы это был STM32, проблема решилась бы элементарно. Вход АЦП можно подключить к напряжению питания, просто его сконфигурировав соответствующим образом.
У Атмеги этого сделать нельзя, но это не значит, что вообще невозможно измерить напряжение питания внутри микросхемы. Только делается это несколько необычным способом.
Итак, смотрим даташит. АЦП конфигурируется регистром ADMUX
Пять младших бит задают ногу, к которой подключается АЦП.
Также можно выбрать в качестве входного напряжения внутренний источник 1,22в (у других МК может быть 1,1в):
Вот на него и подключаемся. В нормальных условиях это означало бы, что мы всегда видим одно и то же напряжение.
Остался последний шаг:
Используем напряжение питания в качестве опорного!
АЦП интерпретирует напряжение на входе как долю от опорного. Если опорное 2,56V и на входе 2,56V, АЦП выдаст полную шкалу (1024). Если же опорное 5V, а на входе те же 2,56V, он выдаст чуть более половины (~524). Т.е. выдаваемая АЦПом цифра зависит опорного напряжения не меньше, чем от входного.
Теперь принцип понятен: по сути опорное и вход меняются местами ?
АЦП выдает четверть шкалы - напряжение в норме. Цифра увеличивается - значит кто-то отключил питание, пора сохранятся в EEPROM, пока в конденсатор не разрядился окончательно.
Кстати, если нужно одновременно использовать АЦП в обычном режиме, ему нужно дать несколько миллисекунд на переключение туда-сюда, иначе он выдает неправильные показания.
Надеюсь, кому-то пригодится.
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.