суббота, 30 августа 2014 г.

STM32L: Наручные часы c экранчиком 0.96″ 128×64 OLED SSD1306 (1часть )

В детстве мне было интересно как работают электронные часы, калькулятор и другая электроника и было сильное желание разобраться в этом. Поэтому когда мне родители подарили электронную игру "Волк ловит яйца" я боролся с сильным желанием разобрать ее и посмотреть как она устроена внутри, боролся целую неделю  и в итоге разобрал ее ж). Но содержимое тогда оставалось загадкой для меня в виде "черной кляксы" на текстолите.  В общем  мальчик вырос, а любопытство осталось которое отчасти пригодилась в жизни ;). В какой-то определенный момент мне захотелось осуществить детскую мечту и сделать цифровые наручные часы, это у меня уже третий вариант, второй вариант я даже проносил на руке около полугода пока мне не сказали, что они "пугают людей" ))). Двустороннюю печатную плату разводил сразу в программе DipTrace. Часы могут только показывать время, никаких примочек агента 007 я туда не делал (типа грабера ключей 1-Wire, где-то видел такое).


Часы на сими сегментном индикаторе АЛ304 и микроконтроллере stm32f100.
В общем я отложил на полку этот вариант и занялся следующей версией часов.
Пожалуй начну с фото третьего варианта часов франкенштейна)).






























 Когда заказывал экранчик на aliexpress и я не ожидал, что он будет настолько крут! При прямом солнечном свете и не полной яркости экрана все отлично видно и не нужно прикрываться от солнца чтобы посмотреть время! Библиотеку для SSD1306 на 90%  писал сам хотя и получился не очень аккуратный код. Исходники которые брались за основу я не помню где брал (это на случай если автор первоначального кода будет читать этот пост, пусть даст ссылку на себя я с удовольствием вставлю сюда ж) ).

Схема часов достаточно простая, есть контроллер STM32L151, контроллер заряда литиевых аккумуляторов MCP73831  и экранчик 0.96″ 128×64 OLED SSD1306:




 
Печатная плата изготовлена немного улучшенным лазерно-утюжным методом: нанесение тонера на пищевую фольгу, с последующим креплением ее к стеклотекстолиту и прогреву утюгом. Далее травил в хлорном железе не отдирая фольги от платы. Подробней можно прочитать например здесь.
 
Особенность контроллеров серии STM32L это очень низкое потребление, сравнимое с током саморазряда литиевых аккумуляторов, подробней можно посмотреть здесь.


Режим
I пот.
CPU
Flash
RAM
DMA/Periph
Тактирование
RTC
LCD
Sleep
100uA/МГц
(Range 1)
Остановлен
Вкл
Вкл
Вкл
Любой источник
Доступны
82uA/МГц
(Range 2)
65uA/МГц
(Range 3)
Low Power RUN
10.4uA
(Flash Выкл, 32 КГц)
Работает
Выклили Вкл.
Вкл
Вкл
MSI
Доступны
Low Power Sleep
5.1uA
(периферия выкл.)
Остановлен
Выкл.
Вкл
Вкл
MSI
Доступны
6.1uA
(1 таймер вкл.)
Stop c RTC
1.3uA
(1.8 В)
Остановлен
Выкл.
Вкл
Остановлен
LSE, LSI
Доступны
1.6uA
(3 В)
Stop
500нА
Остановлен
Выкл.
Вкл
Остановлен
LSE, LSI
Выкл.
Выкл.
Standby c RTC
1.3uA
(3 В)
Выкл
Выкл.
Выкл.
Выкл.
LSE, LSI
Выкл.
Вкл.
1uA
(1.8 В)
Standby
270нА
Выкл.
Выкл.
Выкл.
Выкл.
LSE, LSI
Выкл.
Выкл.

SSD1306 это однокристальный КМОП OLED/PLED драйвер с контроллером для органических/полимерных светодиодных графических дисплеев. У SSD1306 есть  встроенное управление контрастностью, 256-шагов регулировки яркости, оперативной памятью и внутренний генератор.  По этому экранчику требуется минимальное количество внешних компонентов. SSD1306 драйвер может работать со следующими интерфейсами: 6800/8000 серии совместимым параллельным интерфейсом, последовательный периферийный интерфейс интерфейс I2C или SPI.


ОСОБЕННОСТИ
  • Разрешение: 128 х 64.
  • Питание
  • VDD = 1,65 В до 3,3 В, напряжение питание логики<VBAT
  • VBAT = 3,3 до 4,2 В напряжение питания внутренего повышающего преобразователя
  • VCC = 7В до 15В внешнее напряжение питание OLED панели
  • Потребление
    • Ток сегмента максимальный: 100 мкА
    • Общий потребляемый, максимальный ток: 15 мА
  • 256 шагов регулировки яркости
  • Встроенный 128 х 64 бит SRAM буфер дисплея
  • Интерфейсы MCU:
    • 8-битный параллельный интерфейс 6800/8080-series
    • 3/4 проводной SPI
    • интерфейс I2C
  • Функцией прокрутки в горизонтальном и вертикальном направлении
  • Программируемая частота кадров
  • Возможность изменять систему координат
  • Внутренний генератор
  • Широкий диапазон рабочих температур: от -40 ° C до 85 ° C

В качестве программатора я использую отладочную плату stm32vldiscovery в которой есть такая замечательная вещь как Serial Wire Debug (SWD) через который можно прошить и отладить свой девайс.




Распиновка  разъема SWD:
1 - +3,3V 
2 - SWCLK - тактовый сигнал
3 - GND 
4 - SWD - данные

В следующем посте я остановлюсь на некоторых куска кода на которых у меня возникали трудности при изготовлении данных "smartwatch" в частности режим пониженного энергосбережения STANDBY и выход из него по внешнему прерыванию и от будильника, а также реализацию графического меню и анимацию отображения времени по типу перекидных механических часов.




5 комментариев:

Анонимный комментирует...

как долго работают от одной батарейки?

Tymbys комментирует...

От одной зарядки уже работает 4й месяц. По идее часы должны в спящем режиме (отключено все кроме RTC и будильника) работать около года, а с включенным экраном и периферией где то около недели, не проверял.

Анонимный комментирует...

Можно прошивкуи печатку скинуть

Анонимный комментирует...

Прошивку бы

Sokol Olga комментирует...

Работа, как хобби; хобби, как работа