Я люблю светящиеся часы и, когда мне понадобились очередные, то быстро собрал их на макетке из 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, управляющая семи-сегментным индикатором, имеет выводы на две кнопки, данные о состоянии которых может отдавать через интерфейс. Однако на модуле дисплея они не разведены, да и используемая библиотека их не поддерживает.

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

Комментарии (31)


  1. red_perez
    17.05.2019 15:40

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

    Фиг с ним с потреблением, а зачем отдельно генератор на DS1302?
    Вроде логично же подцепить кварц напрямую?


    1. MrCrooK
      17.05.2019 17:00

      c DS1302 все просто и легко в управлении. Так же когда отсутствует питание, часики в ней тикают дальше от батареечки десятилетиями, на Arduino такое не реализовать, да еще чтобы время не уплывало на пару часов в неделю)


      1. red_perez
        17.05.2019 17:22

        Вы меня простите Xриста ради, я закончил атмел програмировать когда еще такого слова как ардуино не знали, потому мои вопросы могут быть несколько старомодны, но, насколько я знаю, в микроконтроллерах обычно бывает режим микропотребления (да еще и не один).
        Грубо говоря контроллер может потреблять примерно столько же сколько DS1302.
        То есть я все еще не догоняю зачем нужан отдельная микросхема чтобы кварц качать?


        1. codecity
          17.05.2019 19:03

          Сходу не нашел как подключить внешний кварц к ATtiny13A. Как вы предлагаете сделать?


          1. red_perez
            17.05.2019 19:18

            А я не про 13 я про 85, у меня с первой строки вопрос возник.
            Надо конечно было конкретизировать.

            Я люблю светящиеся часы и, когда мне понадобились очередные, то быстро собрал их на макетке из ATtiny85


            1. little-brother Автор
              17.05.2019 20:43

              Да как то не задумывался даже о такой возможности.


            1. codecity
              17.05.2019 21:43

              Ну, все-таки 13 — это легенда. Этот контроллер целые культовые клубы поклонников собирает.


  1. Ksiw
    17.05.2019 16:01

    Отличный diy!


  1. staticmain
    17.05.2019 16:28

    image
    Действительно так трудно потратить 20 минут чтобы начертить схему? Почему я с лупой должен по вашим недо-фото лазить чтобы понять что куда клеится?

    Схема как у автора — без резисторов и конденсаторов (может кто доведет до ума):
    ufile.io/bzfmk7op


    1. little-brother Автор
      17.05.2019 20:42

      Хм, а зачем вам потребовалась данная схема?
      Такая разводка привычна специалистам, а пост для любителей.

      Если не возражаете, я помещу схему в тело поста.


      1. staticmain
        17.05.2019 23:49

        пост для любителей.
        А любителям вообще не надо никак развиваться? А если у меня завалялся DS не в soic, а в dip корпусе — как я по вашей схеме должен понять какой контакт что куда где?
        И что касается резисторов и конденсаторов, без которых "и так работает" — зачем вы подаете другим плохой пример? Статья должна показывать другим как НАДО делаеть, а не как собрать "лишь бы работало"


        1. little-brother Автор
          18.05.2019 18:03

          не в soic, а в dip корпусе

          Ммм, наверно имелось в виду наоборот. На прилагаемых картинках как раз dip. Мне сложно представить, чтобы любитель выбрал soic.

          Статья должна показывать другим как НАДО делаеть

          С моей точки — не всегда. Очень часто в учебных примерах при изучении программирования опускают отлов ошибок, но в идеале об необходимо упоминать. В данном случае, я поступил по аналогии — кто хочет, тот может добавить.


          1. masai
            18.05.2019 21:04

            Мне сложно представить, чтобы любитель выбрал soic.

            А что такого страшного в SOIC? Если любитель освоил ЛУТ (а это происходит довольно быстро, так как на макетке много не напроектируешь), то с SMD наоборот, всё проще и приятнее.


  1. kovigor
    17.05.2019 17:00
    +2

    DS1307 — прошлый век. Очень хорошие и точные часы получаются на DS3231. Пара секунд в месяц вообще без всяких подстроек и калибровок. Именно такие я себе и сделал (DS3231 + ATMEGA8). Отличнейшая штука. А часы на DS1307 имеют просто отвратительную точность, к сожалению…


    1. dernuss
      17.05.2019 20:24

      А ещё лучше с синхронизацией, тогда и 2х секунд в месяц не будет


      1. kovigor
        17.05.2019 20:44

        Нет смысла, у этой микросхемы кварц и все что нужно уже внутри. А двух секунд в месяц мне лично с головой хватает…


        1. dernuss
          17.05.2019 20:48

          чтобы лет через 5 не надо было подстраивать)
          Только тогда и DS3231 не нужна))


          1. kovigor
            17.05.2019 21:22

            Да не вопрос, только синхронизировать их не от чего. Разве что через Интернет, но это точно перебор. Я думал сделать часы, синхронизирующиеся по радио, но радиомаячки, по которым это можно сделать, например, DCF77, с территории Украины недоступны, а Маяк уже не вещает. А так очень удобно — подстроил себе раз в месяц, и все. А чаще всего обнаруживается, что и подстраивать не надо. Я с этими часами перестал на работу опаздывать :)


            1. dernuss
              17.05.2019 21:44

              Ну я сделал через wifi
              habr.com/ru/post/404075

              2 года, полёт отличный


              1. kovigor
                17.05.2019 22:25

                Можно и так. Но я с самого начала не захотел связываться с компами и Интернетом…


                1. dernuss
                  17.05.2019 23:47

                  можно GPS?


                  1. kovigor
                    18.05.2019 00:01

                    Ни разу его в своих проектах не использовал, так что без комментариев…


                    1. dernuss
                      19.05.2019 12:37

                      Ещё теоретически (сам не пробовал) можно получать время по FM станции с RDS


            1. natan555
              17.05.2019 23:22

              Как Майнфлинген может быть недоступен с Украины?
              Передо мною (Подмосковье) лежат часы время время синхронизации вчера в 01:06, в Москве шумов больше, нужен колебательный контур на 77,5 кГц лежащий рядом с часами


    1. little-brother Автор
      17.05.2019 20:46

      Данные часы делались из принципа дешево и сердито. DS3231 для такого через чур имхо. Да, на DS13xx убегают часы. На 4 минуты за 4 месяца, не критично. Можно даже в коде поправить при желании.

      А можно и на STM сделать, там вроде как встроенный кварц уже есть.


      1. kovigor
        17.05.2019 21:23

        Минута в месяц — для меня очень много, к сожалению. Делал я и такие часы — достало меня постоянно их подстраивать…


      1. moviq
        19.05.2019 14:40

        Я использовал DS1302. Убегали вперед на 5 сек за сутки. Поставил конденсаторы к выводам куда кварц паяется: один постоянный где-то ~5пФ(точно не помню) и один подстроечный, оба вторыми выводами к земле. Получилось увеличить точность. Но чтобы добиться этого надо время. Сверяться через определенные интервалы времени и подкручивать подстроечник. Помню за месяц так и не смог расхождение в секунду зафиксировать


  1. sav13
    17.05.2019 21:43
    +1

    Помню еще в СССР делали часы на одной микросхеме К145ИК1901 с люминисцентным индикатором (три напряжения между прочим), двумя будильниками, кварцем, довольно точным. Даже наборы такие продавали. Долго работали. А тут целый МК и даже будильника нет. И время установки кнопками я не увидел. Зато целый МК применен.


    1. kovigor
      17.05.2019 22:27

      У них был колоссальный недостаток — время сбрасывалось при пропадании электричества. Из-за этого ими практически невозможно было пользоваться. Да, были модели с подпиткой от Кроны. Но они встречались реже. А точность хода и там, и там была весьма посредственная…


    1. little-brother Автор
      17.05.2019 23:00

      Так единственная кнопка и есть для установки времени — плюс одна минута, а если подержать, то ускоряется и нужное количество часов пропустить не проблема. Будильника нет, просто мне удобнее его использовать на телефоне. Да и откуда взять еще ног не очень понятно.


    1. VolodjaT
      18.05.2019 00:39

      К145ИК1901 и есть микроконтроллер. Только без возможности прошивки