РадиоКот :: Часы «Clock_3» без DS1307
Например TDA7294

РадиоКот >Конкурсы >пкпч2014 >

Теги статьи: Добавить тег

Часы «Clock_3» без DS1307

Автор: X
Опубликовано 01.09.2014
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2014"

Кота с очередным днём рождения! Счастья/здоровья/здоровья/счастья… )) Схема представляет собой, излюбленную многими «классику жанра», почти в самом простом варианте, только с транзисторными ключами, которые в первую очередь защищают порты от «пожжения», в момент написания и отладки, когда динамическая индикация ещё «кривая или висит». В часах без спецдрайвера DS1307, чтобы время «не плыло» - действует своя «подноготная», завязанная в первую очередь на точность кварца 2,097152 МГц. Чем больше цифр после запятой – тем точнее (и дороже) кварц, и точнее получится нужная нам секунда. Работает схема в системе «24 часа».

Как всё происходит:
* 2097152 Герца делим «предмасштабатором» на 1024 получаем 2048
* 16-ти битным таймером, делим 2048 на 2048, получаем 1 секунду
Т. е. типичный номинал кварца должен быть таким, чтобы после деления на 1024 получилось целое число, удобное для делёжки 16-ти битным таймером, в пределах 0…65535.

Ещё пример, кварц 1,8432МГц:
* 1 843 200 : 1024 = 1800 : 1800 = 1
Но у такого кварца после запятой всего 4 цифры, это означает, что купленный кварц может оказаться как точным, так и неточным. А это уже влечёт за собой покупку 10…100 кварцев )) и их подбор с интервалом в несколько суток. Говорят, в узких пределах можно варьировать частоту самого кварца, стоящими при нём кондерами, но на практике не пробовал. Есть и другие способы коррекции времени, например – в моём случае суточное запаздывание около 36 секунд. Тогда можно ввести ежесуточную коррекцию +36 секунд. В прошивке эта строка отмечена, но закомментирована, т. к. у каждого свой кварц.

В схеме имеется свободный «электрод» PD6, от которого можно сделать встроенный будильник. В прошивке это отсутствует, ибо:
1) Кнопки всего две и будильник выставлять не чем. Можно разве что прописать его фиксированным в прошке или использовать комбинации кнопок.
2) В данном исходнике (AVR Ассемблер) не нужны усложнения, он очень подробно прокомментирован для осмысления начинающими.
3) По этой же причине не применяется режим «Turbo» для кнопок, «Держим – устанавливается». Установка времени происходит одиночными нажатиями.

Как примерно работает прога:
* основной цикл – программа, «вертится» на поочерёдном высвечивании индикаторов
* считывая при этом числа из 4-х РОН (регистров общего назначения)
* конвертируя каждое число в семисегментник перед высвечиванием
* далее идут только разные «вклинивания» в основную прогу через прерывания
* в это время таймер считает своё и «производит» секунды
* подпрограммой прерывания по таймеру плюсуется секундный регистр
* счёт после этого, в основной программе по цепочке передаётся в последующие регистры
* (от этого счёт времени нарастает, как в механическом счётчике ленты в магнитофоне)
* при этом устанавливается/сбрасывается T-флаг
* что «подмешивает» в динамическую индикацию состояние свечения/гашения точки
* кнопки так же «висят» на прерываниях и своими подпрограммами могут изменять данные счётных регистров часов и минут (прямо во время работы самих часов)
* в «плюсовальных» цепочках счёта (и установки времени) есть ограничения, для не превышения значений, свойственных часам: 60 секунд – 60 минут – 24 часа

На плате имеется клемма для соответствующего программатора AVR ISP mk2 (кой является, более новой, USB-шной версией предыдущего и так же работает с AVR Studio). Перед залитием прошки, внутрисхемным способом, тройной переключатель SA1 желательно поставить в положение OFF - разъединено (хоть и не всегда обязательно, как показала практика).


Надо отметить, что при включении, часы любили показывать «мусор», т. к. в этот момент «мусорило» в счётные регистры, числами более 0…9 и соответственно лежащими за пределами конвертирования в семисегментник. На индикаторе показывало «УГ». Связанно подобное могло быть с одномоментными:
* зарядкой кондеров в БП относительно большой ёмкости
* пуском индикации «кушающей» ток
* и относительно севшими батарейками (такие применялись на момент отладки)
Соответственно аппаратной задержки при включении не хватало, поэтому включена слежка за питанием и внесена программная задержка на секунду. В результате всех «эволюций» схема «обрела иммунитет» от такого рода «УГ». Задержка при включении (до индикации) составила 14 тактов + 65 миллисекунд + начало проги + 1 секунда. В общем «Rolex-ca» не делаем – нормально. ))


Файлы:
Плата и исходник


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

12 39 14