Главным стимулом создания этого проекта был вопрос - как много я смог бы втиснуть с точки зрения аппаратного и программного обеспечения в наручные часы, устройство которое не больше по размерам, чем его дисплей. OLED -дисплей был выбран из-за того, что его толщина только 1,5 mm, ему не требуется подсветка (каждый пиксель производит свой собственный свет), но главным образом потому, что он выглядит очень круто.

Первоначально для часов планировалось использовать дисплей 0,96", но это оказалось слишком сложно, чтобы воплотить в нем все свои идеи. Решение увеличить размер экрана до 1,3" было правильным.

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

В аппаратной части часы содержат микроконтроллер Atmel ATmega328P, 2,5 V регулятор напряжения Torex, часы реального времени DS3231M(RTC), 1.3" 128x64 монохромный 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 на входе.

Нижняя сторона платы

Верхняя сторона платы под дисплеем

Программное обеспечение

Итак, мы имеем в нашем распоряжении хороший OLED-дисплей и 32 КB флеш памяти микроконтроллера, конечно же, мы можем иметь больше, чем просто время и дату?

Почти все анимировано

Много времени было потрачено на оптимизацию кода визуализации, который включает в себя копирование растровых изображений с флэш в кадровый буфер оперативной памяти и отправки кадра по SPI на OLED. Конечный результат был способен поддерживать 100 FPS почти во всех областях с частотой генератора микроконтроллера 8 МГц. Однако, поскольку кадр анимации длится определенное время, чтобы сократить расход энергии, частота кадров ограничена до 60 FPS.

Некоторые из основных анимированных кадров:

- CRT анимация при входе и выходе из спящего режима (по аналогии с анимацией Android CRT).
- Цифры главных часов имеют эффект Ticker.
- Меню имеет анимированные прокрутки влево/вправо, при входе в текущее меню, при навигации по меню выше или ниже.

Будильники

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

Будильники

Игры

Побег

Автомобиль Dodge

Приложения

Фонарик. Включает все пиксели OLED

и светодиоды, а также имеетрежим

стробоскопа

 

 

Стопкадр

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

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

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

Регулировка громкости

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

Вы же не собираетесь, от этого отказываться?

Энергосбережение

В активном режиме микроконтроллер пытается уйти в режим сна при каждой возможности. В режиме сна контроллер просыпается на миллисекунду чтобы посмотреть нуждается устройство в обновлении, если нет, то он возвращается в режим сна, это обычно занимает менее 100 us, если дисплей не нуждается в обновлении. В этом режиме ток потребления может быть примерно от 0,8 мА до 2 мА, в зависимости от того, как долго высвечивается кадр.

В режиме сна микроконтроллер отключает OLED дисплей и уходит в спящий режим, где его разбудит только нажатие кнопки, сигнал от RTC или при подключении к USB. В этом состоянии микроконтроллер потребляет ничтожные 100 nА.

В спящем режиме общий ток потребления часов 6 uA. В активном режиме ток может варьироваться от 2 мА до более чем 70 мА, средний ток потребления 10 mA.

Общее потребление тока, емкость аккумулятора: 150mAh

Минимальный
(В режиме сна)
Нормальный
(Индикация главных часов)
Высокий
(Фонарик)
6uA
2.85 years
10mA
15 hours
64mA
2 hours, 20 minutes

Если часы находятся в активном режиме в среднем 1 минуту в день (с 5-секундный тайм-аутом сна и проверкой времени 12 раз в день), то они должны работать около 1 года 4 месяцев на одной зарядке. (30 дней, если часы просыпаются на 1 минуту в час).

Потребление тока для отдельных компонентов

Компонент Потребление тока
ATmega328P (сон/активный) 100nA / 1.5mA
OLED (сон/активный) 500nA / 8.5mA
DS3231M RTC 2.5uA
Диод Шоттки (D1) (ток обратной утечки) 1uA
Регулятор (ток покоя) 1uA
Другие (MOSFET и конденсаторы и т.п. утечки) 1uA
Всего (сон/активный) 6.1uA / 10mA

 Дальнейшее совершенствование проекта

- Программирование через USB.
На данный момент используются 4 провода для SPI программирования, при частом подключении к разъему программирования, боюсь что он расшатается.

- Добавить другой метод измерения заряда батареи.
На данный момент уровень заряда батареи определяется ее напряжением, это не очень точный метод получения оставшегося заряда батареи.

- Поддержка различных микроконтроллеров.
Текущая прошивка использует примерно 28 KB из 32 KB свободного места памяти  ATmega328P, при использовании других микроконтроллеров с большим объемом памяти, необходимо будет добавить больше возможностей, например калькулятор. Тем не менее, ATmega328P имеет самое большое количество памяти для AVR в 32 контактных TQFP корпусах, чтобы иметь больше памяти я должен был бы использовать 44 контактный AVR. ATmega1284 выглядит очень интересно.

- Импульсный стабилизатор, регулятор подкачки заряда или может быть гибридное решение?
Линейный регулятор который используется в данный момент не является особо эффективным, импульсный регулятор, кажется, не очень хорош при низком токе. Может есть возможность использования регулятора подкачки заряда или гибридное решение - линейным регулятор для неактивного режима и импульсный стабилизатор для активного режима?

Может кто знает?

Фотогалерея проекта


Архив для статьи "Наручные часы на Atmega328 и OLED дисплее"
Описание: Исходный код(Си), файлы прошивки микроконтроллера, схема и макет печатной платы Eagle 6
Размер файла: 279.08 KB Количество загрузок: 4 452 Скачать