Часы на ATtiny13

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

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

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 32

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

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

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

        0
        Вы меня простите Xриста ради, я закончил атмел програмировать когда еще такого слова как ардуино не знали, потому мои вопросы могут быть несколько старомодны, но, насколько я знаю, в микроконтроллерах обычно бывает режим микропотребления (да еще и не один).
        Грубо говоря контроллер может потреблять примерно столько же сколько DS1302.
        То есть я все еще не догоняю зачем нужан отдельная микросхема чтобы кварц качать?
          0
          Сходу не нашел как подключить внешний кварц к ATtiny13A. Как вы предлагаете сделать?
            0
            А я не про 13 я про 85, у меня с первой строки вопрос возник.
            Надо конечно было конкретизировать.

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

              0
              Да как то не задумывался даже о такой возможности.
                +1
                Ну, все-таки 13 — это легенда. Этот контроллер целые культовые клубы поклонников собирает.
        0

        Отличный diy!

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

          Схема как у автора — без резисторов и конденсаторов (может кто доведет до ума):
          ufile.io/bzfmk7op
            0
            Хм, а зачем вам потребовалась данная схема?
            Такая разводка привычна специалистам, а пост для любителей.

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

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

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

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

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

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

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

                +1
                Нет смысла, у этой микросхемы кварц и все что нужно уже внутри. А двух секунд в месяц мне лично с головой хватает…
                  0
                  чтобы лет через 5 не надо было подстраивать)
                  Только тогда и DS3231 не нужна))
                    0
                    Да не вопрос, только синхронизировать их не от чего. Разве что через Интернет, но это точно перебор. Я думал сделать часы, синхронизирующиеся по радио, но радиомаячки, по которым это можно сделать, например, DCF77, с территории Украины недоступны, а Маяк уже не вещает. А так очень удобно — подстроил себе раз в месяц, и все. А чаще всего обнаруживается, что и подстраивать не надо. Я с этими часами перестал на работу опаздывать :)
                      0
                      Ну я сделал через wifi
                      habr.com/ru/post/404075

                      2 года, полёт отличный
                        +1
                        Можно и так. Но я с самого начала не захотел связываться с компами и Интернетом…
                          0
                          можно GPS?
                            0
                            Ни разу его в своих проектах не использовал, так что без комментариев…
                              0
                              Ещё теоретически (сам не пробовал) можно получать время по FM станции с RDS
                        0
                        Как Майнфлинген может быть недоступен с Украины?
                        Передо мною (Подмосковье) лежат часы время время синхронизации вчера в 01:06, в Москве шумов больше, нужен колебательный контур на 77,5 кГц лежащий рядом с часами
                  0
                  Данные часы делались из принципа дешево и сердито. DS3231 для такого через чур имхо. Да, на DS13xx убегают часы. На 4 минуты за 4 месяца, не критично. Можно даже в коде поправить при желании.

                  А можно и на STM сделать, там вроде как встроенный кварц уже есть.
                    +1
                    Минута в месяц — для меня очень много, к сожалению. Делал я и такие часы — достало меня постоянно их подстраивать…
                      0
                      Я использовал DS1302. Убегали вперед на 5 сек за сутки. Поставил конденсаторы к выводам куда кварц паяется: один постоянный где-то ~5пФ(точно не помню) и один подстроечный, оба вторыми выводами к земле. Получилось увеличить точность. Но чтобы добиться этого надо время. Сверяться через определенные интервалы времени и подкручивать подстроечник. Помню за месяц так и не смог расхождение в секунду зафиксировать
                    +2
                    Помню еще в СССР делали часы на одной микросхеме К145ИК1901 с люминисцентным индикатором (три напряжения между прочим), двумя будильниками, кварцем, довольно точным. Даже наборы такие продавали. Долго работали. А тут целый МК и даже будильника нет. И время установки кнопками я не увидел. Зато целый МК применен.
                      0
                      У них был колоссальный недостаток — время сбрасывалось при пропадании электричества. Из-за этого ими практически невозможно было пользоваться. Да, были модели с подпиткой от Кроны. Но они встречались реже. А точность хода и там, и там была весьма посредственная…
                        0
                        Так единственная кнопка и есть для установки времени — плюс одна минута, а если подержать, то ускоряется и нужное количество часов пропустить не проблема. Будильника нет, просто мне удобнее его использовать на телефоне. Да и откуда взять еще ног не очень понятно.
                          0

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

                            0
                            Достал из чулана, смахнул пыль — заработали!



                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое