Наручные часы на Atmega328 и OLED дисплее

Автор этих часов Zak Kemble

Аппаратная реализация

В аппаратной части часы содержат микроконтроллер Atmel ATmega328P, 2,5 V регулятор напряжения Torex, часы реального времени DS3231M(RTC), 1.3″ 128×64 монохромный OLED дисплей, 2 светодиода (красный и зеленый), зуммер, 3-х позиционный переключатель для навигации, питание от 150 mAh LiPo аккумулятора, который можно заряжать через USB и 2-х печатных плат(хотя одна используется только для монтажа OLED дисплея).

Принципиальная схема часов

ATmega328P использует свой внутренний генератор 8 МГц и работает от 2,5 V линейного регулятора. Ее ток потребления составляет около 1,5 mА при активной и 100 nА в режиме сна.

DS3231M является отличным прибором, который выпускается в небольшом 8-ми контактном корпусе и включает в себя встроенную температурную компенсацию MEMS резонаторов с точностью ± 5 ppm (± 2 минуты 40 секунд в год). В обвязке только фильтрующий конденсатор и несколько дополнительных подтягивающих резисторов. Питание RTC подключено не к выводу VCC, а к выводу Vbat, для того чтобы уменьшить ток потребления с 100 uА до 2,5uA. К сожалению, этот чип очень трудно заполучить по разумной цене, если вы не в США. Я получил необходимое количество DS3231M в качестве образцов.

Для зарядки аккумулятора используется Microchip MCP73832 вместе с некоторыми дополнительными компонентами для распределения нагрузки, где батарея может заряжатся без вмешательства в остальную часть часов.

Вы могли заметить, что на схеме светодиоды напрямую связаны с микроконтроллером без резисторов. Внутренние MOSFET микроконтроллера имеют сопротивление около 40 Omh, напряжение с 2,5 V падает до 2 V, что достаточно для питания светодиодов. Мне хотелось использовать синий светодиод, но у него большое падение напряжения, что потребовало бы увеличить напряжение питания до 3 V и ставить некоторые дополнительные резисторы и MOSFET.

Поскольку микроконтроллер работает от 2,5 V чтобы измерить напряжение батареи нужно понизить этот сигнал перед тем как подключить его к АЦП. Для этого используется делитель напряжения. Однако, делитель напряжения подключен параллельно батарее и через него будет постоянно протекать ток 350 uA, а это огромная трата энергии. В этой версии проекта добавлен P-MOSFET, чтобы делитель был включен только при необходимости.

2,5 V регулятор используется марки Torex XC6206, в первую очередь я выбрал его из-за своего крошечного ток покоя, всего 1 uA. Почему выбран линейный регулятор, а не импульсный? КПД у импульсного стабилизатора не менее 80% при нагрузке 2 mА, но с нагрузками 100 uА его эффективность падает до менее чем 50%. Так как потребление устройства в спящем режиме составляет 2-3 uA, импульсный стабилизатор показал себя невероятно плохо по сравнению с линейным регулятором. Эффективность 2,5 V линейного регулятора составляет до 60% с 4,2 V на входе и до 83% с 3 V на входе.

Будильники

— Активация до 10 будильников.
— Количество будильников ограничено только количеством доступных EEPROM и RAM.
— У каждого будильника настраиваются часы, минуты и в какие дни недели он должен быть активным.

Некоторые возможности:

— 3 канала регулировки громкости для:

Основного режима;
Будильника;
Почасового сигнала.

— Режим ожидания
— Регулировка яркости дисплея
— Анимация

Исходный код(Си), файлы прошивки микроконтроллера, схема и макет печатной платы Eagle 6