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, управляющая семи-сегментным индикатором, имеет выводы на две кнопки, данные о состоянии которых может отдавать через интерфейс. Однако на модуле дисплея они не разведены, да и используемая библиотека их не поддерживает.
Можно было бы развести плату для большего индикатора, разместив микросхемы и микроконтроллер на одной печатной плате, но мне показалось, что в таком случае проще купить уже готовое. Хотя, по мне, из этого мог бы получиться неплохой радио-конструктор.
Комментарии (31)
staticmain
17.05.2019 16:28
Действительно так трудно потратить 20 минут чтобы начертить схему? Почему я с лупой должен по вашим недо-фото лазить чтобы понять что куда клеится?
Схема как у автора — без резисторов и конденсаторов (может кто доведет до ума):
ufile.io/bzfmk7oplittle-brother Автор
17.05.2019 20:42Хм, а зачем вам потребовалась данная схема?
Такая разводка привычна специалистам, а пост для любителей.
Если не возражаете, я помещу схему в тело поста.staticmain
17.05.2019 23:49пост для любителей.
А любителям вообще не надо никак развиваться? А если у меня завалялся DS не в soic, а в dip корпусе — как я по вашей схеме должен понять какой контакт что куда где?
И что касается резисторов и конденсаторов, без которых "и так работает" — зачем вы подаете другим плохой пример? Статья должна показывать другим как НАДО делаеть, а не как собрать "лишь бы работало"little-brother Автор
18.05.2019 18:03не в soic, а в dip корпусе
Ммм, наверно имелось в виду наоборот. На прилагаемых картинках как раз dip. Мне сложно представить, чтобы любитель выбрал soic.
Статья должна показывать другим как НАДО делаеть
С моей точки — не всегда. Очень часто в учебных примерах при изучении программирования опускают отлов ошибок, но в идеале об необходимо упоминать. В данном случае, я поступил по аналогии — кто хочет, тот может добавить.masai
18.05.2019 21:04Мне сложно представить, чтобы любитель выбрал soic.
А что такого страшного в SOIC? Если любитель освоил ЛУТ (а это происходит довольно быстро, так как на макетке много не напроектируешь), то с SMD наоборот, всё проще и приятнее.
kovigor
17.05.2019 17:00+2DS1307 — прошлый век. Очень хорошие и точные часы получаются на DS3231. Пара секунд в месяц вообще без всяких подстроек и калибровок. Именно такие я себе и сделал (DS3231 + ATMEGA8). Отличнейшая штука. А часы на DS1307 имеют просто отвратительную точность, к сожалению…
dernuss
17.05.2019 20:24А ещё лучше с синхронизацией, тогда и 2х секунд в месяц не будет
kovigor
17.05.2019 20:44Нет смысла, у этой микросхемы кварц и все что нужно уже внутри. А двух секунд в месяц мне лично с головой хватает…
dernuss
17.05.2019 20:48чтобы лет через 5 не надо было подстраивать)
Только тогда и DS3231 не нужна))kovigor
17.05.2019 21:22Да не вопрос, только синхронизировать их не от чего. Разве что через Интернет, но это точно перебор. Я думал сделать часы, синхронизирующиеся по радио, но радиомаячки, по которым это можно сделать, например, DCF77, с территории Украины недоступны, а Маяк уже не вещает. А так очень удобно — подстроил себе раз в месяц, и все. А чаще всего обнаруживается, что и подстраивать не надо. Я с этими часами перестал на работу опаздывать :)
dernuss
17.05.2019 21:44Ну я сделал через wifi
habr.com/ru/post/404075
2 года, полёт отличныйkovigor
17.05.2019 22:25Можно и так. Но я с самого начала не захотел связываться с компами и Интернетом…
natan555
17.05.2019 23:22Как Майнфлинген может быть недоступен с Украины?
Передо мною (Подмосковье) лежат часы время время синхронизации вчера в 01:06, в Москве шумов больше, нужен колебательный контур на 77,5 кГц лежащий рядом с часами
little-brother Автор
17.05.2019 20:46Данные часы делались из принципа дешево и сердито. DS3231 для такого через чур имхо. Да, на DS13xx убегают часы. На 4 минуты за 4 месяца, не критично. Можно даже в коде поправить при желании.
А можно и на STM сделать, там вроде как встроенный кварц уже есть.kovigor
17.05.2019 21:23Минута в месяц — для меня очень много, к сожалению. Делал я и такие часы — достало меня постоянно их подстраивать…
moviq
19.05.2019 14:40Я использовал DS1302. Убегали вперед на 5 сек за сутки. Поставил конденсаторы к выводам куда кварц паяется: один постоянный где-то ~5пФ(точно не помню) и один подстроечный, оба вторыми выводами к земле. Получилось увеличить точность. Но чтобы добиться этого надо время. Сверяться через определенные интервалы времени и подкручивать подстроечник. Помню за месяц так и не смог расхождение в секунду зафиксировать
sav13
17.05.2019 21:43+1Помню еще в СССР делали часы на одной микросхеме К145ИК1901 с люминисцентным индикатором (три напряжения между прочим), двумя будильниками, кварцем, довольно точным. Даже наборы такие продавали. Долго работали. А тут целый МК и даже будильника нет. И время установки кнопками я не увидел. Зато целый МК применен.
kovigor
17.05.2019 22:27У них был колоссальный недостаток — время сбрасывалось при пропадании электричества. Из-за этого ими практически невозможно было пользоваться. Да, были модели с подпиткой от Кроны. Но они встречались реже. А точность хода и там, и там была весьма посредственная…
little-brother Автор
17.05.2019 23:00Так единственная кнопка и есть для установки времени — плюс одна минута, а если подержать, то ускоряется и нужное количество часов пропустить не проблема. Будильника нет, просто мне удобнее его использовать на телефоне. Да и откуда взять еще ног не очень понятно.
red_perez
Фиг с ним с потреблением, а зачем отдельно генератор на DS1302?
Вроде логично же подцепить кварц напрямую?
MrCrooK
c DS1302 все просто и легко в управлении. Так же когда отсутствует питание, часики в ней тикают дальше от батареечки десятилетиями, на Arduino такое не реализовать, да еще чтобы время не уплывало на пару часов в неделю)
red_perez
Вы меня простите Xриста ради, я закончил атмел програмировать когда еще такого слова как ардуино не знали, потому мои вопросы могут быть несколько старомодны, но, насколько я знаю, в микроконтроллерах обычно бывает режим микропотребления (да еще и не один).
Грубо говоря контроллер может потреблять примерно столько же сколько DS1302.
То есть я все еще не догоняю зачем нужан отдельная микросхема чтобы кварц качать?
codecity
Сходу не нашел как подключить внешний кварц к ATtiny13A. Как вы предлагаете сделать?
red_perez
А я не про 13 я про 85, у меня с первой строки вопрос возник.
Надо конечно было конкретизировать.
little-brother Автор
Да как то не задумывался даже о такой возможности.
codecity
Ну, все-таки 13 — это легенда. Этот контроллер целые культовые клубы поклонников собирает.