SnakeEyes & OhmGuru
Слушай, доходило у тебя до предела, как сильно можно снизить энергопотребление устройства? Я знаю, ты помешан на оптимизации этих циклов мигания светодиодов – может, обменяемся опытом, как выжать микроватты из состояния покоя IoT-сенсора? Все по одному и тому же принципу: каждая сэкономленная капля энергии – это выполненное задание. Какой самый эффективный твой апдейт прошивки на данный момент?
Да, однажды я полностью вывел из строя систему из-за однопроводного LED-кольца. Я упростил обработчик прерываний таймера до двухбайтного счетчика, использовал керамический конденсатор 0.1мкФ с низким утечком и заменил регулятор с падением напряжения 2.7В на понижающий стабилизатор, который отключает шину питания LED-кольца на 80% цикла. Итог: 6 микроампер в режиме ожидания вместо 150 микроампер, а светодиод всё равно моргает с той же заметной частотой. Суть в том, чтобы обеспечить, чтобы питание потреблял только режим сна МК, а не периферия. Это много кода, но если тебе нужно сэкономить микроватты, то тебе потребуется управление питанием на уровне пинов и нестандартный кристаллический генератор с низким утечком. Нужна помощь с этим?
Отлично поработал. Когда не работаешь – завязывай пины, иначе будет утечка, как с фантомом. Если хочешь ещё улучшить – попробуй использовать резонатор, настроенный на 32 Гц, а I²C переключай на однопроводную шину только когда действительно нужно обновить. Должно выйти в нановаттный диапазон. Хочешь, пробегусь по настройкам мультиплексирования пинов?
Конечно, вот информация по типичному МК в стиле AVR, но помни: каждый пин, который ты оставил без присмотра – это утечка.
1. Настройка пинов: установи все неиспользуемые пины в режим входа с отключенными подтягивающими резисторами (DDRx = 0). Если ты используешь PIC, установи TRIS = 1 для всех неиспользуемых пинов и обязательно очисти порт.
2. Аналоговые пины: если это ATmega, отключи аналого-цифровой преобразователь, записав 0 в ADCSRA.
3. Однопроводная шина: подключи линию данных к земле через подтягивающий резистор в 100 кОм, но включай его только во время активной передачи данных.
4. I²C: полностью отключай I²C периферию, когда она не используется – на SAMD нужно очистить бит TWIEN в регистре управления TWI.
5. Таймеры: используй самый медленный предделитель, который позволит тебе достичь целевой частоты 32 Гц – например, предделитель 64 на ядре частотой 2 МГц даст 31,25 Гц.
6. Спящий режим: когда все периферийные устройства отключены, переведи МК в режим пониженного энергопотребления и отключи сторожевой таймер.
Просто совет: каждый добавляемый 100 кОм добавляет немного утечки, поэтому старайся уменьшить количество резисторов – или, лучше, складируй их в чистом шкафу, чтобы не потерять нужный, когда мир рухнет.
Выглядит надёжно. Продолжай использовать эти трюки с пин-муксами, и ты сэкономишь столько энергии, что батарея будет рада на целую вечность. Держи вытягивающие резисторы в одном месте, чтобы не потерял их, когда сработает таймер. Если что-то пойдёт не так – дай знать.