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

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

Схема подключения (от staticmain)
По хорошему еще нужны резисторы на 4.7-10Ком от ног PB1 и PB2 микроконтроллера (верхние центральные) на плюс питания и конденсатор на 0.1мкФ между плюсом и минусом, но работает и без них.
Количество ног на ATtiny13 не единственная проблема. Доступной памяти также мало — всего 1Кб, в результате чего готовые библиотеки не подходят. Выход — использование пакета MicroCore и компактной библиотеки для TM1637. Для DS1302 ничего не нашлось, потому пришлось слепить самому на основе вот этого р��позитария. Получившийся код часов доступен на GitHub.
Микросхема TM1637, управляющая семи-сегментным индикатором, имеет выводы на две кнопки, данные о состоянии которых может отдавать через интерфейс. Однако на модуле дисплея они не разведены, да и используемая библиотека их не поддерживает.
Можно было бы развести плату для большего индикатора, разместив микросхемы и микроконтроллер на одной печатной плате, но мне показалось, что в таком случае проще купить уже готовое. Хотя, по мне, из этого мог бы получиться неплохой радио-конструктор.
Disclaimer
У автора нет инженерного образования и работа не связана с микроконтроллерами, потому наверняка всё так себе. К тому же оптимизации по энергопотреблению нет — у нас, ардуинщиков, она не принята!
Аппаратная часть
В первую очередь я изучил имеющиеся решения, и готовых примеров подключения двухпроводного DS1307 к ATtiny13 не нашел. Потому RTC был заменен на трехпроводной DS1302. Еще две ноги заняло подключение дисплея. На оставшейся пол-ноги Сброса разместилась кнопка установки времени при помощи StackOverflow и пары резисторов.

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

Схема подключения (от staticmain)
По хорошему еще нужны резисторы на 4.7-10Ком от ног PB1 и PB2 микроконтроллера (верхние центральные) на плюс питания и конденсатор на 0.1мкФ между плюсом и минусом, но работает и без них.
Программная часть
Количество ног на ATtiny13 не единственная проблема. Доступной памяти также мало — всего 1Кб, в результате чего готовые библиотеки не подходят. Выход — использование пакета MicroCore и компактной библиотеки для TM1637. Для DS1302 ничего не нашлось, потому пришлось слепить самому на основе вот этого р��позитария. Получившийся код часов доступен на GitHub.
Пошаговая инструкция для тех, кто захочет повторить
- Список деталейЕсли брать на али-экспресс, то на всё уйдет порядка 100руб.
- Микроконтроллер ATtiny13
- Дисплей на TM1637
- Часы реального времени DS1302
- Кварц на 32768Гц
- Кнопка
- Пара резисторов на 1Ком и 10Ком
- Держатель 3-х вольтовой батареи
- Макетка и перемычки или печатная плата
- В качестве программатора — Arduino с залитым на нее скетчем ArduinoISP, поставляемом в примерах. Если вы, как и я, используете Arduino Nano и контакты 10-13 для подключения, то надо расскомментировать 81-ю строку
#define USE_OLD_STYLE_WIRING
После загрузки скетча между ножками земли и сброса Arduino надо поставить конденсатор на 10мФ, хотя у некоторых шьется и без него.

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

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

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