Обсуждаем контроллеры компании Atmel.
Ответить

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

Ср ноя 04, 2009 11:09:05

Часы - календарь - будильник - термометр
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
Вложения
Clock-Term-Calendar-Alarm_LED_2011-08-11.zip
ДИНАМИКА: Исходники (CVAVR) + прошивка (hex) + проект в Proteus 7.7SP2 (все для m8 и m88)
(174.79 KiB) Скачиваний: 7722
Clock-Term-Calendar-Alarm_LED_2011-03-01_static_595.zip
СТАТИКА: Исходники (CVAVR) + прошивка (hex) + проект в Proteus 7.7SP2 (все для m8 и m88)
(179.95 KiB) Скачиваний: 5356
Shema_Clock-Term-Calendar-Alarm_4LED-Big.zip
схема (GIF + sPlan 7.0) Динамика и Статика
(169.65 KiB) Скачиваний: 9131
Nimnul_and_Headshotbacs.zip
печатная плата (авторы Nimnul и Headshotbacs)
(33.96 KiB) Скачиваний: 5967
YuraTV.zip
печатная плата (автор YuraTV)
(187.71 KiB) Скачиваний: 5936
Последний раз редактировалось Danko Пн дек 19, 2011 18:28:51, всего редактировалось 57 раз(а).

Ср ноя 04, 2009 12:11:23

проект в шпротеусе не запускается, у меня 7.4 SP3

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

Ср ноя 04, 2009 13:09:09

Danko,если тебе не сложно давай вместо индикатора и пользуй диплей 16х2.

Ср ноя 04, 2009 13:11:47

Мне кажется на дисплее 16х2 смотется будет красивее

Ср ноя 04, 2009 13:37:53

Ilnur писал(а):Мне кажется на дисплее 16х2 смотется будет красивее


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

Ср ноя 04, 2009 13:45:31

дисплей 16*2 будет маленький по сравнению с большими светодиодными индикаторами,висящими на стене

Ср ноя 04, 2009 14:37:13

Моя печатка под smd.

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

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

ФОТО в сборе:
Изображение
Вложения
photo_m8_smd_1.jpg
(133.81 KiB) Скачиваний: 86857
photo_m8_smd.jpg
(36.32 KiB) Скачиваний: 85889
ПП_m8_smd.zip
печатка без будильника и без фоторезистора
(19.75 KiB) Скачиваний: 2210
Последний раз редактировалось Danko Ср дек 22, 2010 16:16:36, всего редактировалось 3 раз(а).

Вт ноя 10, 2009 16:22:27

Печатные платы и фото часов от Gordon Shumway
Gordon_Shumway_28-12-2010.zip
(255.6 KiB) Скачиваний: 2285


Изображение
Изображение
Вложения
photo_2.jpg
(97.46 KiB) Скачиваний: 85203
photo_1.jpg
(58.66 KiB) Скачиваний: 85817
Последний раз редактировалось Danko Вт дек 28, 2010 17:49:07, всего редактировалось 2 раз(а).

Вт ноя 10, 2009 20:17:39

хмм хотя я давно уже не стардаю фигней но часы понравились оригинально зделано :) насколько они точно ходят? :)

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

Ср ноя 11, 2009 04:18:45

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

Ср ноя 11, 2009 09:06:30

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

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

Ср ноя 11, 2009 09:24:58

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

Ср ноя 11, 2009 15:06:16

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

Ср ноя 11, 2009 15:24:16

Только что скачал протэус, и появился мгновенно вопрос:
Danko! а почему мигает точка когда часы показывают дату???

Ср ноя 11, 2009 15:33:30

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

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

Ср ноя 11, 2009 15:50:38

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


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

Ср ноя 11, 2009 15:58:13

Есть шесть свободных ног, а с програмной стороны проблем не будет.

Чт ноя 12, 2009 22:27:17

Уважаемый Dankо, не могли бы вы выложить еще версию прошивки с общим катодом?
Заранее Вам благодарен.

Пт ноя 13, 2009 08:13:26

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


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

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

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


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

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

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


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

P.S. Выкладываю печатки часов (чтоб были и в этой ветке)
Вложения
.rar
Печатная плата для часов на ATmega8
(41.41 KiB) Скачиваний: 3876
.rar
Схема
(187.75 KiB) Скачиваний: 3391

Пт ноя 13, 2009 12:16:28

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

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