Пользователь
0,0
рейтинг
9 марта 2012 в 14:15

Бинарные часы своими руками (Mega32, DS1307) из песочницы

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




Схема






RTC



Проблему сохранения текущих настроек прекрасно решают часы реального времени (RTC). Мой выбор пал на микросхему DS1307.

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

Сердце устройства



Выбор микроконтроллера Mega32a был продиктован следующими факторами:
• Достаточное количество портов, чтобы не использовать динамическую индикацию, которую я не люблю, в первую очередь из-за того, что она раздражает зрение (мигание с высокой частотой в любом случае неестественно). С ней я познакомился, играясь с микроконтроллерами PIC на языке Proton PICBasic, и если есть возможность не использовать динамическую индикацию, я предпочту так и сделать.
• Относительно низкая стоимость в 130 рублей (Mega16a, например, стоит столько же), а со скидкой так вообще 104 рубля.
• Четкий QPF-44 корпус, с удобным расположением выводов

Порт «А» отображает секунды, порт «В» — минуты и порт «С» — часы. Очень удобно то, что можно присвоить портам значения времени, принятые из DS1307, без каких – либо изменений. К порту «D» подключены кнопки (пины 3 – 7), пины 0 и 1 работают как линия тактирования (SCL) и линия последовательной передачи данных (SDA) соответственно. Микросхема RTC настроена так, что выдает на своей седьмой ноге импульсы с частотой 1 герц. Эта нога подключена к 3-му пину порта «D». Сам этот порт сконфигурирован на вход, и на всякий случай включены внутренние подтяжки к плюсу питания, продублированные SMD резисторами снаружи. Такие действия в полной мере защищают от всяких неожиданностей.

Светодиоды




Светодиоды я выбрал в матовом корпусе с низкой светимостью. Сначала были опробованы яркие диоды в прозрачном корпусе, но даже при токе в 3 мА они слишком ярко и неравномерно светили, что опять таки вызывало дискомфорт. При падении напряжения на диоде в 2 вольта, напряжении питания 5 вольт и резисторе 1 кОм, значение тока, текущего через диод будет равно (5 – 2)/1000 = 3 мA. Это значение было подобрано эмпирически, а яркость свечения отлично подходит для полутемной комнаты. Если планируется устанавливать часы под прямой солнечный свет, то номинал резисторов следует уменьшить, вплоть до 200 ом, для более яркого свечения (спасибо кэп).

Кнопки



На отдельной плате с кнопками, предусмотрен «предохранитель» (он убережет нас от случайного выстрела в голову), в виде еще одной кнопки Bt6. Время можно редактировать, предварительно зажав ее.


Софт


Код написан в среде CodeVisionAvr.
Программа начинается с того, что мы настраиваем периферию микроконтроллера.
• Конфигурируем порты (A,B,C – выход, D – вход)
• На всякий случай предусмотрена пауза 300 мс, чтобы DS1307 успела «очухаться»
• Инициализируем «квадратную шину»
• Настраиваем микросхему RTC так, чтобы она выдавала прямоугольные импульсы каждую секунду на выводе SQW/OUT
• Проверяем, нажата ли кнопка CLR. Если да, то сбрасываем все значения в 0
• Разрешаем глобальные прерывания
Да, пару слов про них. Мы используем внешние прерывания INT0 на PD2 по спаду, т.е. каждую секунду программа будет уходить в обработчик прерываний, в котором мы считываем значения времени из DS1307 и выводим их на светодиодные индикаторы.
• Уходим в бесконечный цикл, где опрашиваем кнопки
• Если кнопка нажата, прибавляем (отнимаем) час (минуту) и посылаем новое значение по I2C
• Попутно проверяем, вписываются ли новые значения времени в 24-х часовой и 60-ти минутный диапазоны.

Печатная плата



Плата выполнена по Великой Космической Лазерно – Утюжной Технологии на одностороннем текстолите. При изготовлении верхней платы, использовалась обычная бумага (неудачный эксперимент).

Существует много вариаций этой технологии. На мой взгляд, вот этот самый лучший:
1. Выпиливаем нужного размера кусок текстолита.
2. Шкурим торцы, избавляясь от вредных заусенцев.
3. Смазываем будущую плату чистящим порошком или зубной пастой и жесткой стороной губки драим ее до блеска.
4. Окунаем наш кусок на пару десятков секунд в слабый раствор теплого хлорного железа, до появления равномерной, матовой, бардово-коричневой поверхности. При вытаскивании из раствора, жидкость должна полностью смачивать поверхность.
5. Смываем каку, аккуратно сушим, не прикасаясь к поверхности пальцами, или чем другим жирным. Сразу кладем на чистую бумагу медью вниз, чтобы избежать попадания пыли или волос.
6. Распечатываем отзеркаленный рисунок на тонкой(!) глянцевой бумаге, можно вырезать из журнала, например. Не прикасаемся к рисунку руками. Аккуратно вырезаем, кладем рисунком вниз.
7. Прикладываем к подготовленному куску текстолита, проглаживаем через 1-2 слоя чистой бумаги, выставив утюг на максимальную температуру. Секунд 10 должно быть достаточно, ибо если передержать, дорожки расплющатся и затекут друг на друга. Тонер должен полностью прилипнуть к меди.
8. Отмачиваем под струей теплой воды, можно оставить в воде на 10 минут. Аккуратно отдираем, соскребаем бумагу. Мне в этом помогает старая зубная щетка. Удаляем оставшиеся кусочки бумаги иголкой. Тонер остается на текстолите.
9. Нагреваем на водяной бане крепкий раствор хлорного железа, бросаем туда нашу плату и бултыхаем в течении нескольких минут (по правилу Вант-Гоффа, при увеличении температуры на 10 градусов, скорость реакции увеличивается в 2 раза. Медь исчезает прямо на глазах. Можно и не греть, но ждать придется дольше.
10. Как только вся ненужная медь исчезла, выключаем газ, вытаскиваем (например пинцетом) плату, пытаемся отмыть плиту и пальцы от хлорного железа. Смываем его с платы проточной водой.
11. Берем ацетон (жидкость для снятия лака) и оттираем тонер. Можно попробовать соскрести его шкуркой или губкой.
12. Сверлим отверстия.
13. Лудим. В качестве флюса использую ЛТИ, и вам советую, однако после лужения и пайки этот флюс нужно обязательно смыть (тем же ацетоном, а лучше смесью спирто-бензин 1:1), т.к. ЛТИшка обладает некоторой проводимостью.
Все работы обязательно проводить в проветриваемом помещении, в процессе
выделяется много вредных паров.

Платы соединяются между собой PBS и PLD разъемов. Первые соединяются с верхней платой при помощи тонкого монтажного провода, его можно выковырять, например, из старого LPT кабеля или переходника.

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


Печатные платы в формате SprintLayout5.0 прилагаются. На фотографиях есть пару косяков, но они уже исправлены в приложенных файлах.

Прошивка микроконтроллера



Для этого дела был собран программатор USBasp, который можно увидеть на фото сверху. Довольно приятная штука, прост в использовании и можно всегода носить его с собой в кармане(надеюсь, никто так делать не станет). Для прошивки mega32 придется установить джампер «Slow SCK».
Фьюзы:
• Low fuse = 0xC4
• High fuse = 0xD9
Наш микроконтроллер тактируется от внутреннего RC генератора с частотой 8 МГц. Пришлось отключить JTAG интерфейс на PortC, иначе некоторые светодиоды не будут светиться.
На плате предусмотрен ISP10 разъем, для быстрой прошивки/отладки.

Лицевая панель



Выполнена из алюминиевой пластины, шириной 40 мм и толщиной 1,5 мм. В ней просверлены 18 отверстий диаметром 5 мм, и 4 отверстия диаметром 3 мм для крепления стоек.

Сначала был распечатан шаблон и наклеен на пластину. Далее, были просверлены пилотные отверстия сверлом 1,5 мм, после чего уже сверлами нужных диаметров были просверлены основные отверстия.

В завершении, пластина была загнута, ошкурена мелкой шкуркой и отполирована пастой ГОИ.
Шаблон прилагается к приложенным файлам в виде файла layout5.0

Красный светодиод в левом верхнем углу



Повторяет импульсы, генерируемые DS1307 на 7-ой ноге, т.е. мигает каждую сегунду. Маленький p-канальный MOSFET транзистор работает в ключевом режиме, открываясь и закрываясь в такт импульсам. Сначала я хотел сделать фоновую подсветку (как Ambilight), для чего был слеплен КМОП инвертор на комплиментарной паре транзисторов(чтоб уж наверняка). Но мне не понравилось. Для одного светодиодика вполне достаточно одного транзистора, можно использовать даже pnp типа bc857. Я использовал бескорпусные mosfet irlml6402 или irlml6302.

Файлы



Исходники, hex-файл, печатные платы, схемы, схема в proteus и фьюзы заключены вот в эту картинку в виде архива. Я не доверяю файлохранилищам, своего сервера у меня пока нет, поэтому, на мой дилетантский взгляд, самым надежным местом для хранения будет Хабр. Пользователи windows могут добраться до файлов открыв сохраненную картинку с помощью WinRar.
Да, вот эта картинка.


Видео





Заключение



Источник питания можно использовать любой, способный выдать 5 вольт при токе в 70 мА. USB-порт вполне для этого подойдет. Главное, чтобы питание было «чистым», и не превышало 5 вольт. Питая часы от DC-DC преобразователя из на микросхеме mc34063 с уровнем помех ~50 мВ, я заметил глюки при установке времени. Сейчас устройство питается от свича, висящего рядом. Он выдает строго 5 вольт. По хорошему, нужно еще сделать защиту от дурака в виде диода, и какой-нибудь линейный стабилизатор на 3.3 — 5 вольт.
Отсутствие в часах функций будильника и отображения даты вполне обосновано: и то и другое присутствует в телефоне, а значит, пользоваться ими в бинарных часах с большой долей вероятности никто не будет (спасибо дядюшке Оккаму за этот вывод).

Использованные материалы



Лебедев М. Б. CodeVisionAVR: пособие для начинающих
avrdevices.ru/chasi-realynogo-vremeni-ds1307
@zero_trigger
карма
14,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

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

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

Комментарии (49)

  • 0
    Правильно ли я понял, что при отключении питания часы перестают идти, а просто сохраняют время на момент отключения?
    • 0
      Там батарейка питает RTС. Без внешнего источника питания система будет довольно точно отсчитывать время примерно до 10 лет.
      • 0
        В статье написано "… может сохранять время и дату в течении 10 лет." что не значит отсчитывать. Кроме того в описании по ссылке читаем:
        «Clock Halt – управляет часами. Когда бит установлен то часы стоят. Чтобы запустить ход часов необходимо записать в этот бит 0. После подключения батареи резервного питания, этот бит уставлен и часы не считают время! Об этом нужно помнить.».
        Поэтому хотелось бы всё-таки уточнить.
        • +2
          Один раз установили бит и на всю жизнь. Ровно такие же часы стоят в компьютере: при отключении электричества часы продолжают тикать.
    • 0
      Спасибо за замечание.
  • +1
    Все в порядке, часы продолжают тикать. Внес исправления в топик. Прошу прощения за неточность.
  • +1
    Тогда годный девайс и смотрится хорошо.
    • 0
      Правда, конечно, узнать по нему время, особенно утром, будет вряд-ли возможно).
      • 0
        Да нет. Очень быстро привыкаешь — да и довольно наглядно они показывают.
  • +10
    Я не солгу, если скажу, что всех интересует метода впердячивания архива в картинку.
    • +2
      www.netlore.ru/rarjpeg
      Работает и с *.GIF
      • +3
        Всё, хана хабрасторажу, теперь завалят картинками-архивами.
        • +2
          Я не солгу, если скажу, что такие картинки на всяких форчанах уже лет 7 точно массово используются и все, кто об этом хотел узнать, давно узнал.
          • +3
            Вы не поверите, но некоторые люди не сидят на Дваче и Форчане, а также им подобным.
            Искренне ваш, кэп.
            • 0
              Охотно поверю, я тоже не сижу.
        • +1
          думаю, не сложно будет добавить функцию обнаружения указателя архива в загружаемых файлах…
      • 0
        Вы по ходу дела netlore.ru хабраэффектом накрыли, открывается минут 5 уже безрезультатно
    • +1
      Тоже улыбнуло — очень круто! )
    • 0
      lurkmore.to/Rarjpeg
      (не потому что лурк — там просто хорошее описание)
    • 0
      copy /b a.jpg+b.rar c.jpg
  • +4
    zero_trigger, вы молодец! Сделано красиво, аккуратно и с любовью к мелочам.
    Скажите, после некоторой тренеровки удается с одного взгляда определять время по таким часам, или все равно нужно тупить полминуты, переводя в уме bin->dec?
    • +1
      За неделю можно научиться определять секунд за 5-15. Честно говоря, я немного тормоз, поэтому наверняка у многих получится быстрее. Собственно, создание часов, таки преследовало цель научиться быстро понимать бин =). Спасибо)
      • +4
        Тогда следующая ступень хардкора — 32 светодиода, показывающие POSIX-time. Заодно и вопрос с датой решается =)
        • +12
          Если научиться с утра понимать такое время — можно начинать взглядом сгибать ложки :)
        • 0
          Тогда уж 64 бита ставить:

          ru.wikipedia.org/wiki/Проблема_2038_года
  • 0
    Толково придумано.
    Всё никак не мог(у) найти наручные бинарные часы по адекватной цене — что у нас, что на ебеях под этим названием в 95% случаев скрывается нечто странное, например часы отображающие текущее время количеством горящих светодиодов и прочая шелуха.
    • 0
      При большом желании можно запихнуть все это дело в наручные часы, используя smd светодиоды. Тоже на двух платах, выкинуть все лишнее, подкорректировать код, убрать секунды, программно или аппаратно выключать светики, чтобы не кушали много.
    • 0
      www.dealextreme.com/p/led-binary-wrist-watch-with-date-display-1-cr2032-41235 у меня такие, 5 баксов, по-моему адекватная цена.
  • +4
    Замечательно собранный агрегат! Очень аккуратный и красивый результат.
    (Муравьи на видео порадовали)
  • +2
    Charlieplexing сюда так и просится. Хватило бы и тини 2313, на первый взгляд.
    • +1
      Можно было бы попробовать и часы с пауэрфэйлом в ней же организовать. Ключевые слова: батарейка, диод, BODLEVEL, watchdog timer.
  • +1
    Очень качественное исполнение. Впечатлило :)
    Никогда не понимал, какой толк от них…
    • +13
      "… взять вопрос «Зачем?». Когда я говорю ей: «Поехали ко мне», а она мне: «Зачем?»..."
      А вы ей:«Ты когда нибудь бинарные часы видела?», она — «Нет!». «Поехали покажу!»)
      • 0
        Вместо «Нет» скорей всего будет «А что это?» :)
  • +1
    Молодец автор.
  • +1
    Добротно сделано. *Иду искать свою коробку со светодиодами* =)
    Кстати, при скроллинге вверх-вниз первого снизу фото появляется интересный зрительный эффект. Или это только у меня?
  • 0
    Не могу понять, а как панелька с кнопками закреплена?
    • 0
      Она насажена на загнутые штырьки разъема и припаяна.
  • +1
    Корпус качественно сделан, вроде мелочь — а внешний вид гораздо лучше.

    А сколько времени у вас уходит на считывание времени (тавтология какая-то) с этих часов?
  • +1
    Фотографии отличные получились.
  • +1
    обои в кадре — кайф.
  • +1
    Спасибо огромное, статься очень интересная, все выполнено добротно и качественно. Хотя для меня, человека не сильно разбирающегося в электронике немного непонятны некоторые вещи. Но все равно благодарю, буду разбираться, читать, узнавать.
  • +1
    За лицевую панель отдельный жирный плюс!
    Правда смотрелось бы лучше, если взять болты с потайной головкой, но без прорези для отвёртки, т.е. с гладкой шляпкой.
  • +1
    ура! плата на хабре, при взгляде на которую не тошнит.
  • +1
    Делал мастер своего дела, это видно. Плата простая, но аккуратная.

    Правда и печали место нашлось при прочтении: раньше лепили аоны, орионы, спектрумы, спутниковое тв и т.п. — то что действительно было реально нужно и даже многим людям. Сейчас все чуть иначе.
    • 0
      Все в переди, это проба пера, кода и паяльника)
  • 0
    Поправьте меня, если я ошибаюсь, но разве при травле не выделяется тепло? А если оно выделяется, то не лучше ли его отводить? То есть нагреть погоряче и на балкон.
  • 0
    Падение на диоде всегда считается 0.7В, т.о. у вас 4.3мА на диод. Уменьшать резисторы до 200ом не советую, на каждом диоде будет уже по 20мА, а суммарный ток на все 18 штук 360мА, по даташиту ток на все порты в атмеге должен быть меньше 200мА (стр. 298).
  • 0
    Проект интересный, только вот достаточно дорогую мегу32 под такой проект использовать — кощунство, слишком большой у нее потенциал, который в этом проекте не нужен. Не очень хорошо, что каждый светодиод подключается к своей ноге, лучше сделать матричную систему, тогда бы потребовалось всего 8 портов. Для таких проектов Attiny2313 — самое то.

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