Часы

Решил я сколхозить себе на кухню часы, не покупать же. И вот, что из этого получилось:

Часы на основе всем известной DS1307, т.к. лучшего варианта реализации автономной работы при частых перебоях с питанием я не придумал, при том, что она у меня была. В целях повышения яркости применил статическую индикацию на сдвиговых регистрах 74HC164. Контроллер — Attiny2313

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

Но во время отладки всё-таки коротнуло, и главное где — под соик-корпусом регистра! Пришлось перерезать дорожки, чтоб локализовать место, потом соединять их соплями припоя. Одна дорожка не выдержала, оттуда и корявая перемычка слева.
В общем вот:



Мягкую часть написал на ассемблере. I2C реализовал полностью программно.

Что часы умеют: показывать время :) Но пока их нельзя подвести, т.к. у меня закончились тактовые кнопки.
Что будут уметь: синхронизироваться с компом по UART, регулировать яркость, показывать дату, может что-нибудь еще, на что фантазии хватит, так как даже с учетом отладочных подпрограмм я не истратил и четверти флэша, и половины свободных ног.
  • +5
  • 24 марта 2011, 21:01
  • ploop

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

RSS свернуть / развернуть
очень чётко. пайка супер=) Молодец!
0
Это не супер… Была-бы нормальная плата, я бы постарался.
0
я просто тоже задумываюсь чё нить замутить на 1307=)
0
Отличная штука! Я с ней впервые дело имел.
0
Даа… Пайка очень аккуратная.
Недавно тоже захотелось часы солхозить, в качестве индикаторов взял КИПЦ009 (девать некуда), поставил 4 штуки сдвоенных, в итоге получились точные часы с секундами и милисекундами. Зачем? Не знаю, люблю я когда секунды тикают :)
0
*КИПЦ09
0
… и отладочную плату сам собирал?
0
Какую отладочную? Что в блоге писал? Не, я её не стал собирать. Текстолит жалко :)
Отладочная пригодится только для раскуривания какого-нибудь неизвестного чипа, но у меня таковых пока нет.
0
… я про ту маленькую платку на первом фото
0
… или это программатор
0
программатор это =) у знакомого такое же, тока не самопал, от мастер кит
0
хотя нет… не точно такой же, но подобный. BM9010 кажется (не сочтите за рекламу)
0
Гыгыгы, это проттосс, плата моя, сам разводил. Вот он и переходник USB-UART на FT232

+1
Молодец =) у самого лежит модуль со всем обвязом для данной микрухи, только руки до нее пока не доходят =( курсач зло… Кстати, всегда интересовал такой вопрос: Подсчет времени реализован программно и идет синхронизация с микрухой каждый n-ны промежуток времени или идет постоянный опрос микрухи без программного таймера?
0
Микросхема считает время, дату, и день недели с учётом всех нюансов (сколько дней в месяце и т.д.), и позволяет забрать данные в упакованном десятичном формате, т.е. даже делить числа на цыфры не надо.

Контроллер, по сути, только работает с I2C (программно) и пихает данные в регистры.
0
дак это то понятно, меня интересует алгоритм работы. Ты есть постоянно идет обмен с часами или только через определенные промежутки времени, а время между промежутками отсчитывается контролером?
0
Конкретно сейчас опрашивается тупо в цикле:
start: 

rcall receive_iic  ; читаем буфер DS-ки в буфер МК    
rcall decode_time  ; распаковываем на отдельные цифры
rcall decoder      ; переводим их в биты сегментов

led_off            ; гасим дисплей, чтоб небыло смазывания (регистры без защёлки)
rcall print        ; пинаем биты в регистры
rcall big_delay    ; задержка, чтоб яркость уменьшить, пока нет ШИМа
led_on             ; включаем дисплей

rjmp start         ; и зацикливаем


Вообще читать чаще, чем раз в секунду (ну несколько раз) смысла нет.
0
Вот это меня и интересовало! Огромное спасибо =)
0
Думаю, тебе еще прийдется перемычки делать (судя по плате), т.к. самый класный способ опроса ds1307 — во внешнем прерывании от нее же.
0
  • avatar
  • psv
  • 25 марта 2011, 10:47
Угу, я забыл, что у неё есть нога с тактом. Учту в следующих разработках. А тут хватит перемычек :)
-1
Добавил синхронизацию с компом. Выглядит это так: подцепляем переходник USB-UART и пишем в консоль команду:
date +set%y%m%d0%w%H%M%S > /dev/ttyUSB0

Она шлёт по UART строку вида 'set11032606101115'
'set' — значит будем устанавливать время, дальше по две цифры: год, месяц, число, день недели, часы, минуты, секунды. Собственно, всё.

Осталось продумать алгоритм, т.к. если к разъёму ничего не подключено, туда может сыпаться мусор.
0
С синхронизацией всё нормально, весь мусор фильтруется по 'set'.
Запаял кнопки. Теперь показывает дату, регулируется яркость индикатора. Настройки хранятся в EEPROM.

Осталось сделать ручную установку времени и режим без показа секунд: крайние левый и правый индикатор тушится, а в середине часы и минуты с мигающей точкой.
0
Мож лучше с мигающим дефисом? Тож не двоеточие конечно, но хоть заметнее.
0
Тогда несимметрично получится. Хотя надо попробовать…
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.