Электрификация

Справочник домашнего мастера

Термометр на attiny2313

Содержание

LED часы на ATtiny2313 и DS1307

Всем привет! Накануне праздник 8 марта, вы уже придумали что подарить? Да/Нет? Можно конечно купить готовый подарок, но лучший подарок, это подарок сделанный своими руками. И так, вот задумался я: а что подарить Маме на 8 марта? Подумал…Подумал…О, а подарю я часы. Но покупать китайские часы я не хочу и не буду по двум причинам: сразу сломается, я же радиолюбитель. И я решил сделать свои часы своими руками! И вот что из этого получилось:

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

И так чего мне хотелось? А хотелось мне сделать достаточно большие часы на светодиодных семисегментных индикаторах, чтобы просто показывали время и шли даже тогда, когда выключены. За основу конструкции взял AVR микроконтроллер Attiny2313 с двумя килобайтами флеша, этого более чем достаточно. Сами часы реализовал с помощью RTC микросхемы реального времени DS1307, к которой подключается батарейка на 3 вольта, для поддержания хода часов. Семисегментные индикаторы поставил REC-S12101AG, зелёного цвета, с общим анодом. Их габариты: 28,8 на 40,8 мм. Поскольку часам для питания нужны 5 вольт, то я применил готовый импульсный блок питания RS-25-5. Почему именно такой ИБП? Лежал он у меня в коробочке с детальками (Давно, год назад я купил его за пять тыщ бел. руб. у одного парня, думаю хороший ИБП, пригодится!), пылился, а трансформатора у меня не было, вот и поставил что было. С блоком питания часы питаются от сетевого напряжения 220 вольт. Вот фото ИБП:

Ну собственно сложностей при сборке часов возникнуть не должно. И так, принципиальная схема часов:

Собрал я всё на печатных платах, семисегментные индикаторы разместил на одной плате, всё остальное на другой. Платы лудил сплавом розе и в конце покрывал цапон лаком. Печатные платы делал с помощью ЛУТа. Чертил в программе Sprint Layout 4.0. Вот фото платы с семисегментными индикаторами:

Платы вместе соединял шлейфом, вот так:

В ход можно пустить компьютерный IDE шлейф. Вот фото основной платы:

Обратите внимание, что корпус часового кварца нужно соединить с минусом питания, это позволяет избежать сбоев и внешних помех. Всё поместил в корпус, вот что получилось:

Как вы уже заметили внутри корпуса я закреплял всё с помощью термо клея. После сборки часов необходимо прошить микроконтроллер прошивкой ClockFirmware.HEX. Как прошить микроконтроллер и сделать программатор я писал и . После прошивки не забудьте установить следующие фьюз-биты:

Для программы SinaProg:

Я прошивал микроконтроллер с помощью программатора USBtiny и программы SinaProg. Программу (прошивку) для часов писал в среде BASCOM-AVR, исходник прилагается. У меня часы работают уже почти неделю и не на секунду не отстают. Точность хода часов зависит от кварца, его лучше купить новый. Яркость часов зависит от резисторов R1-R8, чтобы уменьшить яркость увеличьте сопротивление этих резисторов, но следует учесть, что резисторы необходимо ставить с сопротивлением не меньше 10 Ом а резистор R3 не менее 100 Ом. При первом включении часов либо после смены батареи резервного питания, зажмите обе кнопки S1, S2 и включите часы. Часы сбросятся на 00:00 и начнут идти.

Кстати, ночью часы смотрятся просто отлично:

Ну всё, часы готовы и работоспособны!

Мною на сборку часов было потрачено примерно 250 тысяч бел. руб. Отлично! Убил двух зайцев сразу: сделал своими руками и обошелся в меньшую сумму чем стоят китайские часы. Надеюсь часы понравятся Маме.

Для любителей программы Proteus прилагается проект часов.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
IC1 МК AVR 8-бит ATtiny2313 1 Поиск в Utsource В блокнот
IC2 Часы реального времени (RTC) DS1307 1 Поиск в Utsource В блокнот
VT1-VT4 Биполярный транзистор КТ315А 4 Поиск в Utsource В блокнот
C1 Электролитический конденсатор 100 мкФ 1 Поиск в Utsource В блокнот
C2 Конденсатор 100 нФ 1 Керамический Поиск в Utsource В блокнот
R1, R2, R4-R8 Резистор 10 Ом 7 Поиск в Utsource В блокнот
R3 Резистор 150 Ом 1 Поиск в Utsource В блокнот
R9-R12 Резистор 1 кОм 4 Поиск в Utsource В блокнот
R13-R15 Резистор 10 кОм 3 Поиск в Utsource В блокнот
R16, R17 Резистор 4.7 кОм 2 Поиск в Utsource В блокнот
CH1 Кварц 32768 Гц 1 Поиск в Utsource В блокнот
7Seg Семисегментный индикатор REC-S12101AG 4 С общим анодом Поиск в Utsource В блокнот
Bat1, Bat2 Батарейка 1.5 В 2 С пеналом Поиск в Utsource В блокнот
S1, S2 Кнопка тактовая Без фиксации 2 Поиск в Utsource В блокнот
5V ИБП RS-25-5 1 Поиск в Utsource В блокнот
Сетевой шнур с вилкой 1 Поиск в Utsource В блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

BMW 3 series Coupe Темная лошадка ›
Бортжурнал ›
Часы в салон вместо кнопки (на attiny2313+DS1307)

Привет всем!
Если кто помнит, от стандартных электронных часов в торпеде я избавился давно, из-за необходимости бортового компьютера и не важнецкого их вида. Но часов в машине таки не хватает, решил соорудить часы на семисегментных индикаторах, т.к. лучше всего вписываются в интерьер автомобиля родом из 80-х.
Велосипед изобретать не стал, за основу взял существующий проект отсюда, первоисточник .
Схема вот такая, проще некуда

Фьюзы
И прошивки
Решил развести свою печатную плату, чтобы можно было впихнуть часы вместо кнопок выше магнитолы или как в моем случае- вместо заглушки.
В качестве сердца стоят часы реального времени DS1307, а мозги attiny2313.
Делал одной платой, затем плату индикатора отрезал от основной, и припаял перпендикулярно к основной.
Для того чтобы в салоне смотрелось интересно, вырезал из тонкого дымчатого оргстекла пластинку по форме заглушки кнопки и приклеил ее силиконом к индикаторам.

Подключил к штатному разъему часов и вот, наконец готово. Так Выглядит при выключенном зажигании,

А так, при включенном зажигании

Все файлы вместе с прошивкой, проектом в протеусе и моей платой можно скачать
Если кто-то решит повторить, очень важное замечание — стабилизатор 78l05 оказался слабым и сгорел. нужно ставить 7805

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

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

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

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

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

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

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

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

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

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

  • Отсюда стащил схему (оригинальная статья)
  • Термометр на ATmega8 и датчике температуры DS18B20

    Схема термометра на ATmega8 и DS18B20
    Микроконтроллер ATmega8
    Цифровой термометр DS18B20
    Семисегментный светодиодный индикатор
    Алгоритм программы термометра
    Программа цифрового термометра на DS18B20

    Схема и программа очень простого цифрового термометра с использованием микроконтроллера ATmega8 и датчика температуры DS18B20. Термометр позволяет измерять температуру от 0 до 99 градусов с точностью до 0,5 градусов с разрешением 0,1 градуса

    Термометр по своим характеристикам очень прост, и его можно использовать только как термометр для измерения «комнатной» температуры. Использовать в этой конструкции микроконтроллер с памятью 8 килобайт конечно расточительно, можно применить микроконтроллер и попроще. Но дело в том, что эта конструкция — основа для дальнейшего развития проекта с использованием цифрового датчика температуры DS18B20. В следующей статье будет опубликована конструкция другого термометра — на двух датчиках DS18B20, что позволит измерять температуру не только в комнате, но и «за бортом». Естественно, будет добавлена возможность измерять и отрицательные температуру. В дальнейшем в конструкцию будет добавлена функция термостата, часы, возможность работы с различными нагрузками, что позволит уже собрать несложную конструкцию — основу «умного дома». Ну а сегодня первая статья из этой серии.

    Схема термометра на ATmega8 и датчике температуры DS18B20

    Давайте посмотрим на схему термометра:

    Как видите, схема очень проста, используется только необходимый минимум деталей.
    В схеме, для индикации показаний, применен семисегментный трехразрядный светодиодный индикатор (описание и подключение семисегментных индикаторов к микроконтроллеру).

    Напряжение питания конструкции — 5 вольт. Если вы примените микроконтроллер с низковольтным питанием (линейка микроконтроллеров ATmega), то можно и понизить питающее напряжение конструкции, но в этом случае, возможно придется уменьшить номинал гасящих сопротивлений в сегментах индикатора. Приблизительно номиналы сопротивлений можно брать:
    — при питании 5 вольт — 200-300 Ом
    — при питании 2,7 — 3 вольта — 100-150 Ом
    Транзисторы — любые, маломощные, структуры NPN.
    Датчик температуры — DS18B20 (ознакомиться с датчиком температуры DS18B20)
    Семисегментный индикатор — любой трехразрядный с общим катодом. Если вы захотите применить другие, с общим анодом, тогда придется заменить транзисторы на PNP и внести изменения в программу (заменить массив двоичных кодов для вывода цифр на индикатор). Я применил индикатор красного цвета свечения, и заодно, для следующей схемы, приготовил такой-же, но голубого цвета свечения.

    Детали термометра на микроконтроллере ATmega и DS18B20

    Микроконтроллер ATmega8:

    Распиновка микроконтроллера ATmega8:

    Трехразрядный семисегментный индикатор FYT-5631AUR-21:
    Распиновка семисегментного индикатора:

    Датчик температуры DS18B20:

    Транзисторы BC547C:

    Алгоритм работы программы термометра на ATmega и DS18B20

    Все установки микроконтроллера заводские, FUSE-биты трогать не надо.

    Для работы программы задействовано два таймера/счетчика микроконтроллера:
    — восьмиразрядный Т0
    — шестнадцатиразрядный Т1
    С помощью восьмиразрядного таймера Т0 настроенного на вызов прерывания по переполнению, с внутренней частотой СК/8 (период 2 миллисекунды) организован:
    — расчет текущей температуры
    — динамический вывод результатов измерения температуры датчиком DS18B20
    С помощью шестнадцатиразрядного таймера Т1 настроенного на вызов прерывания по переполнению, с внутренней частотой СК/64 (период 4 секунды) организованно:
    — подача команды датчику DS18B20 на измерение температуры
    — считывание измеренной температуры с датчика
    В принципе, можно задействовать и один восьмиразрядный таймер/счетчик, также настроенный на вызов прерывания по переполнению, с внутренней частотой СК/8, и всю работу схемы организовать в процессе обработки прерывания. Но дело в том, что смысла в этом нет — датчику DS18B20 необходимо чуть меньше 1 секунды (при 12-ти битном разрешении) для конвертирования (определения) температуры, т.е., чаще чем 1 раз в секунду мы не сможем обновлять данные температуры. Кроме того, столь частое обновление температуры приведет к нагреву датчика и, соответственно, к искажению реальных данных. Использование второго счетчика позволяет отдельно задавать промежутки времени измерения температуры.

    Вот так выглядит основная часть программы в Algorithm Builder:

    Где:

    — SP — настройка начального адреса стека

    — Timer 0 — настройка таймера T0:

    — Timer 1 — настройка таймера Т1:

    — TIMSK — настройка прерываний от таймеров:

    — Init_Display — подпрограмма настройки разрядов портов, участвующих в динамической индикации вывода данных на трехразрядный семисегментный индикатор

    — 1 —> I — глобальное разрешение прерываний

    — далее программа уходит в бесконечный цикл, и вся работа программы происходит при вызове прерываний от таймеров.

    Если возникнут вопросы, если что-то изложено не понятно или есть вопросы по программе, пишите — отвечу.

    Программа термометра в HEX файле (2,4 KiB, 7 287 hits)

    Программа термометра в Algorithm Builder (7,1 KiB, 5 079 hits)

    Второй вариант программы, без 4-х секундной задержки измерения температуры. Температура измеряется непрерывно (интервал менее 1 секунды)

    Термометр 2 — HEX файл (2,4 KiB, 4 099 hits)

    Термометр 2 в AlgorithmBuilder (11,1 KiB, 3 912 hits)

    Другие конструкции на микроконтроллерах
    1. Простые электронные часы на микроконтроллере ATyni26, с использование микросхемы часов реального времени DS1307
    2. Двухканальный термометр на микроконтроллере ATmega8 и датчиках температуры DS18B20
    3. Двухканальный термостат, терморегулятор на ATmega8 и датчиках DS18B20
    4. Двухканальный термометр, термостат, терморегулятор с возможностью работы по времени, одноканальный таймер реального времени на ATmega8 и датчиках DS18B20
    5. Двухканальный термометр, часы на ATmega8, датчиках температуры DS18B20, RTC DS1307, LCD 1602

    ЧАСЫ-ТЕРМОМЕТР НА МИКРОКОНТРОЛЛЕРЕ ATMEGA8

    Привет всем читателям и почитателям сайта Радиосхемы! Сегодня хочу поделиться с вами очередной простенькой конструкцией «Часы-термометр». Немного предыстории: вечером очень плохо видно показания уличного термометра, чтобы разглядеть положение стрелки, необходимо довольно долго вглядываться и иной раз пользоваться фонариком. Спустя определённое время мне это надоело и решил заменить прибор на электронный, который бы отображал информацию на светодиодных семи сегментных индикаторах. После чего бы не пришлось даже подходить к окну, чтоб узнать уличную температуру. Так как индикацию хорошо видно более чем с трёх метров. Схем данного устройства в сети полно, но я, как человек относящийся к семейству Радиолюбителей, решил собрать свою. Так как с недавних пор пытаюсь осваивать микроконтроллеры, то выбор пал на широко распространённый и дешёвый МК Atmega8. Далее была изготовлена плата по технологии ЛУТ, после чего уже приступил к программной части. Программа написана на языке Си с помощью среды разработки CodeVisionAVR.

    Схема принципиальная электрическая

    В одном устройстве объединено две функции: собственно измерение температуры и времени (часы). Индикация производится попеременно, сменяясь через десять секунд. Для настройки часов используется две кнопки, аналогично простым китайским электронным часам: одна отвечает за выбор параметра, вторая за его изменение. Питается устройство от сети с помощью постоянного стабилизированного источника тока напряжением пять вольт (плата от зарядного устройства телефона).

    Датчиком температуры является микросхема DS18B20. Так как в устройстве «Часы-термометр» нет своей батареи, при пропадании питания естественно показания будут сбиваться. И что бы это не явилось причиной какого-нибудь опоздания человека на жизненно важные дела, имеется интересная «фишка» — при подаче питания вместо времени на дисплее будут отображаться прочерки, пока не нажмёшь одну из двух кнопок настройки.

    Корпусом самодельного измерителя температуры послужила подходящая коробочка от запонок. В неё была помещена сама плата часов-термометра и плата вытащенная из телефонного зарядника. Датчик DS18B20 сделан выносным и подсоединяется через разъём.

    Список необходимых деталей

    • Микроконтроллер Atmega8 – 1шт.
    • Кварц 32768 Гц – 1 шт.
    • Датчик температуры DS18B20 – 1шт.
    • Семи сегментный индикатор(4 – разряда) – 1 шт.
    • Резисторы SMD типоразмера 0805:
    • 620 Ом – 8шт.
    • 0 Ом (перемычка) – 1шт.
    • 4,7 кОм – 1шт.
    • Тактовые кнопки – 2 шт.

    Видео работы устройства на Ютуб-канале

    Все файлы проекта (схема, прошивка и исходник) прилагаются. По всем вопросам относительно проекта можно обращаться на форум. До новых встреч на страницах сайта Радиосхемы! С вами был Темыч (Артём Богатырь).

    Форум

    Обсудить статью ЧАСЫ-ТЕРМОМЕТР НА МИКРОКОНТРОЛЛЕРЕ ATMEGA8

    Необычный термометр на ATtiny13 и DS18B20

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

    Схема собрана на микроконтроллере ATtiny13, датчике температуры DS18B20, RGB — светодиоде и еще на нескольких компонентах. Был выбран именно этот микроконтроллер, так как в данном случае размеры платы очень критичны. Датчик для измерения температуры — DB18B20. Он использует исключительно 1-Wire протокол – при этом формируется соединение, которое осуществляет коммуникацию на шине, используя всего один управляющий сигнал. Таким образом, у микроконтроллера осталось целых 4 свободных вывода (PB5, он же RESET, используется по своему прямому назначению).

    Схема прибора представлена ниже:

    Программа для микроконтроллера написана на С в среде разработки Atmel Studio 7. В архиве, прикрепленном к статье есть все необходимые файлы, а также уже скомпилированная прошивка.

    Fuse-биты необходимо выставить в соответствии со скриншотом, представленным ниже:

    Внешний вид устройства (3D модель):

    Спасибо за внимание!

    Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
    U1 МК AVR 8-бит ATtiny13 1 SO8 Поиск в Utsource В блокнот
    U2 Датчик температуры DS18B20 1 Поиск в Utsource В блокнот
    R1-R3 Резистор 510 Ом 1 0805 Поиск в Utsource В блокнот
    R4 Резистор 4.7 кОм 1 0805 Поиск в Utsource В блокнот
    D1 Светодиод RGB 1 5050 Поиск в Utsource В блокнот
    BT0 Кнопка 1 3 x 6 x 2.5мм Поиск в Utsource В блокнот
    Добавить все

    Скачать список элементов (PDF)

    Простейший термометр на Attiny 2313 и датчике температуры ds18b20

    Преамбула
    Решил я перенести проект, который делал несколько лет назад на новую плату. Дело в том, что плата для этого термометра была возможно первой платой, которую я делал и как полагается первый блин вышел комом. Основой для платы послужил гетинакс, который в магазине мне продали под видом стеклотекстолита, а для разводки платы я использовал ЛУТ. Сейчас для изготовления плат я использую текстолит и ЧПУ фрезер, вот так выглядит разница в несколько лет:
    Вот так работал термометр на старой плате:
    Описание устройства
    Итак, что же собой представляет простейший термометр? Это микроконтроллер attiny2313 (документация на русском), который общается с датчиком температуры ds18b20 (документация на русском) по протоколу 1-wire, дело в том, что датчик ds18b20 имеет всего 3 ноги, 2 из которых предназначены для питания и только одна для передачи данных. В схеме также используется подтягивающий резистор на 4.7КОм подключенный к шине 1-wire и плюсу источника питания.
    Полученные от датчика данные микроконтроллер выводит на 7-сегментный 4-х разрядный индикатор. Для вывода данных на индикатор используется сдвиговый регистр 74hc595.
    Что интересного можно сказать про датчик температуры ds18b20?
    — Для предоставления данных о температуре используется от 9 до 12 бит. Чем больше бит, тем точнее информация о температуре, но тем больше нужно ждать, пока температура будет подготовлена для передачи от датчика получателю (микроконтроллеру). Вот табличка, в которой указано, сколько бит используется для представления температуры, какая при этом будет точность и сколько времени на это понадобится.

    — Этот датчик может питаться непосредственно от линии данных, т.е. для подключения можно использовать только одну ногу. Минусом данного способа является не возможность опрашивать датчик, пока тот готовит температуру, т.к. при подготовке температуры энергопотребление датчика может существенно возрасти (до 1,5мА), и требуется, что бы на шине денных все это время был высокий логический уровень.
    If the DS18B20 is powered with parasite power, this notification technique cannot be used since the bus must be pulled high by a strong pullup during the entire temperature conversion. Есть способы обойти это ограничение, но об этом, может быть, поговорим в другой раз.
    — У каждого датчика есть свой 64 битный адрес, таким образом можно на одной шине разместить несколько датчиков и опрашивать их используя адрес каждого конкретного датчика.
    — Есть возможность установить верхний и нижний придел температуры, при котором датчик температуры передаст управляющему устройству сигнал тревоги. Так же есть возможность передать по шине команду «ПОИСК ТРЕВОЖНОГО СИГНАЛА » при котором все датчики проверят свое состояние, и датчики с данным признаком ответят.
    Что интересного можно сказать про сдвиговый регистр?
    Данная микросхема содержит внутри себя два регистра. Первый регистр — сдвиговый: 8-StageShiftRegister. Второй регистр — регистр хранения данных: 8-BitStorageRegister.
    Для записи в сдвиговый регистр используется два входа: DS и SHCP. Сначала устанавливаем на входе DS логический ноль или логическую единицу, затем подаем на вход SHCP тактовый сигнал и бит данных записан. При повторной записи информация, записанная ранее, сдвинется на один бит вперед. Если записанные данные выходят за предел регистра — они безвозвратно теряются. Вход MS используется для очистки сдвигового регистра. Обратите внимание, что данный вход относиться только к сдвиговому регистру, а не ко всей микросхеме.
    Вход STCP используется для записи данных из сдвигового регистра в регистр хранения.
    Вход OE разрешает выводить данные.
    Более подробную информацию о том, как сигналы на выводах микросхем влияют на ее работу можно найти в таблице ниже:
    В последней строке описано, что будет, если подать тактовый сигнал сразу на выходы SHCP и STCP: Сначала все содержимое сдвигового регистра будет скопировано в регистр хранения, а потом произойдет запись данных в регистре сдвига. На сайте tinkerkcad можно поиграться с 4-х битным сдвиговым регистром, собранным на основе D-триггеров. Левый переключатель соответствует входу DS, правый — SHCP.

    Предлагаю свой вариант простенького бытового термостата на ATtiny13. Данный проект я пока не собирал в виде законченного устройства, а сделал только прототип на своей отладочной плате. Задумка была — сделать максимально простой термостат, который поддерживал бы положительную температуру, включая при необходимости обогреватель. За основу взят код, найденный где-то на просторах интернета, обеспечивающий взаимодействие МК с термодатчиками Dallas DS18B20 по протоколу 1Wire. Програма рассчитана на работу только с одним датчиком. Идентификатор конкретного датчика знать необязательно, т.к. программа определяет присутствие датчика автоматически и обращается к нему, минуя процесс идентификации.

    #define F_CPU 1200000UL // указываем рабочую частоту контроллера для работы задержек #include <avr/io.h> #include <util/delay.h> #define SENSOR_PIN PB3 // вывод датчика #define RELAY_PIN PB0 // вывод реле #define LED1_PIN PB1 // вывод светодиода индикации режима реле #define LED2_PIN PB2 // вывод светодиода индикации температуры #define SENSOR_PORTReg PORTB #define SENSOR_DDRReg DDRB #define SENSOR_PINReg PINB #define RELAY_PORTReg PORTB #define RELAY_DDRReg DDRB #define RELAY_PINReg PINB #define LED1_PORTReg PORTB #define LED1_DDRReg DDRB #define LED1_PINReg PINB #define LED2_PORTReg PORTB #define LED2_DDRReg DDRB #define LED2_PINReg PINB int8_t actualTemp; // текущая температура int8_t setTemp = 0; // заданная температура uint8_t hist = 1; // гистерезис uint8_t errorsCounter = 0; // счётчик ошибок // Сброс линии 1Wire uint8_t oneWire_reset(void) { uint8_t sensor_OK; uint8_t retries = 125; // Ждем 250мкс установки высокого уровня на линии. do { if (—retries == 0) return 0; _delay_us(2); } while ( !(SENSOR_PINReg & (1 >= 1; // сдвигаем данные на один разряд вправо if(SENSOR_PINReg & (1 >= 1; // сдвигаем данные на один разряд вправо } } // Обновляет значение контольной суммы crc применением всех бит байта b. // Возвращает обновлённое значение контрольной суммы uint8_t oneWire_crc_update(uint8_t crc, uint8_t b) { for (uint8_t p = 8; p; p—) { crc = ((crc ^ b) & 1) ? (crc >> 1) ^ 0b10001100 : (crc >> 1); b >>= 1; } return crc; } // Включение реле void relayOn(void) { RELAY_PORTReg |= (1 = 60) relayOff(); // примерно через 1 минуту принудительно отключаем реле } // Отключение аварийного режима void emergencyModeOff(void) { errorsCounter = 0; // обнуляем счётчик ошибок LED2_PORTReg &= ~(1 = (setTemp + hist)) relayOn(); else if (actualTemp 0) // Если температура положительная, светодиод моргает одиночными вспышками { do { _delay_ms(300); flash(); f—; } while (f > 0); } else if (actualTemp

    Функции устройства

    Изначально предполагалось сделать максимально простую прошивку, обеспечивающую только измерение температуры, сравнение её с заданным значением и переключение, при необходимости, реле нагрузки. Но по ходу дела я решил, что всё-таки будет целесообразно добавить пару фишек, тем более память МК это позволяет.

    Индикация температуры и состояния реле

    Для индикации на устройстве предусмотрены два светодиода: один — сигнализирует о текущем состоянии реле (вкл./выкл.), второй — отображает текущую температуру. Изначально, отображение температуры не предусматривалось, но в процессе написания, я где-то в коде допустил ошибку и никак не мог понять, почему неправильно срабатывает реле. Поэтому было решено сделать индикацию температуры для удобства отладки кода. Так как свободных ног у ATtiny13 мало, тут возникают некоторые затруднения. Кто-то тут использует для индикации сдвиговые регистры, кто-то — трёхцветный светодиод… Я же решил ещё больше изголиться, и обойтись обычным светодиодом! 🙂 (впрочем, подобное решение мне позже попадалось на Youtube, так что тут я, видимо, тоже не придумал ничего принципиально нового).
    Температура отображается вспышками светодиода: положительная — короткими одинарными, отрицательная — короткими двойными, при нуле градусов — светодиод загорается и гаснет примерно на одну секунду, если данные с термодатчика получить не удаётся — светодиод светится постоянно.
    Хоть индикация получилась и не самая наглядная, но для отладки такой способ вполне пойдёт. Да и вообще, я решил оставить хотя бы такую индикацию — в конце концов, это второстепенная функция данного устройства. Надо заметить, что пока идёт отсчёт времени вспышек светодиода, МК простаивает, не выполняя никакой полезной работы. Но в данном случае это не важно, т.к. в фоне нам не требуется выполнения каких-либо операций, а замеры температуры достаточно делать раз в несколько секунд.

    Защита от замерзания (аварийный режим)

    Для макетирования этот момент может и не очень важен, но при сборке реального устройства требуется предусмотреть защиту на случай, если термодатчик выйдет из строя, либо оборвётся связь с ним. В данном случае, если текущая температура не будет получена от термодатчика в течение 1 минуты, реле нагрузки (обогревателя) отключается принудительно, дабы избежать замерзания обогреваемого объекта.
    Программа рассчитана на подключение обогревателя к нормально ЗАМКНУТЫМ контактам реле. Таким образом, если отключить питание термостата, он будет работать в режиме байпаса, то есть обогреватель будет включен непрерывно.

    Наверное, даже не просто простые часы на микроконтроллере, а даже очень простые. Этот проект на микроконтроллере Attiny2313 наверно можно назвать проектом одного дня, поскольку на создание данных часов с начало и до конца ушло чуть больше одного дня.

    Для создания данных часов нам понадобятся:

    • Кварцевый резонатор на 16 МГц – 1 шт;
    • Микроконтроллер Attiny2313 -1 шт;
    • Конденсатор от 22 пф до 27 пф — 2 шт;
    • Конденсатор 220 н — 1 шт;
    • Стабилизатор 7805 – 1 шт;
    • Транзистор КТ817Б – 4 шт;
    • Индикатор SA15-11GWA — 4 шт ( можно любой другой с общим анодом);
    • Кнопка – 2 шт;
    • Резистор 100 Ом – 8 шт;
    • Резистор 200 Ом – 4шт;
    • Резистор 10 кОм – 1 шт.
    • Питание осуществляется от простого надежного стабилизатора на LM317.

    Описание работы простых часов на Attiny2313

    Микроконтроллер Attiny2313 тактируется кварцевым резонатором с рабочей частотой 16 МГц. В качестве счетчика времени, в схеме микроконтроллера Attiny2313 запущен 16 битный таймер с предделителем 256, сконфигурированный на создание прерывания по достижении счетчиком значения 625. Следовательно, получилось прерывания 100 раз в секунду.

    Временной интервал находится в глобальных переменных, и при каждом прерывании необходимо увеличить значение миллисекунд на 1. В том случае если число миллисекунд доходит до 100, то необходимо увеличить на 1 величину секунд, а величину миллисекунд сбросить. И далее в той же последовательности до десятков часов, которые сбрасываются по достижении 24 без прибавления следующего разряда. Часы на микроконтроллере Attiny2313 максимально простые, поэтому они не отображают ни дату, ни переход на зимнее/летнее время и т.д.

    Таким образом, получаем величину текущего времени записанного в глобальных переменных. Теперь необходимо вывезти эти значения. Поскольку количество портов микроконтроллера не так много, то используем такую особенность зрения как инерционность. Катоды всех четырех индикаторов часов соединены параллельно, а аноды управляются раздельно, что позволяет в каждый момент времени отобразить цифру на любой индикатор.

    Быстро переключая порт B микроконтроллера, к которому подключены катоды и быстро переключая аноды, можем организовать видимость, что отображаются все 4 цифры, несмотря на то, что единовременно работает всего лишь одна. Другими словами, если текущее время 10:43, то выводим цифру 1 на первый индикатор часов, через небольшой интервал времени (порядка 1 мс) выводим цифру 0 на второй индикатор, через 1 мс отображаем 4 на 3 индикатор, спустя 1 мс отображаем 3 на 4 индикатор и снова по кругу.

    Кнопки управления часов опрашиваются после каждого очередного цикла отображения (приблизительно 40 раз в секунду), процесс нажатия кнопок снабжен антидребезгом и защелкой в виде флага, что позволяет считать собственно само нажатие, не отвлекаясь на удержание.

    (1,2 MiB, скачано: 7 220)

    9zip.ru Радиотехника, электроника и схемы своими руками Простые часы на микроконтроллере Attiny2313 и RTC DS1307
    Каждый радиолюбитель должен в своей жизни обязательно собрать часы. Уж что поделать, если тянет сделать полезное устройство для дома. По этой причине новые статьи о самодельных часах появляются и будут появляться.

    Часы, предлагаемые в этой статье, собираются из того, что есть под рукой. Как правило, есть один из самых дешёвых и распространённых микроконтроллеров Attiny2313, микросхема часов реального времени DS1307 и светодиодные семисегментные индикаторы с общим анодом. При использовании компонентов в SMD-исполнении, печатную плату можно значительно уменьшить. В данном варианте почти все детали — выводные, за исключением DS1307 в корпусе SO-8 и нескольких резисторов и перемычек. В качестве ключевых транзисторов к индикаторам применены знаменитые КТ315. Вместе с кучкой выводных резисторов всё смотрится настолько красиво, что даже не хочется прятать такую красоту в корпус.


    Нажмите, чтобы увеличить

    Схема часов и прошивка микроконтроллера отсюда:
    Там же можно найти двухплатный вариант разводки, исходник в Bascom-AVR и проект в Proteus.
    Прошивка микроконтроллера: clock2313.hex
    Фьюзы для PonyProg:

    При первом включении часов необходимо удерживать нажатыми обе кнопки перед подачей питания — это сбросит показания в нулевые значения. Затем кнопками можно установить часы и минуты.
    Точность хода часов зависит от кварцевого резонатора, его рекомендуется взять с материнской платы компьютера. Для большей надёжности под кварцем необходимо создать полигон фольги, соединённый с минусом, а корпус резонатора соединить с ним скобочкой. Сами часики очень простые: в них нет календаря, будильника и т.п. Всё, что от них требуется — только показывать точное время и радовать своим видом.

    Модификация часов для автоматического изменения яркости индикаторов в зависимости от освещённости.
    С добавлением в схему нескольких деталей, в дневное время или с включенным освещением цифры на часах будут иметь полную яркость и будут хорошо различимы. В тёмное время суток большая яркость не требуется, поэтому она будет автоматически снижена. Схема изменения представлена ниже:

    Она представляет собой классическое фотореле, для упрощения оно собрано всего на одном полевом транзисторе P-типа. Резистором в цепи затвора можно регулировать чувствительность, или порог, при котором будет срабатывать изменение яркости. Резистор, шунтирующий сток-исток, определяет яркость индикаторов в тёмное время суток. Его сопротивление необходимо подобрать, заменив переменным резистором на 1,5кОм. Вместо резистора можно использовать несколько диодов, соединённых последовательно, чтобы обеспечить необходимое падение напряжения на них.
    Работа этой схемы очень проста. Когда фотодиод освещён, полевой транзистор открыт (его сопротивление в открытом состоянии составляет доли ома) и шунтирует ограничительный резистор. Когда же фотодиод не освещён, полевой транзистор закрыт, и ток к катодам ключевых транзисторов индикаторов протекает через ограничитель, что в итоге уменьшает яркость. Расположение фотодиода должно быть таким, чтобы свет от индикаторов не попадал на него.
    UP: Сопротивление резистора в фотореле следует увеличить с 3.3МОм до 10МОм.
    Изготовление корпуса для часов по той же технологии, что описана в изготовлении корпуса для металлоискателя. Детали вырезаются из пластмассы, которая клеится дихлорэтаном. Это может быть полистирол или иной тип, его легко узнать по внешнему виду. ПВХ склейке дихлорэтаном не поддаётся. В данном случае был использован поддон от старого холодильника. Пластмасса пожелтела от времени.
    Все детали последовательно склеиваются. Настоятельно рекомендуется проводить склейку на открытом воздухе. На этом этапе корпус уже обретает начальную жёсткость. Между склеиваемыми деталями будут щели — это не страшно. Для их заделки используется мастика, которая также является клеем. Для её приготовления кусочки пластика заливаются дихлорэтаном. Через несколько часов мастика будет готова. При помощи зубочистки она наносится на все швы сначала изнутри, а потом — и снаружи. Время её высыхания весьма мало, поэтому производить все эти операции можно последовательно. Ей нужно лишь дать немного подсохнуть, буквально пару минут после нанесения, чтобы она не текла, и можно приступать к следующему стыку.
    После просушки в течение суток корпус обретает окончательную прочность. Следует отметить, что она достаточно высока. На этом этапе при помощи электронаждака, напильника и шкурки обрабатываются и слегка скругляются все грани и углы. Часть мастики с наружной стороны при этом также снимается, но благодаря своей текучести она заполнила все щели и корпус смотрится монолитным. Можно приступать к покраске.

    Перед покраской корпус протирается ацетоном. Протирать нужно быстро, чтобы ацетон не растворил пластик. Это нужно лишь для обезжиривания. Для того, чтобы краска хорошо легла на корпус, он сначала покрывается грунтовкой. В данном случае она имеет серый цвет.

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

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

    Нетрудно заметить, что в этих частах применена другая печатная плата, нежели показана в статье. Здесь все транзисторы и резисторы — в SMD. Также на плате уже разведено фотореле, но пока не подключено.
    Для первоначальной же платы был изготовлен другой корпус по такой же тенхологии. Стенки покрашены белой матовой краской, лицевая сторона выполнена из тёмного оргстекла. К сожалению, при склейке пары дихлорэтана испортили эту часть корпуса, поэтому пришлось сделать что-то вроде матирования при помощи шкурки.

    Плата в этом корпусе крепится к задней стенке при помощи двух стоек.

    Фотодиод временно просто торчит на проводках.

    Датагорский проект №12 «Simplex Clock». Часы на микроконтроллере ATTINY2313A с бэкапом, коррекцией хода и дисплеем h=44мм

    Привет, дрУги! А у нас появился новый кит, которым я решил открыть направление электронных часов. Забирайте кит часов в датагорском магазине: Project-012 «Simplex Clock». Часы на микроконтроллере с бэкапом, коррекцией хода и дисплеем h=44мм. Набор для сборки
    Далее речь пойдет о простых электронных часах на микроконтроллере ATTINY2313, о том, как проект был задуман, как появился и как его правильно собрать и настроить.
    Для этого простого проекта и пожелания мои были просты. Мне пока не надо, чтобы часы спутники считали и за пивом бегали. Мне — чтоб время показывали. Чтоб цифири покрупнее и почётче. Чтоб надёжный бэкап был и без «золотых» батареек. И чтоб врали не больше нескольких секунд в месяц.
    Но обо всём по порядку!

    LM8560 must die!

    У меня были электронные часы с приёмником внутри. Эксплуатация показала, что это изделие современного китайпрома по имени Scarlett не пригодно ни как первое, ни как второе. Приёмник так плох, что я просто не буду о нём говорить. А часы собраны на снятом с производства в 1812 году чипе LM8560.
    Чип замечателен двумя нюансами. Первое: не используется кварц. Наверное, в 80х годах прошлого века кварцы были зело дороги. Точность хода обеспечивается частотой сети 220В. Я не знаю, как в Японии, где этот чип был рождён в недрах фирмы Sanyo, но у нас в Сибири частота электросети явно не эталон: минут пять туда-сюда в месяц легко.
    И на это даже не успеваешь рассердиться, т.к. напряжение у нас периодически вырубается (микрорайон новый, кругом стройка) на несколько секунд или минут и приходится заново ручками восстанавливать время на часах. В качестве бэкапа производитель предлагает использовать недешёвую батарейку «Крона», которая очень быстро и неожиданно сдыхает, а узнаёшь об этом только по абракадабре на индикаторах часов после очередного отключения.
    Второй нюанс чипа – удивительное управление LED-индикаторами. Кто желает, посмотрите даташит внизу. Говоря коротко, во всех часах на LM8560 применяется необычный LED-индикатор, который невозможно прямым образом применить в самоделках, даже после того, как ударишь часы за хвост об угол.

    Куда приводят мечты

    И задумался я над простыми домашними часами. Поискал готовые решения на «лёгких» микроконтроллерах AVR класса TINY. И, не поверите, — не нашёл ни одного проекта. Нет, полустаеек и каких-то, копирующих ошибки друг друга, схемок, я нашёл массу, как в русском, так и в зарубежном сегменте Сети.
    Но я не нашёл ни одного проекта, который одновременно был бы прост, был полно описан, предлагал исходные коды прошивки и имел бы хорошие потребительские свойства.
    А пожелания мои были просты. Мне не надо, чтобы часы спутники считали и за пивом бегали. Мне — чтоб время показывали. Чтоб цифири покрупнее и почётче. Чтоб надёжный бэкап был и без «золотых» батареек. Чтоб врали не больше нескольких секунд в месяц.
    Я нашёл крупные индикаторы, набросал в DipTrace простейшую схемку по мотивам источников, упомянутых ниже, устранил все замеченные ошибки, ввёл блок на ионисторе, запланировал одну ногу контроллера под определение состояния питания, развёл печатку в размер четырёх индикаторов и под доступные мне детали, заказал прототипы на заводе, получил и позвонил по Скайпу моему соратнику Ивану Гаврилову.
    Ваня, сказал я, а напиши нашу собственную прошивку для наших собственных часиков. Должно работать так-то и так-то. Скоро сказка сказывается, да не скоро дело делается. Программа была успешно написана на «С», потом переписана и дописана раз десять. Я кидал идеи и проводил испытания в железе на своей стороне. Ваня строчил код, придумывал новые ходы и ругал мои идеи на своей стороне.
    И, наконец, под напором двух интеллектов, часики ожили и похорошели. Заработали, как задумано!
    Итого: Иван получил оплату за работу, я пошёл писать эту статью. Мы оба получили массу неоценимого опыта и остались «с чувством глубокого удовлетворения», как говорил один генсек в прошлом веке.
    А вы, дрУги, получили новый датагорский кит. Забирайте кит часов в нашем магазине: Project-012 «Simplex Clock». Часы на микроконтроллере с бэкапом, коррекцией хода и дисплеем h=44мм. Набор для сборки

    Пара слов о комплектации кита часов

    В конструкторе использованы в основном обычные выводные элементы для простоты сборки даже начинающими.
    Есть, однако, и несколько smd-элементов: контроллер ATTINY2313A и пара резисторов, т.к. я считаю, что постепенно всем придётся освоить работу с smd или отказаться от своего увлечения электроникой. Тренируйтесь, ребята! Кроме того, контроллеры в выводном исполнении ощутимо дороже и менее доступны мне в промышленных количествах.
    Как всегда, в комплекте печатная плата отличного качества, двусторонняя, с металлизацией отверстий, с паяльной маской и надписями. Приятно взять в руки.
    Отмечу несколько «интересных» элементов.
    — Ионистор (суперконденсатор) ёмкостью 330000 мкФ, чёрными стрелками помечен минус. Благодаря такой нечеловеческой ёмкости и программной реализации засыпания контроллера при пропадании основного питания мы имеем 30-40 минут сохранения отсчёта времени без батареек и т.п.
    — Мини-конденсаторы высотой всего 5 мм, для слим-конструкций это важно.
    — Катушка индуктивности, очень похожая на резистор. Если не были знакомы, теперь не спутаете. Т.к. изначально предполагалось использование разнородных источников питания, в том числе и очень китайские импульсные зарядники от сотовых телефонов, то предусмотрели эту катушку для фильтрации ВЧ-мусора.

    Рассмотрим схему часов на микроконтроллере ATTINY2313

    «Сердце» наших простых часов MCU1 – микроконтроллер ATTINY2313 – представляет собой восьмиразрядный микроконтроллер AVR:
    — напряжения питания 1,8 — 5,5 В;
    — 2 Кбайт системной программируемой Flash-памяти про¬грамм;
    — 128 байт EEPROM;
    — 128 байт SRAM (ОЗУ);
    — 18 линий ввода—вывода (I/O);
    — 32 рабочих регистра;
    — однопроводной интерфейс для внутрисхемной отладки;
    — два многофункциональных таймера/счётчика с функцией совпадения;
    — поддержка внешних и внутренних прерываний;
    — последовательный программируемый USART-порт;
    — универсальный последовательный интерфейс с детектором начала передачи;
    — программируемый сторожевой таймер с внутренним генерато¬ром;
    — три программно изменяемых режима энергосбережения.
    Подробнее читайте в даташите.
    Сегмент схемы 1. Чип работает c кварцем Y1 на 4 МГц. Корпус кварца рекомендую подключить к точке QGND на печатной плате (заземлить) для улучшения стабильности работы часов.
    Сегмент схемы 2. Обеспечение бесперебойной работы часов: ионистор SC1, токоограничительный резистор R4 и диод Шоттки VD1. В нормальном режиме ионистор заряжается от основного источника питания. При пропадании основного питания, ионистор питает микроконтроллер, а диод VD1 предотвращает разрядку ионистора через другие цепи часов. Китовый ионистор 0,33F поддерживает отсчёт времени ок. 40 минут. На печатной плате предусмотрено универсальное посадочное место для всех популярных корпусов ионисторов. При необходимости вы сможете значительно увеличить время бэкапа, применив более ёмкий ионистор.
    Сегмент схемы 3. Стабилизатор питания U1 на 5 В выполнен на чипе 7805. На его вход X1 можно подавать напряжение до +24 В. Если вы применяете внешний источник питания +5 В, например, зарядное устройство от сотового телефона, то U1 нужно исключить. В этом случае убедитесь, что напряжение питания ни в коем случае не превысит +5,5 В. У китайских зарядок замечен большой разбег параметров.
    Сегмент схемы 4. В программе контроллера реализовано наблюдение за состоянием основного питания. Если пропадает +5V, то индикация отключается, контроллер переходит на питание от ионистора и засыпает, счёт времени сохраняется. При появлении основного питания контроллер просыпается, часы возвращаются к нормальной работе.
    Не забудьте установить перемычку между точками TP1-TP2 на плате, иначе ваш контроллер будет спать, и никакой индикации вы не увидите.
    Входы контроллера от кнопок управления S1-S3 подтянуты к +V резисторами R1-R3 для повышения помехоустойчивости. Также «дребезг» контактов подавляется програмно. Назначение и использование кнопок будет описано ниже.
    Транзисторные ключи Q1-Q4 включены по схеме с общим эмиттером, разгружают по току выходы микроконтроллера. Яркость свечения индикаторов можно изменять подбором резисторов R5-R12 в диапазоне от 0 до 100 Ом.

    Собираем часы на микроконтроллере ATTINY2313

    1) Для начала нужно рассмотреть все элементы, понять назначение, проверить комплектность.
    2) Запаиваем микроконтроллер. Я обычно наношу кисточкой немного самодельного спирто-канифольного флюса, он густоватый и клейкий, что облегчает дальнейшее точное позиционирование smd-компонента.
    3) Изготовим проставку для вертикального позиционирования деталей на ПП. Например, из куска ненужной пластиковой карты. Такую проставку рекомендуем обязательно применить при запаивании кварца, затем она удаляется. Запаяйте нагрузочные конденсаторы С1-С2, максимально укоротив их ножки.
    4) Облудите небольшую площадку на боку корпуса кварца и соедините перемычкой с точкой QGND на плате.
    5) Припаяйте провода к точкам подключения программатора: Vcc, GND, Reset, SCK, MOSI, MISO и соедините с вашим программатором. Если вы используете датагорский USB-программатор Project-5 DAVR-910, то дополнительного питания на ПП часов подавать не нужно.
    6) Прошейте контроллер китовым хексом. Настройки фьюзов смотрите на картинках. Отпаяйте провода программатора.
    7) Проверьте сопротивления резисторов мультимером со свежей батареей. Запаяйте все резисторы, используя проставку. Запаяйте smd-резисторы R15-R16.
    8) Установите конденсатор С3 — шунт питания контроллера. Установите ионистор. Установите диод VD1, L1 на расстоянии 3-5 мм над платой, конденсаторы С4-С5.
    9) Отформуйте выводы транзисторов как показано на фото и запаяйте на ПП. Обратите внимание, шелкография на ПП не совпадает, т.к. в конечной комплектации применены другие транзисторы.
    10) Фланец 7805 припаяйте к полигону ПП хорошо прогретым паяльником. Полигон далее будет работать как радиатор. Или посадите 7805 на винт М4 с теплопроводной пастой «КПТ», «Алсил».
    11) Очистите ПП от избытков флюса вручную или в УЗ-ванне. Я использую ультразвуковую ванну CT-400A с парой переделок (увеличение мощности и выдержки времени). В чистом изопропиловом спирте платы отмываются очень хорошо.
    12) Вот так выглядит наша плата перед окончательным этапом сборки. Не забудьте установить перемычку между точками TP1-TP2 на плате, иначе ваш контроллер будет спать, и никакой индикации вы не увидите.
    13) Теперь установите кнопки. Правильно спозиционируйте и, покачивая, дошлите кнопки до характерного защёлкивания на плате.
    14) Хорошими бокорезами удалите все выступающие ножки деталей с обратной стороны ПП. Я использую советские, с победитовыми напайками на рабочих кромках. Их ещё можно встретить в магазинах ювелирных инструментов.
    15) Переверните плату и установите индикаторы, поправляя выводы тонкой отвёрткой. Положите плату вниз индикаторами на ровную поверхность. Убедитесь, что индикаторы установлены ровно и одинаково по глубине и «прихватите» все индикаторы – запаяйте средние выводы в каждом ряду, что бы предотвратить дальнейшее смещение. Теперь запаяйте все остальные выводы.
    16) Отформуйте выводы светодиодов и впаяйте, как на фото. Этим мы обеспечиваем единство наклона с цифрами индикаторов.
    17) Сборка окончена, наши часы готовы, ура! Подайте питание и нажмите кнопку «Сброс».

    Установка текущего времени

    1) Рекомендую толкатель кнопки «Сброс» укоротить наполовину, чтоб затруднить случайное нажатие. Сделать это можно теми же бокорезами.
    2) Часы могут работать в двух режимах отображения времени: «ЧЧ:ММ» + мигание разделительных светодиодов и «ММ:СС» + постоянное свечение светодиодов. Переключение между режимами осуществляется нажатием на кнопку «Минуты» в течение 1,5 сек.
    3) В режиме «ЧЧ:ММ» кратковременными нажатиями кнопок установите верные показания часов и минут.
    4) Перейдите в режим «ММ:СС». Кратковременным нажатием кнопки «Часы» синхронизируйте ваши часы с эталонными часами. При этом происходит обнуление секунд. Кратковременными нажатиями кнопки «Минуты» скорректируйте минуты, если требуется. Вернитесь в основной режим «ЧЧ:ММ».

    Программная коррекция хода часов

    В наших часах реализован простой алгоритм коррекции. Можно задать период от 1 до 10 дней и коррекцию от -30 до +30 секунд. Коррекция происходит в 00:00.
    Вход в режим настройки коррекции осуществляется нажатием на кнопку «Часы» в течение ок. 2 сек.
    На экране отобразятся начальные уставки «0 0», что соответствуют отключённой коррекции.
    Кратковременные нажатия на кнопку «Часы» меняют период от 0 до 10 дней и далее по кругу. Прохождение через 0 обнуляет заданное значение коррекции.
    Кратковременные нажатия на кнопку «Минуты» меняют коррекцию от 0 секунд до 30 секунд, далее от -30 секунд до 0 секунд и далее по кругу. Признаком отрицательно значения является свечение разделительных светодиодов.
    Например, индикация «5 3» означает «раз в 5 дней прибавить 3 секунды», а индикация «7:3» означает «раз в 7 дней отнять 3 секунды».
    Выход из режима настройки коррекции осуществляется нажатием на кнопку «Минуты» ок. 2 сек.
    Установите точное время по эталонным часам и сверьте показания через несколько дней. Чем длиннее этот проверочный период, тем точнее можно подстроить ход часов.
    Пересчитайте результат до минимальных целых значений. Согласно полученным результатам, введите в часы данные коррекции.
    Например, за 30 дней часы убежали вперёд на 12 секунд. Это соответствует 2 секундам в 5 дней. Именно эти значения коррекции нужно применить: «5:2», т.е. «раз в 5 дней отнять 2 секунды».

    Расчёт времени работы устройства на ионисторе

    В комментариях появились вопросы по времени работы от ионистора и я решил немного осветить эту тему в меру моих скромных познаний. Так же я добавил в файлы статью на тему, рекомендую.
    Формула рассчета времени работы устройства от ионистора
    Потребление Attiny2313 в режиме «Idle» составляет ок. 0,5 мА.
    По мере разрядки ионистора и снижения напряжения питания этот ток падает
    Посчитаем грубо, прикидочно. Внутреннее сопротивление R нашего ионистора = 30 Ом. Вообще у современных ионисторов оно редно бывает больше 50 Ом. Ток утечки IL примем за 0. Устройство работает до V1 = 1.8 Вольт, начальное напряжение V0 = 4.6 Вольт.
    Переводим все единицы в одноразмерные и считаем. Получается ок. 1830 секунд, те самые 30 минут и 40 минут на практике. Возможно и чуть больше, я дольше не ждал. Как я писал выше, потребление контроллера понижается с падением U питания. Плюс были приняты все меры по снижению энергопотребления, описанные в даташите Attiny2313.
    Наша Attiny2313 не умеет работать с кварцами ниже 0,9 МГц, а энергопотребление контроллеров очень зависит от частоты. Для сравнения контроллер Atmega8A с часовым кварцем 32 кГц в «Idle» должен работать от этого же ионистора ок. 7 суток. Ток потребления на такой низкой частоте очень сильно ниже (смотри потребление МК «Figure 28-14. Idle Supply Current vs. VCC» в даташите на стр. 242).
    Поставленная задача по бекапу в этой конструкции полностью решена. Это Simplex Clock — простые часы. Я хотел в этой конструкции 30 минут, я их получил. Следующий кит будет сложнее, на другом камне, по другой идеологии и все желающие смогут неделями смотреть на отключенные часы, тихо радуясь, что внутри они тикают.
    Чем скорее в лавке закончится первый часовой кит, тем скорее там появится второй.

    Файлы

    Вы можете получить прошивку не покупая кит. За файлом прошивки обращайтесь в комменты, если ваш рейтинг не менее 50.
    За исходниками на С обращайтесь в комменты, если ваш рейтинг не менее 300.
    — Несколько страниц из журнала «Электронные компоненты» №6 2008 с хорошей статьёй по ионисторам:  ▼ Rasschet-ionistorov-EK_2008_06_073-76.pdf 🕗 16/02/14 ⚖️ 857,71 Kb ⇣ 30
    — Автоматизированный расчет времени работы от ионистора в MS Excel:  ▼ Raschet-vremeni-raboty-na-ionistore.7z 🕗 16/02/14 ⚖️ 4,17 Kb ⇣ 31 (моё произведение)
    — Даташит LM8560:  ▼ LM8560-Digital-Alarm-Clock-Sanyo.7z 🕗 12/02/14 ⚖️ 178,63 Kb ⇣ 47
    — Свежий даташит ATtiny2313A:  ▼ ATtiny2313A-ATtiny4313.7z 🕗 12/02/14 ⚖️ 4,42 Mb ⇣ 31
    — Даташит на индикаторы:  ▼ CPD-15011A.7z 🕗 12/02/14 ⚖️ 407,46 Kb ⇣ 47
    — Опись комплектации кита:  ▼ bom-simplex-clock-30012014.7z 🕗 12/02/14 ⚖️ 60,15 Kb ⇣ 35

    Упомянутые источники

    Это варианты, которые быстро находит Гугль и которые мне не понравились по разным причинам.
    cxem.net/mc/mc190.php

    и многие другие.

    На посошок

    На очереди корпус из акрила с лазерным раскроем. Наш дизайнер Дмитрий в муках творчества.
    О результатах сообщу.
    Забирайте кит часов в датагорском магазине: Project-012 «Simplex Clock». Часы на микроконтроллере с бэкапом, коррекцией хода и дисплеем h=44мм. Набор для сборки
    Приятного всем творчества и больше свободного времени.
    Спасибо за внимание!

    Крошечный термометр на Attiny2313 (с печатной платой)

    “Термометр: меньше не бывает” так называется статья на сайте arv.radioliga.com. Схему, расположенную на указанной страничке, я видел давно, но вот интерес к ней у меня появился, когда у одного из сограждан форума с этим “маленьким” термометром возникли вопросы. Если быть более точным интерес у меня появился не столько к схеме, сколько к размерам термометра. У автора термометр собран на плате размерами 50*22 мм.
    Действительно ли меньше не бывает?

    На радиорынке я присмотрел трехразрядный семисегментник. Приобрел микроконтроллер Attiny2313 в SOIC корпусе, DS18B20, smd-резистор и smd-конденсатор. Нарисовал печатную плату, по печатной плате нарисовал схему, написал программу, залил в МК и вот, что получилось:

    Несколько слов схеме и о программе. Компактность не обошлась без жертв. В схеме отсутствуют токоограничивающие сопротивления, что есть не совсем хорошо. Для увеличения нагрузоспособности катоды индикатора подключены сразу к двум выводам МК.
    В программе ничего оригинального нет. Шаблон подготовлен с помощью мастера из CVAVR, остальные части взяты из моих часов с термометром. Я применил подправленную библиотеку DS18B20, а точнее это сумма двух библиотек из CVAVR для DS1820/DS18S20 и DS18B20, т.е. в термометре можно применять любой из вышеперечисленных датчиков. Если точнее, то не более 4-х датчиков в любой комбинации.
    Фузы: МК настроен на работу от внутреннего RC-генератора на 4 МГц. CKSEL = 0010, SUT = 10, все остальные = 1.

    Скачать проект для Proteus, прошивку, исходники и печатную плату – .

admin

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

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

Наверх