Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
По КДПВ видно, что автор неравнодушен к винтажной аудиотехнике Sony. Тут и MD Walkman, и недавнее приобретение — малогабаритный музыкальный центр с вертикальным CD-«транспортом». Продавался он без пульта, к самодельному аналогу которого автор предъявил требование: такой же малый ток покоя, как у готовых пультов на специализированных микросхемах.
Поначалу автор хотел написать прошивку с нуля, поскольку ранее он уже реализовывал программно протокол, применяемый в пультах ДУ Sony. Но затем решил воспользоваться существующей библиотекой. Она поддерживает различные протоколы, устройста, а также имеет доп. функции, облегчающие разработку и отладку.
С этой библиотекой достаточно подключить ИК-диод к ножке микроконтроллера и приступить к поиску кодов ДУ Sony. Заставить самодельный пульт заработать удалось очень быстро. Но что толку, если батарейка в нём разрядится за один-два дня, даже если им совсем не пользоваться?
В общем, задача состояла в переводе ATmega328P в спящий режим, чтобы он практически не потреблял ток, пока не будет нажата какая-нибудь клавиша. Библиотеки для управления спящим режимом тоже существуют, но автор решил, что раз он взял готовую библиотеку для передачи команд, то пусть хотя бы эта часть прошивки будет написана самостоятельно. Согласно даташиту, перевод микроконтроллера в спящий режим оказался многоступенчатым процессом.
Поэтому в скетче всё достаточно подробно прокомментировано, чтобы читая одновременно код и даташит, можно было понять, что происходит при выполнении каждой строки. Микроконтроллер «спит» практически всё время, а при изменении состояния одного из входов «просыпается», определяет, какая кнопка нажата, передаёт команду и снова «засыпает».
С кварцем на 16 МГц микроконтроллер, когда он не «спит», будет потреблять больший ток, чем при работе от встроенного тактового генератора на 8 МГц. Чтобы перенастроить соответствующие «фьюзы», пришлось воспользоваться внутрисхемным программатором. Спящий режим выбран такой, при котором отключается всё, кроме прерываний. Автор не сразу понял, что нужно отключить АЦП, отчего долго не мог найти причину, по которнй в спящем режиме микроконтроллер потреблял почти один миллиампер. Сторожевой таймер тоже пришлось отключить, и вот результат: около 2 мкА в спящем режиме и 3,5 мА при передаче команды. Этот калькулятор показал, что в идеальных условиях, если нажимать кнопки 5 раз в час, элемента в таком режиме хватит на 4,82 года. Даже один-два года — уже здорово, а так — тем более.
Плату автор разработал в Eagle. Файлы для повторения: скетч, схема, «герберы», исходник платы.
Видео, где показано в т.ч. измерение тока:
Процесс совершенствования конструкции продолжается, прежде всего необходимо заставить заработать пару кнопок, для которых найденные в сети коды оказались неправильными. Далее автор приводит упрощённый аналог CC-BY из одной фразы: «Если хотите, используйте код и плату в других самоделках, только не забудьте указать, кто всё это для вас разработал». Поскольку исходная библиотека не под GPL, а под LGPL, так делать можно.