Несложные часы-термометр на микроконтроллере 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

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

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

  1. Айжан Олегов

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

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

    1. ub4acjub4acj (Автор записи)

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

  2. Айжан Олегов

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

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

    1. ub4acjub4acj (Автор записи)

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

  3. Айжан Олегов

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

    1. ub4acjub4acj (Автор записи)

      Работать оно будет, но у DIP и SOIC разводка разная, может получиться неаккуратный монтаж.

  4. Владимир

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

    1. ub4acjub4acj (Автор записи)

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

  5. Владимир

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

    1. ub4acjub4acj (Автор записи)

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

  6. Сергей

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

    1. ub4acjub4acj (Автор записи)

      У меня часы наоборот не шли при отключенном питании, хотя на схеме микросхема 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. Юрий

    Автор возвращается к просмотру этого блога?

    1. ub4acjub4acj (Автор записи)

      Бывает иногда

Оставить комментарий

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