Часы на ATtiny13 +6


Я люблю светящиеся часы и, когда мне понадобились очередные, то быстро собрал их на макетке из ATtiny85, семи-сегментного индикатора TM1637 и часов реального времени DS1307. Однако при сборке меня не покидало ощущение, что можно обойтись более простым контроллером. И это оказалось действительно так.

Disclaimer

У автора нет инженерного образования и работа не связана с микроконтроллерами, потому наверняка всё так себе. К тому же оптимизации по энергопотреблению нет — у нас, ардуинщиков, она не принята!

Аппаратная часть


В первую очередь я изучил имеющиеся решения, и готовых примеров подключения двухпроводного DS1307 к ATtiny13 не нашел. Потому RTC был заменен на трехпроводной DS1302. Еще две ноги заняло подключение дисплея. На оставшейся пол-ноги Сброса разместилась кнопка установки времени при помощи StackOverflow и пары резисторов.


Итоговое подключение элементов


Схема подключения (от staticmain)

По хорошему еще нужны резисторы на 4.7-10Ком от ног PB1 и PB2 микроконтроллера (верхние центральные) на плюс питания и конденсатор на 0.1мкФ между плюсом и минусом, но работает и без них.

Программная часть


Количество ног на ATtiny13 не единственная проблема. Доступной памяти также мало — всего 1Кб, в результате чего готовые библиотеки не подходят. Выход — использование пакета MicroCore и компактной библиотеки для TM1637. Для DS1302 ничего не нашлось, потому пришлось слепить самому на основе вот этого репозитария. Получившийся код часов доступен на GitHub.

Пошаговая инструкция для тех, кто захочет повторить


  1. Список деталей
    • Микроконтроллер ATtiny13
    • Дисплей на TM1637
    • Часы реального времени DS1302
    • Кварц на 32768Гц
    • Кнопка
    • Пара резисторов на 1Ком и 10Ком
    • Держатель 3-х вольтовой батареи
    • Макетка и перемычки или печатная плата

    Если брать на али-экспресс, то на всё уйдет порядка 100руб.
  2. В качестве программатора — Arduino с залитым на нее скетчем ArduinoISP, поставляемом в примерах. Если вы, как и я, используете Arduino Nano и контакты 10-13 для подключения, то надо расскомментировать 81-ю строку

    #define USE_OLD_STYLE_WIRING

    После загрузки скетча между ножками земли и сброса Arduino надо поставить конденсатор на 10мФ, хотя у некоторых шьется и без него.


    Процесс прошивки ATtiny13 посредством слегка пыльной Arduino
  3. Чтобы Arduino IDE могла работать с ATtiny13 в папку %Program Files (x86)%/Arduino/hardware добавляется содержимое MicroCore. После чего в IDE в разделе Инструменты выбирается плата ATtiny13 с настройками: BOD disabled, LBO enabled, Clock 9.6 internal osc.

     


  4. Исходники с Git уже содержат необходимые библиотеки для работы с ds1302 и TM1637, которые настроены для работы на пинах (см. заголовочные файлы библиотек), соответственно картинке подключения, поэтому достаточно скачать репозитарий и залить clock.ino на ATtiny13. Прошивка займет почти всё доступное место.


    Собранное устройство на макетной плате. Зелеными точками отмечено место установки ATtiny для прошивки (очень плохо видно оранжевый провод плюса питания).
  5. Из-за особенности подключения кнопки, неточных номиналов резисторов и питающего напряжения, возможно, потребуется изменить порог срабатывания у analogRead в clock.ino (26-я строка).
  6. В планах было изготовление платы методом ЛУТ, но принтер в процессе сломался, потому проверка получившейся платы отложена на неопределенный срок до его починки.

Вместо заключения


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

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




К сожалению, не доступен сервер mySQL