Страница 1 из 148

Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Добавлено: Ср ноя 04, 2009 11:09:05
Danko
Часы - календарь - будильник - термометр
ATMega8 / ATmega88
Исходный текст на Си (не на Васике, не на Ассемблере, не на Паскале, не на ... только Си)
Изображение
Небольшие пояснения:
последовательность индикации: время/дата/температура,
время каждой индикации устанавливается самостоятельно (время 5-50 сек, дата 0-50 сек, температура 0-25 сек),
автоматический переход на летнее/зимнее время (последнее воскресенье марта/октября)

последовательность установки по нажатию кнопки set:
часы, минуты, год (d1), месяц (d2), день (d3), время индикации времени (t1), время индикации даты (t2), время индикации температуры (t3), возвращение в режим индикации времени

если часы спешат или отстают, то по нажатии кнопки "К" можно перейти в меню выбора суточной корректировки хода часов. Кнопками "+" и "-" выбирается нужное количество секунд (плюс/минус 60 сек/сутки).

если в режиме установок не нажимать кнопки более 1 мин часы перейдут в режим индикации времени.

если в режиме индикации секунд не нажимать кнопки более 5 мин часы перейдут в режим индикации времени.

при установке 0 сек. для индикации даты и 0 сек. для индикации температуры соответствующая индикация отключается т.е. можно сделать просто часы и/или с календарем и/или с термометром.

в режиме индикации времени кнопками "+" и "-" можно вызвать на 5 сек. индикацию температуры (первого и второго датчиков соответственно)

Будильники:
два светодиода - индикация активности будильника(ов) т.е. если будильник установлен и включен.
звук - один из двух вариантов.

Ряд настроек доступ к которым осуществляется удержанием одной из кнопок при включении питания:
Выбор типа индикатора делается удержанием одной из четырех кнопок ("+", "-", "сек", "уст").
Если быть более точным то не выбор индикатора, а выбор активного 0 или 1 для зажигания сегмента и выбор активного 0 или 1 для зажигания разряда.
"+" - сегмент "0", разряд "0"
"-" - сегмент "0", разряд "1"
"сек" - сегмент "1", разряд "0"
"уст" - сегмент "1", разряд "1"
----------

Изменение доп.настроек.
Вход в настройки удержанием пятой кнопки (кнопки "К") при включении питания.

Выбор ячейки производится кнопками "+" и "-", изменение состояния ячейки кнопкой "Уст". При нажатии кнопки "Уст" сразу же производится запись в EEPROM.
Выход из меню либо сброс МК, либо кнопка "Сек".

номера ячеек EEPROM и их значение (на индикаторе номер ячейка Е2 - Е8 и ее значение):
2 - индикация незначащего нуля в десятках часов
3 - отбрасывание десятых долей при индикации температуры и добавление символа "С"
4 - включение плавной смены показаний
5 - регулятор яркости (фоторезистор)
6 - работа с двумя видами точек
7 - "пятый" разряд (знак температуры)
8 - режим индикации состояния ADC (0 - кнопки, 1 - фоторезистор, F - откл.)
9 - автоперевод стрелок лето/зима (0 - отключено, 1 - включено т.е. по умолчанию включено)
а - максимальный уровень яркости (от 40 до 200) индикация в десятках т.е. на индикаторе от 4 до 20

* точки-разделители часов и минут подключаются вместо точки первого разряда,
а точка как разделитель целой и дробной части темп. - на своем месте т.е. во втором разряде

* пятый разряд (знак температуры), расположенный слева от первого - это два сегмента
горизонтальный и вертикальный которые образуют знак "минус" и знак "плюс".
Вместо точки 3-го разряда подключается горизонтальный сегмент, а вместо точки 4-го - вертикальный.

для активизация записать 0.
Почему ноль? Спросите у Atmel почему установленный фуз - "0", а не установленный - "1".

----------
Функция очистки памяти DS1307 и установки "заводских" настроек:
при первом включении часов.
время индикации 30 сек, 5 сек, 5 сек (время, дата, темп.),
будильники 1 и 2 - OFF

раннее было: Активизируется удержанием кнопки AL1 (буд1) при включении питания.

P.S.
Fuse bit's (ДИНАМИКА)
Mega8 - (Int RC = 4 MHz) SKSEL3..0 = 0011, SUT1..0 = 10, все остальные = 1
Mega88 - (Int RC = 8 MHz) SKSEL3..0 = 0010, SUT1..0 = 10, все остальные = 1
Fuse bit's (СТАТИКА)
Mega8 - (Int RC = 8 MHz) SKSEL3..0 = 0100, SUT1..0 = 10, все остальные = 1
Mega88 - (Int RC = 8 MHz) SKSEL3..0 = 0010, SUT1..0 = 10, все остальные = 1

прошивка в папке hex
доп.информация в папке plus

* CVAVR не ниже версии 2.0
* Proteus не ниже версии 7.7


Еще несколько моих проектов:

часы на светодиодных 7-ми сегментниках (12 разрядов) Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2)

часы на LCD 2*16 и на Mega8/88 Часы-термометр-будильник (Mega8+DS1307+DS18B20+LCD16*2)
и их улучшенная версия на Mega168 Часы термометр-будильник Mega168_DS1307(M41T56)_DS18x20_LCD16x2

Добавлено: Ср ноя 04, 2009 12:11:23
Pavel_1978
проект в шпротеусе не запускается, у меня 7.4 SP3

выложи схему просто в .jpg

Добавлено: Ср ноя 04, 2009 13:09:09
Ilnur
Danko,если тебе не сложно давай вместо индикатора и пользуй диплей 16х2.

Добавлено: Ср ноя 04, 2009 13:11:47
Ilnur
Мне кажется на дисплее 16х2 смотется будет красивее

Добавлено: Ср ноя 04, 2009 13:37:53
Pavel_1978
Ilnur писал(а):Мне кажется на дисплее 16х2 смотется будет красивее


зачем????? конструкция самодостаточная!!!

Добавлено: Ср ноя 04, 2009 13:45:31
larik
дисплей 16*2 будет маленький по сравнению с большими светодиодными индикаторами,висящими на стене

Добавлено: Ср ноя 04, 2009 14:37:13
Danko
Моя печатка под smd.

Размеры 93*32 мм. На плате не разведены будильник и фоторезистор.

ПЕЧАТКА:
Изображение

ФОТО в сборе:
Изображение

Добавлено: Вт ноя 10, 2009 16:22:27
Danko
Печатные платы и фото часов от Gordon Shumway
Gordon_Shumway_28-12-2010.zip
(255.6 КБ) 3142 скачивания


Изображение
Изображение

Добавлено: Вт ноя 10, 2009 20:17:39
krolaka
хмм хотя я давно уже не стардаю фигней но часы понравились оригинально зделано :) насколько они точно ходят? :)

если посчитать что детали брать у нас на рынке то выходить очень дорого atmega8 20 грн, DS1307 22 грн, DS18B20 27 грн индикаторы светодеодные 40 грн итого 109 грн не считаю мелочевки.

Добавлено: Ср ноя 11, 2009 04:18:45
headshotbacs
Не знаю, у нас в городе так же точно спекулянты навернули по цене. Вот иногда выбает езжу на радиорынок "Маяк" (тот что в Донецке) так там Мега стоит около 10-11 грн, датчик ДС18Б20 около 7 грн, индикаторы около 10-15 грн (смотря какие). Но с нашими ценами так и получается что дешевле было-бы купить готовые. Но это хобби и на него денег жалеть нельзя.

Добавлено: Ср ноя 11, 2009 09:06:30
Freiwind
krolaka писал(а):если посчитать что детали брать у нас на рынке то выходить очень дорого atmega8 20 грн, DS1307 22 грн, DS18B20 27 грн индикаторы светодеодные 40 грн итого 109 грн не считаю мелочевки.

Мне то же самое обошлось примерно в 12$ с индикаторами 2,3" (56мм)

Добавлено: Ср ноя 11, 2009 09:24:58
GP1
Понравилась конструкция наверное буду повторять.
Но у мняу возникло подозрение в правомерности подключения индикатора к +12В (я думаю их в машину забульбенить) ведь при неактивном уровне (1) все 12В будут прикладываться к выходу мк через резистивный делитель, я думаю надо добавить еще по транзистору. Если интересно решал аналогичную задачу, для своего прибамбаса, здесь
http://radiokot.ru/forum/viewtopic.php?p=318446#318446

Добавлено: Ср ноя 11, 2009 15:06:16
Danko
krolaka писал(а):хмм хотя я давно уже не стардаю фигней но часы понравились оригинально зделано :) насколько они точно ходят? :) ....
Точность, как известно понятие относительное :idea:
Есть рекомендации от производителя по подключению кварца.
В моих часах есть корректировка суточного хода часов т.е. в 00:00 либо добавляется либо вычитается установленное кол-во секунд (от 0 до 60), как в старых наручных часах Электроника-5, только точность установки +- 1 сек.
В моих домашних часах индикаторы небольшие и никаких транзисторных ключей нет. По сему на вопрос про 12В ответить не могу. :(

Добавлено: Ср ноя 11, 2009 15:24:16
headshotbacs
Только что скачал протэус, и появился мгновенно вопрос:
Danko! а почему мигает точка когда часы показывают дату???

Добавлено: Ср ноя 11, 2009 15:33:30
Danko
headshotbacs писал(а):Только что скачал протэус, и появился мгновенно вопрос:
Danko! а почему мигает точка когда часы показывают дату???

В часах точка 1 Гц
в дате точка 4 Гц.
Можно точку в дате совсем убрать. Пока окончательно не решил, что лучше, и как лучше сделать.
Есть идеи? буду рад!

Добавлено: Ср ноя 11, 2009 15:50:38
Pavel_1978
Danko писал(а):В часах точка 1 Гц
в дате точка 4 Гц.
Можно точку в дате совсем убрать. Пока окончательно не решил, что лучше, и как лучше сделать.
Есть идеи? буду рад!


а может между парами индикаторов установить два светодиода - чтобы они мигали в режиме отображения часов - 18:23, а для даты использовать точку индикатора 12.11
правда прийдется использовать свободную ногу контроллера....

Добавлено: Ср ноя 11, 2009 15:58:13
Danko
Есть шесть свободных ног, а с програмной стороны проблем не будет.

Добавлено: Чт ноя 12, 2009 22:27:17
amirus
Уважаемый Dankо, не могли бы вы выложить еще версию прошивки с общим катодом?
Заранее Вам благодарен.

Добавлено: Пт ноя 13, 2009 08:13:26
headshotbacs
amirus писал(а):Уважаемый Dankо, не могли бы вы выложить еще версию прошивки с общим катодом?
Заранее Вам благодарен.


Прошивка и так с общим катодом. Использованная в схеме ULN2803 аппаратно делает "Общий анод". Просто убери ее из схемы и все.
И да прибудет с тобой великий и могучий общий катод 8)

Поехали дальше:

Danko писал(а):Можно точку в дате совсем убрать. Пока окончательно не решил, что лучше, и как лучше сделать.
Есть идеи? буду рад!


Вот такое предложение:
1. При показе температуры убрать десятые и добавить букву С (например чтоб они показывали "20°С" или "-5°С").
2. Убрать мигание точки разделителя в режиме показа даты.
3. Частоту точки разделителя в режиме показа времени увеличить примерно до 3 Гц.

Думаю тогда будет более понятней что именно показывают часы.

И еще чтоб убить двух зайцев прицепить на свободную ногу (только без изменения исходной схемы) контроллера еще один светодиод.
Pavel_1978 писал(а):а может между парами индикаторов установить два светодиода - чтобы они мигали в режиме отображения часов - 18:23, а для даты использовать точку индикатора 12.11
правда прийдется использовать свободную ногу контроллера....


Т.е. те люди кто повторял конструкцию которая описывалась в ветке Attiny2313+DS1307+DS18B20 и у которых изначально точка была одна (потому что многие использовали точку от семисегментного индикатора а не добавляли отдельный светодиод) просто перепрошили МК. А те кто желает чтоб точек было две, просто добавили бы еще одну (прицепив на свободную ногу) по желанию и при этом прошивка бы осталась таже.
Danko что скажете?

P.S. Выкладываю печатки часов (чтоб были и в этой ветке)

Добавлено: Пт ноя 13, 2009 12:16:28
Danko
headshotbacs, спасибо за участие в проекте. :beer:
Про индикацию точки:
1. все выполнимо (ресурсов достаточно)
2. варианты выбора подключения точки сделать програмно (несколько разных прошивок), джампер (перемычка между свободными ножками).
3. выбор индикации точности градусов аналогично пункту 2.

Последнее: переход на летнее/зимнее время будет переписан т.к. работает он только в идеальных условиях т.е. питание подано часы идут. Если в день перехода (перевода стрелок) питание будет отключено, то условия перевода стрелок не настанут и часы не переведутся.