Часы-термометр

Несложные часы-термометр на микроконтроллере ATtiny2313, с семисегментным индикатором. В конструкции использована микросхема часов реального времени DS1307 с резервным питанием от батареи CR2032 (3В), датчик температуры DS18B20.

На индикаторе периодически отображаются значения времени и температуры. Период отображения каждого значения равен 4 секундам. Время отображается в 24 часовом формате — ЧЧ.ММ, при этом старший не значащий ноль часов не отображается. Точка мигает в соответствии с ходом секунд.

Температура отображается с точностью до десятых градуса. Погрешность измерения температуры определяется погрешностью датчика температуры и составляет не больше ±0,5 градусов в диапазоне от -10 до 85 градусов Цельсия. В остальном диапазоне погрешность не хуже ±2 градусов.

Измерение температуры производится один раз в минуту. Считанное с датчика значение температуры сохраняется в памяти контроллера организованной для хранения 5 последних измерений. Для отображения на индикаторе последнее записанное в память значение температуры округляется до целых градусов Цельсия. При отображении температуры в крайнем правом разряде индикатора высвечивается символ градуса. Если за последние 5 минут температура внешнего датчика изменяется больше чем на 0,2 градуса, то символ градуса периодически сменяется символом повышения (стрелка вверх) или понижения (стрелка вниз) температуры.

Если в рабочем режиме нажать на кнопку «Меньше», то на индикаторе немедленно отображается время. Если нажать на кнопку «Больше», то температура. При этом одновременно с отображением температуры последнего измерения запускается новый процесс измерения температуры. Примерно через секунду считанное с датчика значение температуры отображается на индикаторе. Причем температура отображается с десятыми долями. В таком формате температура отображается до следующего измерения — примерно 1 минуту. Если датчик температуры отсутствует или читается с ошибкой, то на индикаторе постоянно отображается текущее значение времени.

Схема часов с индикатором с общим анодом

 watch_ca_led

Схема часов с индикатором с общим катодом

watch_cc_led

В часах можно использовать как индикаторы с общим анодом, так и с общим катодом. Индикаторы работают в динамическом режиме, реализованном программно. Каждый разряд индикатора включается 100 раз в секунду и 3/4 общего времени работы индикатора находится в выключенном состоянии. В случае использования индикаторов с общим катодом в качестве верхних ключей для управления индикаторами используются транзисторы 2N3906, в качестве нижних 2N7000. Для индикаторов с общим анодом в качестве верхних ключей для управления индикаторами используются транзисторы 2N3906, в качестве нижних — транзисторная сборка ULN2803A.

Прошивка для контроллера (в архиве также имеется исходник и проект для Proteus) написана на AVR ассемблере. Особенность прошивки в том, что она без изменения может работать и в схеме с индикаторами с общим анодом и в схеме с индикаторами с общим катодом. При инициализации опрашивается уровень сигнала BT от кнопок и в зависимости от того низкий он или высокий выбирается алгоритм работы с кнопками и индикаторами. При программировании микроконтроллера необходимо запрограммировать следующие fuse-биты: CKSEL3, CKSEL1, CKSEL0, SUT0, BODLEVEL1, BODLEVEL0 (хотя два последних я не программировал, и все равно работает).

Для того, чтобы войти в режим установки времени, необходимо нажать и удерживать в нажатом состоянии кнопку «Ввод». Через 3 секунды часы перейдут в режим установки минут. При этом показания минут на индикаторе будут мигать. Кнопками «Меньше» и «Больше» можно установить новое значение времени. Кратковременное нажатие на кнопку «Меньше» или «Больше» изменяет значение времени на единицу, а удержание кнопки в нажатом состоянии непрерывно изменяет значение времени, соответственно в меньшую или большую сторону. При достижении необходимого значения времени кратковременным нажатием кнопки «Ввод» можно переключиться в режим установки часов. При этом показания часов будут мигать. Чтобы сохранить установленное значение времени, необходимо нажать и удерживать в нажатом состоянии кнопку «Ввод», пока не произойдет выход из режима установки времени. При установке нового значения времени секунды всегда обнуляются. Если в режиме установки времени в течении 10 секунд ни одна кнопка не будет нажата, то часы автоматически перейдут в рабочий режим. Установки нового значения времени при этом не произойдет.

Теперь о том, как это все реализовано практически

Устройство состоит из двух печатных плат из одностороннего стеклотекстолита размерами 50*100 мм — индикатора с кнопками и собственно самих часов. Вариант разводки платы часов и индикатора в формате SprintLayout5 предложен здесь. (Плату часов разводил не я, мои только правки, и изначально вариант был не самый удачный.)

Индикатор состоит из двух двузначных семисегментных индикаторов с общим анодом FYD-8021BS-11. На плате помимо самих индикаторов размещены кнопки.

Микроконтроллер в соответствии с разводкой платы применен в SOIC корпусе. В качестве верхних ключей, опять же в соответствии с разводкой платы и возможной взаимозаменяемостью, применены транзисторы КТ361В. Хотя аналог 2N3906 — КТ361Г, но последних в наличии не оказалось. Вариант получился не самый лучший, но тем не менее рабочий. Из оригинальной схемы были исключены детали, стоящие до стабилизатора U3, и по ошибке конденсаторы С3 и С4.

При запуске устройство отказалось работать напрочь. Причина — отсутствие на выходе стабилизатора U3 какой-либо емкости вообще и, как следствие, большой уровень пульсаций по шине питания +5В. Опытным путем удалось выяснить, что конденсатор К10-17Б емкостью 1 мкФ вполне решает эту проблему (как раз тот самый С4, но с бОльшим номиналом; а лучше поставить оба). Ставим — устройство запустилось, но нет информации от микросхемы DS1307. Причина — от одной только батарейки CR2032 микросхема питаться не хочет (оказывается, даташиты тоже полезно иногда читать), поэтому восьмую ножку микросхемы подключаем к шине питания +5В. На этот раз все заработало как надо, и все довольны. DSC05866

DSC05870Небольшой апдейт: из схемы исключен стабилизатор U3, т.к. глупо питать устройство напряжением 12 вольт от внешнего источника питания и понижать его до пяти, когда можно найти соответствующий пятивольтовый блок питания.

IMG0041A IMG0042A

Ссылки по теме

28 Comments on “Часы-термометр”

  1. Друг мой, Антон!
    Сегодня я прошил микроконтроллер по вашей прошивке. Читал в других ссылках, которые вы даете, некоторые изменения прошивки. Скажите, пожалуйста, будет ли работать схема с прошивкой из вашей статьи?
    И еще, можно ли подключить вместо индикаторов светодиодную сборку?

    С уважением,
    Айжан Олегов (aizhan-olegov@mail.ru)

    1. Прошивка работать, естественно, будет. Именно она у меня сейчас работает в часах. Светодиодную сборку подключить можно, хоть огромное табло. Главное, чтобы транзисторные ключи по току выдержали, или менять на более мощные.

  2. Антон, дорогой, спаси меня!
    Я то прошил MK в DIP корпусе. Что мне делать? Может, у вас есть lay файл на DIP?

    С уважением,
    Айжан Олегов (aizhan-olegov@mail.ru)

    1. Lay файла для МК в ДИПе, к сожалению, нет. Это будет уже совсем другая история, если разводить плату под DIP

  3. если я ножки по такому же порядку в дип микросхеме запаяю на эту плату, будет работать , или нужны изменения?z я надоел вам наверно, извиняюсь

  4. Здравствуй Антон. На схеме с общим анодом не подключена ножка 10 микросхемы ULN2803 (питание) это так должно быть?

    1. 10 ножка — это не питание. Это общий вывод интегральных диодов, предназначенных для подавления переходных процессов при индуктивных нагрузках. Соответственно подключать не требуется. А так вообще садится на плюсовой вывод нагрузки https://otvet.mail.ru/question/190296625

  5. Спасибо за объяснение. У меня есть большие светодиодные индикаторы (58мм) с общим анодом, для их работы нужно напряжение более 8V, как их лучше подключить? Подать на эмиттеры ключей 12V и добавить резисторы?

    1. На эмиттерах ключей выставить нужное напряжение 8В (вывод Vcc в шину уходит), например через интегральный стабилизатор. Либо увеличить сопротивление R12-R19, расчетным путем узнать их номинал и подать на эмиттеры ключей 12В.

  6. Здравствуйте, Антон, собрал схему с общим анодом. Имеются две проблемы: часы идут только при отключенном питании(от батарейки) и температура не соответствует действительной (при комнатной показывает 3 градуса)И еще при повышении температуры выводится стрелка «вниз» и наоборот. Буду благодарен за помощь.

    1. У меня часы наоборот не шли при отключенном питании, хотя на схеме микросхема RTC питается только от батарейки. Пришлось курить даташит и подводить внешнее питание. В даташите также указано про питание: When VCC falls below 1.25 x VBAT the device terminates an access in progress and resets the device address counter… When VCC falls below VBAT the device switches into a low-current battery backup mode. А вот про 3 градуса — даже не знаю куда копать. Попробовать прошить другую прошивку с форума?

  7. Ок, тогда вопрос. Может ли авто за соответствущее вознаграждение прошить пяток контроллеров и выслать их в Германию или Украину?

  8. Здравствуйте! У меня проблема с подключением табло. Табло собрано из кусков светодиодной ленты на 12 вольт (общий плюс). Дело в том что сегменты полностью не гаснут при смене числа, а остаются гореть в половину яркости, как их правильно скомутировать не используя uln2803? бьюсь уже 3 дня, ничего не выходит, пробовал и полевики и биполярники. на макетке с обычными семисегментниками все работает без нареканий. Помогите пожалуйста разобраться, кто понимает как это реализовать. В наличии куча н-канальных полевиков типа 06n03la, 70T03H и др, ну и биполярники тоже имеются.

    1. Лично я ленту не держал в руках. В схеме реализована динамическая индикация, возможно светодиоды в ленте не успевают гаснуть (имеются конденсаторы на ленте?). Без ULN можно обычными транзисторными ключами, так как ULN — это всего лишь сборка.

    1. Автор здесь, но не каждый день. Комментарии модерируются мной вручную, потому что иногда бывает спам.

  9. Сделал ваши часы. Только плату развёл под ДИП и не стал ставить ключи. Индикатор с общим катодом,небольшой.. Прошивку эту заливать и фузы какие ставить. Плату сделал в ЛАЙ, могу выложить , только как добавить. DS1307 то-же в ДИП, сделал подтяжку 8 ножки на 5 вольт.

    1. Написано же «Особенность прошивки в том, что она без изменения может работать и в схеме с индикаторами с общим анодом и в схеме с индикаторами с общим катодом. При инициализации опрашивается уровень сигнала BT от кнопок и в зависимости от того низкий он или высокий выбирается алгоритм работы с кнопками и индикаторами. При программировании микроконтроллера необходимо запрограммировать следующие fuse-биты: CKSEL3, CKSEL1, CKSEL0, SUT0, BODLEVEL1, BODLEVEL0 (хотя два последних я не программировал, и все равно работает).»

  10. доброго времени. собрал данную схему все работает отлично хотел переделать на большие 12 вольтовые сегменты. изменил питание на эмиттер транзисторов подаю прямо 12 вольт. подключил табло светятся все сегменты то есть восьмерки что не так????

  11. Hi, its posibile to change rtc with one more precise (ds3231) i need to make a vfd clock with ds3231 and attiny2313. Can you help me? I can pay you for support me.
    Thnx

  12. Друг Антон! Вы — редкостный мудак! Вы украли эту схему и опубликовали тут! Кстати! Чё ты наплёл про стаб. на 5 В? Точнее про конденсаторы….

    1. Стоит на себя посмотреть для начала. А далее — ссылка на первоисточник внизу статьи имеется. Если что-то не нравится — не публикуйте в Сети вообще, тогда «воровать» не будут. На заглавной странице имеется инфо, что многие разработки не мои, в блоге лишь инфо о конструкциях и опыте их практического исполнения и настройки (это между делом Вам ответ на Ваше «кстати»). Да, и с Вами я на брудершафт не пил, если чо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *