Часы на atmega8 своими руками

Добавил пользователь Дмитрий К.
Обновлено: 18.09.2024

Схема часов выполнена на микроконтроллере ATMEGA8. Схема состоит из следующих основных элементов.
Регистры 555ИР22 (4)
Матричный светодиодный индикатор 8*8 точек (4)
Микроконтроллер ATMEGA8 (1)
+ а также транзисторы, резисторы и прочая мелоч (см. схему)

Программа часов написана на ассемблере и в данный момент содержит все основные функции для управления ими. Настройка часов и календаря, времени показа режимов, корректировки хода часов (с интервалом 1,3824 секунд/сутки или 1/62500 сек/сек). Реализован режим вывода строки текста в праздничные дни, например, "С новым годом" и т.п.

Схема часов выполнена на одностороннем фольгированном текстолите, в связи с чем на обратной стороне многочисленные электрические соединения выполнены с помощью множества отдельных проводников.

!примечание1. Некоторые порты контроллера не соответствуют схеме. Так как были перепутаны перемычки на плате при монтаже, вследствие чего исправление перепутанных портов регистров было выполнено программно.
!примечание2. Все транзисторы заменены на PNP тип, что немного повлияло на программный код.

Часы на финальной сборке. Корпус часов сделан с помощью степлера из полутвердой пластиковой пленки. Тестирование работы показало: характеристики вторичной цепи: 5 Вольт 0,2..0,22 Ампера, первичной цепи: сеть 220 В, активная мощьность 2,5 Вт(зависит от КПД блока питания).

Данные электронные часы, построенные на микроконтроллере Atmega8, оснащены легко читаемым светодиодным дисплеем, будильником с функцией повтора, функцией восстановления работы после отключения питания.

Характеристики часов

  • формат отображения времени: часы, минуты;
  • будильник с функцией повтора;
  • простое управление с помощью 2 кнопок;
  • поддержка работы от батарейки;
  • напряжение питания: 7…12В / 0,2 A;
  • размеры двух печатных плат: 60×21 мм, 58×44 мм.

Принципиальная схема часов показана на рисунке ниже. Схема часов должна быть запитана постоянным напряжением в диапазоне 7…12В. Это может быть любой блок питания с нагрузкой по току не менее 200 мА.

Диод VD1 (1N4007) защищает схему от неправильной полярности подключения входного питания. Внешнее входное напряжение подается на стабилизатор DA1 (7805), а конденсаторы C3…C7 выполняют роль фильтра питания.

Работой часов управляет микроконтроллер Atmega8, а в качестве часов реального времени применена микросхема типа PCF8583. Связь PCF8583 с микроконтроллером осуществляется через I2C интерфейс.


В качестве дисплея используется модульный четырехзначный семисегментный дисплей с общим анодом. Дисплей подключается непосредственно к выводам микроконтроллера через ограничительные резисторы R1…R12.

К разъему CON5 платы можно подключить зуммер с генератором, который будет выступать в качестве звукового сигнала будильника. К клеммам SA1 и SA2 печатной платы подключаются кнопки, которые служат для ввода настроек и обслуживания часов.

Настройка времени и будильника

Для выбора и изменения настроек служит кнопка SA2. После выбора как в режиме настройки времени, как и в режиме установки будильника на дисплее начнет мигать первая цифра, после чего можно установить десятки часов с помощью кнопки SA2.

Очередное нажатие SA1 вызовет мигание второй цифры и с помощью SA2 можно установить единицы часов. Последующие два нажатия SA1 позволят установить десятки минут и единицы минут. Во время установки часов и минут устанавливается всегда только одна цифра. Пятое нажатие SA1 возвращает часы к нормальной работе. Также продолжительное время отсутствия нажатия кнопок завершает процедуры установки.

Во время работы часов длительное нажатие кнопки SA2 производит включение/выключение будильника. В момент активации будильника, на несколько секунд отображается время его запуска. Состояние будильника сигнализирует точка, размещена в четвертом разряде. Если будильник активен, этот индикатор горит.

После включения сигнала будильника нажатием любой кнопки можно выключить его на время порядка 5 минут, при этом активируется функция повтора. Этот факт отмечается миганием точки на четвертом разряде индикатора. По истечении 5 минут сигнал будильника будет запущен снова. Снова нажатием любой кнопки, его можно отложить еще на 5 минут, и т. д.

Полное отключение сигнала будильника происходит после длительного нажатия клавиши SA2, или около полутора минутного отсутствия реакции со стороны пользователя.

Работа часов протестирована в Proteus:

Если в ходе эксплуатации часов, окажется, что часы значительно отстают или спешит, можно попробовать уменьшить или увеличить значение конденсатора C1.

В хозяйстве давно пылилась плата от старых электронных весов, на ней были распаяны 6 семисегментных индикаторов и сдвиговые регистры 74HC595, я решил сделать из этой платы часы. Дополнительно сделал плату управления на микроконтроллере ATmega8 и написал программу, для точного хода использовал микросхему часов реального времени DS3231. Индикаторы и регистры питаются от напряжения 5 Вольт, ATmega8 и DS3231 от стабилизированного напряжения 3,3 Вольта. Датчик освещенности на фоторезисторе используется для автоматической регулировки яркости индикаторов.

Схема часов

Настройка часов

Для настройки используются две кнопки "Меню" и "+". При первом нажатии на кнопку "Меню" начинает мигать разряд часов, нажатие на кнопку "+" значения увеличиваются, вторым нажатием на "Меню" можно также подстроить минуты, при третьем нажатии на "Меню" мигает разряд секунд, кнопкой "+" можно обнулить секунды, для выхода из настройки необходимо нажать "Меню" еще раз.

Фото готового устройства

Корпус сделан из плиты мдф толщиной 32мм на станке ЧПУ, задняя панель из стеклотекстолита толщиной 3мм.





Проект AVRStudio 4, макет печатной платы DipTrace, макет корпуса CorelDraw

Часы на ATmega8.

  • Два датчика температуры DS18B20 (дома и на улице).
  • 5 будильников.
  • Отсрочка сигнала, если будильник не отключить, срабатывает примерно через 5 мин.
  • Будильник срабатывает при любом режиме питания.
  • При пропадании 220 вольт потребление от батарей 40 микроампер.
  • Яркость индикатора настраивается для дневного и ночного времени.
  • Изменяемый параметр плавно меняет яркость.
  • Часы могут последовательно показывать до 8 режимов.
  • В схеме можно использовать индикаторы с общим анодом или катодом.

Часы могут последовательно показывать 8 режимов, для которых выбирается один из 11 форматов отображения и время его показа.

В режимах где не указываются десятые градуса, точка определяет больше 0,5 гр.

Сxема

На следующей схеме:
а) подключение индикаторов с общим катодом.
b) с общим анодом.
соответственно для разных индикаторов разные прошивки. Диоды нарисованы просто так, для наглядности.

подключение индикаторов

Схема подключения больших индикаторов с общим анодом. Для этой схемы используется прошивка с общим катодом. Для питания индикаторов можно использовать отдельное питание с повышенным напряжением. Транзисторы Q1-Q8 можно заменить микросхемой ULN2803. Транзисторы на включение цифры (Q10) следует выбирать исходя из максимального тока 8 сегментов.


Будильник в часах простой, при срабатывании, устанавливается в 1 ножка будильника, сделал так, потому что будильник не всем нужен, по большей части часы весят где то на стенке и показывают температуру :) так же пищать микроконтроллером как то не прикольно, можно например повесить на вывод музыкальную открытку..
При включенном будильнике:
при откл. отсрочке будильник выключается нажатием любой клавиши.
при вкл. отсрочке сигнала, будильник откл. кнопкой F, при нажатии кнопок SET PLUS MINUS сигнал отключается, но опять сработает примерно через 5 минут, если будильник не выключать, то после 7 раз срабатывания он откл. автоматически.
При активной отсрочке сигнала, в нулевом режиме, мигает точка последнего разряда.

Действия в нулевом режиме.
F - вход в настройки.
F - при активной отсрочке, отмена отсрочки.
MINUS - установка будильников.
PLUS - режим УСt. P.

Кнопка F - выход из режима.
Кнопка SET - вход в выбранный режим. Далее переход к следующему параметру (мигающему полю).

Все режимы имеют завершение по времени. Если не было нажатий более 30 секунд, устанавливается режим ноль.

Программа написана в WinAVR - 20060421.
Микроконтроллер тактируется от внутреннего RC генератора 4 мег. CKSEL3..0 0011, значение остальных fuse бит оставлено по умолчанию.
Для ponyprog можно воспользоваться скриптом:

исходник, hex (23 Kb). 02.03.09.
Изменены будильники, их число увеличено до 8 и добавлена установка дней недели.
1о СР. – первый будильник в среду включен.
1_ ЧГ. - первый будильник в четверг выключен.

Добавлен режим hour, для сигналов в начале каждого часа. Данные сигналы выключены в ночное время (ночная яркость).
Р b П
Р (Pin) - вывод РС1 каждый час устанавливается на 1 секунду.
b (будильник) вывод будильника устанавливается на 2 секунды.
П (пьезо) разрешить подавать сигнал, как от нажатия кнопки.

исходник, hex (23 Kb). 10.03.2010.
Добавлен таймер. Максимальное время 9-59-59. Выход таймера - ножка будильника. Логика работы: как только включили таймер, на ножке будильника устанавливается высокий уровень напряжения, по истечении заданного времени на выводе устанавливается логический ноль.

исходник, hex (24 Kb). 19.04.2010.
Без перехода на летние зимние время.
Выход таймера - ножка PC2(25). Логика работы: как только включили таймер, на ножке PC2(25) устанавливается высокий уровень напряжения, по истечении заданного времени на выводе устанавливается логический ноль.
Удален 3 датчик. Термостат работает по первому датчику. (Вывод PC2(25) отдан таймеру.)
В этой версии добавлен прерывистый сигнал будильника.

Схема, исходник, hex (43 Kb). 10.03.2010.
Без перехода на летние зимние время.
Удален 3 датчик. Термостат работает по первому датчику. Вывод PC2(25) отдан таймеру.
Изменен таймер. Максимальное время 9-59-59.
Логика работы:
_00.00 включен/выключен; часы.минуты срабатывания.
0.00.00 часы.минуты.секунды. На сколько сработает.
При включенном выводе таймера, при входе в меню таймера отображается текущие время таймера, этот режим не имеет выхода в основной режим по времени.


10 будильников на каждый день недели.
Отсрочка сигнала, если будильник не отключить, срабатывает примерно через 5 мин.
Два датчика температуры DS18B20 (дома и на улице).
Выбор отображения температуры.
Яркость индикатора настраивается для дневного и ночного времени.
Изменяемый параметр плавно меняет яркость.
Часы могут показывать до 8 режимов.
В схеме можно использовать индикаторы с общим анодом или катодом, в моем варианте использую индикаторы с ОА.

P.S. Из схемы можно исключить конденсаторы к кварцу, если запрограммировать fuse бит CKOPT.
Прошивка и схемы FUSE в архиве







Комментарии 13


Спасибо, всё получилось!





Уважаемый VanUliK. Очень понравилось ваше устройство! Хотелось бы соорудить себе данный гаджет. Не могли бы Вы скинуть печатку и прошивку. ( Можно на почту) Очень Вам буду благодарен.

Читайте также: