Большие часы на микроконтроллере avr своими руками. Часы на микроконтроллере AVR с DS1307. Схема принципиальная электрическая

Эта схема была опубликована еще в 2008 году, на сайте http://radiokot.ru/circuit/digital/home/33/ , и не смотря на явные схемотехнические ошибки - схема работает, многие за это время ее повторили, там же на сайте есть большая тема форума, где обсуждается это устройство. Кроме авторскйо прошивки, на форуме есть еще наборы прошивок. В том числе и для вариантов схемы при использовании различных индикаторов, как с собщим катодом, так и с общим анодом. Архив с проверенными прошивками и их исходными текстами в конце страницы.

Я вспомнил об этой схеме, когда мне потребовались простые "первичные часы". Схема была повторена в точности, с единственным изменением - вместо индикатора установлен разъем, к которому будет подключаться силовая часть "больших часов". Для того, чтобы убедиться в том, что часы работают - подключен первый, попавшийся под руку индикатор: XYLNH 420401B-0 - понятия не имею что эта надпись на корпусе означает, но индикатор по распиновке полностью совпадает с рекомендуемым авторм индикатором CC56-12SRWA, только синего свечения.

Управление часами очень простое: Кнопкой S2 устанавливают минуты, а кнопкой S3 - часы. Кнопка сброс (S1), позволяет установить время на полночь, иногда бывает полезно, хотя ее можно не устанавливать. Точка, разделяющая часы и минуты, моргает с частотой 1,25 Гц, то есть 0,4 секунды горит, 0,4 сек. нет.

В целом - схема работает. Но, если предполагается использовать ее так как она есть, то я бы все-таки посоветовал увеличил сопротивление резисторов R4-R11 до, хотя бы 330 Ом, и поставил бы транзисторы в цепь управления катодами. ATtini2313 процессор конечно живучий, но думаю не следует его мучать в таком режиме.

И пару слов о программировании МК. Я использовал программатор Программатор AVR ISP mkII с программой AVRDUDE_PROG 3.2

Недавно спаял схему электронных часов с будильником, выполненных на популярном среди радиолюбителей . В них используется светодиодный индикатор для отображения времени. Мне надоели всевозможные ЖКИ и хочется иметь возможность видеть время из любой точки комнаты в том числе в темноте, а не только прямо с хорошим освещением. Схема содержит минимум деталей и имеет отличную повторяемость.

Схема электронных часов на микроконтроллере

Микроконтроллер является единственной микросхемой, используемой в данном устройстве. Для задания тактовой частоты используется кварцевый резонатор на 4 МГц. Для отображения времени использованы индикаторы красного цвета с общим анодом, каждый индикатор состоит из двух цифр с десятичными точками. Можно применить любые индикаторы с общим анодом, лишь бы каждая цифра имела собственный анод. Чтоб электронные часы были хорошо видны в темноте и с большой дистанции - старайтесь выбрать АЛС-ки чем покрупнее.

Индикация в часах осуществляется динамически. В данный конкретный момент времени отображается лишь одна цифра, что позволяет значительно снизить потребление тока. Аноды каждой цифры управляются микроконтроллером PIC16F628. Сегменты всех четырех цифр соединены вместе и через токоограничивающие резисторы R1 … R8 подключены к выводам порта МК. Поскольку засвечивание индикатора происходит очень быстро, мерцание цифр становится незаметным.

Для настройки минут, часов и будильника - используются кнопки без фиксации. В качестве выхода для сигнала будильника используется вывод 10, а в качестве усилителя - каскад на транзисторах VT1,2. Звукоизлучателем является пьезоэлемент типа ЗП. Для улучшения громкости вместо него можно поставить небольшой динамик. Питаются часы от стабилизированного источника напряжением 5 вольт. В часах реализовано 9 режимов индикации. Переход по режимам осуществляется кнопками "+" и "-". Перед выводом на индикацию самих показаний, на индикаторы выводится короткая подсказка названия режима. Длительность вывода подсказки примерно секунда.

Кнопкой "Коррекция " часы переводятся в режим настроек. При этом кратковременная подсказка выводится на пол секунды, после чего корректируемое значение начинает мигать. Коррекция показаний осуществляется кнопками "+" и "-". При длительном нажатии на кнопку, включается режим автоповтора, с заданной частотой. Все значения, кроме часов, минут и секунд, записываются в память и восстанавливаются после выключения питания. Если в течение нескольких секунд ни одна из кнопок не нажата, то электронные часы переходят в режим отображения времени. Нажатием на кнопку "Вкл/Выкл " включается или выключается будильник, это действие подтверждается коротким звуком. При включенном будильнике светится точка в младшем разряде индикатора. Вот прошивка и рисунок платы часов.

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

Дисплей построен на шести 7-сегментных светодиодных индикаторов с регулировкой яркости. Часы также оснащены резервным питанием от батарей.

Описание конструкции микроконтроллерных часов

Как уже было сказано выше, часы имеют шестизначный дисплей, состоящий из двух трехзначных дисплеев T-5631BUY-11, работающий в мультиплексном режиме. Аноды индикаторов сгруппированы по разрядам и переключаются с помощью транзисторов Т1…Т6.

Катоды сгруппированы в сегменты и питаются непосредственно от микроконтроллера IO1 Attmega8. Частота мультиплексирования составляет 100Гц.

Часы контролируется низкочастотным кварцевым резонатором X1 с частотой 32768 Гц. В результате активации бита CKOPT, разрешающего использование внутренних конденсаторов 36пф для кварца, отпадает необходимость в использовании внешних конденсаторов.

В случае возникновении проблем с запуском генератора, можно попробовать подключить 2 конденсатора по 22пф. Для еще большей точности часов можно вообще отключить внутренние конденсаторы (сбросить бит СKOPT) и оставить только внешние.

Пъезоизлучатель REP1 издает звуковой сигнал будильника и сигнализирует о завершении работы таймера. Во время звукового сигнала на выводе 16 (порт PB2) появляется лог.1. Этот сигнал можно использовать для управления какой-либо нагрузкой.

Управление часами производится тремя кнопками — минуты, часы и режим. Кнопки подключены через резисторы, которые защищают порты микроконтроллер Attmega8. Схема питается от источника 5 вольт (7805). Потребление тока в основном зависит от числа активных индикаторов, а так же от степени настройки яркости.

При максимальной яркости ток потребления доходит до 60 мА. Часы снабжены резервной батареей питания. Во время работы от батареи, часы переходят в экономичный режим, при котором дисплей выключен. Так же в этом режиме не активны и кнопки за исключением случая, когда необходимо отключить звуковой сигнал.

Напряжение резервного питания от 3 до 4,5 В. Это может быть одна батарея на 3В, три NiMH или NiCd по 1,2 В или один аккумулятор Li-Pol или Li-Ion (от 3,6 до 3,7 В). Ток потребления от 3В батареи составляет всего лишь 5…12мA. Время автономной работы часов в экономичном режиме от батареи 3В типа CR2032 со стандартной емкостью 200mAh теоретически должно хватить примерно на 2,5 — 3 лет.

Программное обеспечения для микроконтроллера находится в конце статьи. Биты конфигурации необходимо выставить следующим образом:

Управление часами

Часы управляются с помощью TL1-минута, час-TL2 и TL3-режим. Кнопки часы и минуты используются в режиме часов для назначения часов и минут. В других режимах они имеют различные функции. Кнопка режима переключает между различными режимами, которых в общей сложности 8:

Режим 1-й — Часы

В этом режиме на дисплее отображается текущее время в формате «ЧЧ.ММ.СС». Кнопка часов используется для установки часов. Кнопка минут для установки минут. При ее нажатии происходит сброс секунд.

Режим 2-й — Включение перехода на летнее время и установки года

Здесь Вы можете включать и выключать автоматический переход между летним и зимним временем и установить год. Данные следующего формата «AC ‘RR» (АС – автоматическое время, пробел, последние две цифры года).

Режим 3-й — Таймер обратного отсчета

Это режим позволяет организовать обратный отсчет от заданного значения до нуля. По истечении этого времени раздастся звуковой сигнал и светится светодиод LED1. Звуковой сигнал может быть остановлен нажатием кнопки Режим. Данные следующего формата «ЧЧ.ММ.СС». Максимально возможное значение составляет 99.59.59 (почти 100 часов).

Режим 4-й – Комбинированный вывод информации

В этом режиме, попеременно показывается:

  1. текущее время в формате «ЧЧ.ММ.СС»
  2. дата в формате «AA.DD.MM.»

Каждый формат отображается в течение 1 секунды. В этом режиме используются кнопки Часов и Минут, для регулировки яркости дисплея (Часы-, Минуты+). Яркость изменяется логарифмически в 6 этапов: 1/1, 1/2, 1/4, 1/8, 1/16 и 1/32-й. По умолчанию установлено 1/2

Режим 5-й — Установка дня недели и режим работы будильника

В этом режиме можно установить день недели — с понедельника по воскресенье (отображается как пн, вт, ср, чт, пт, сб, вс), включать будильник и выбирать его режим работы. Данные следующего формата «AA AL._» (день недели, пробел, AL., Настройка будильника).

Кнопка часов устанавливает день недели. Кнопка минут используется для включения/выключения звукового сигнала будильника и выбора режима его работы: «AL._» = будильник не активный, «AL.1″ = будильник сигналит 1 раз (затем автоматически переходит в положение»AL._»), «AL.5» = сигнал будильника только в будние дни (пн-пт, кроме сб-вс), «AL.7» = будильник звонит каждый день

Режим 6-й – Установка дня недели и даты

Кнопка часов позволяет установить день месяца. Кнопка минут позволяет установить месяц.

Режим 7-й — Секундомер

Секундомер позволяет измерять время с точностью 0,1 сек. Максимальное время измерения составляет 9.59.59.9 (почти 10 часов). Данные следующего формата «H.MM.SS.X». Кнопка минут используется для запуска и остановки секундомера. Кнопка часов используется для сброса.

Режим 8-й — Будильник

Этот режим используется для отображения и установить время будильника (ALARM). Данные следующего формата «HH.MM.AL». Кнопка Минуты устанавливает минуту будильника, кнопку Часы устанавливает час будильника.

Ниже приведена схема аналогичных часов, имеющие индикатор с общим катодом

(скачено: 812)

Урок 23

Часть 1

Собираем часы на DS1307 и LED индикаторе

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

Но, несмотря на все наши знания урок не обещает быть коротким, а наоборот будет очень обширным, так как сборка часов на таких индикаторах требует решение очень многих дополнительных задач особенно потому, что у нас не 32 знакоместа, как на нашем LCD, а всего 4 и точка или двоеточие. И все показания надо выводить будет в порядке определённой очереди, а также потребует от нас умения организовать изменение показаний (перевода) с помощью кнопок, а может быть вообще с помощью одной только кнопки в рамках использования всего четырех цифр.

Но мы не боимся трудностей, с ними даже интереснее.

Поэтому начнём что-нибудь выдумывать.

Индикатор будет вот такого вот типа, из них именно типа с общим анода

А вот так индикатор выглядит вживую

Судя по клеточкам размером 5 милиметров несложно оценить его размеры.

Вот его вид с обратной стороны

Также у меня есть ещё один индикатор меньшим размером, но по распиновке точь в точь такой же как и предыдущий. То есть я просто вынимаю из макетной платы и вставляю в него другой, и всё работает.

Вот они оба для сравнения

Вот маркировка маленького индикатора

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

Данную схему мы хорошо помним из урока по . Только там было всего 2 индикатора, поэтому подключим ещё два, также будут использованы ещё два транзисторных ключа, на базу которых пойдут команды через токоограничивающие резистора на 2 килоома от ножек портов PB2 и PB4 . Третью ножку порта B мы пропустим в целях её дальнейшего использования в другом альтернативном качестве, в качестве ножки аппаратного ШИМ для регулировки яркости свечения индикатора.

Создадим проект с именем MyClock1307LED , а код весь в главный модуль возьмём как раз из урока по динамической индикации, из проекта Test08 . В ту пору у нас пока не было модульного программирования и весь полезный код содержался в одном главном модуле.

Для начала соберём наш проект, подключим контроллер и его прошьём и посмотрим для интереса результат работы кода

Мы видим что два правых индикатора у нас нормально работают. Но нам нужно четыре.

Для начала для этого мы добавим ещё две переменные для двух неиспользуемых разрядов

unsigned int i ;

unsigned char R1 =0, R2 =0, R3 =0, R4 =0 ; //цифры разрядов индикатора

Объявим ещё соответствующие данным анодам ножки порта на выход в функции port_ini(), также включая и ножку для ШИМ

DDRB = 0b000111 11;

Также добавим код в функцию ledprint

void ledprint ( unsigned int number )

R1 = number %10;

R2 = number %100/10;

R3 = number %1000/100;

R4 = number /1000;

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

Переменные мы рассчитали, осталось их как-то отобразить на индикаторе.

Для этого мы изменим код в обработчике прерывания от таймера

ISR ( TIMER1_COMPA_vect )

if ( n_count ==0) { PORTB &=~(1<< PORTB0 ); PORTB |=(1<< PORTB1 )|(1<< PORTB2 )|(1<< PORTB4 ); segchar ( R1 );}

if ( n_count ==1) { PORTB &=~(1<< PORTB1 ); PORTB |=(1<< PORTB0 )|(1<< PORTB2 )|(1<< PORTB4 ); segchar ( R2 );}

if ( n_count ==2) { PORTB &=~(1<< PORTB2 ); PORTB |=(1<< PORTB0 )|(1<< PORTB1 )|(1<< PORTB4 ); segchar ( R3 );}

if ( n_count ==3) { PORTB &=~(1<< PORTB4 ); PORTB |=(1<< PORTB0 )|(1<< PORTB1 )|(1<< PORTB2 ); segchar ( R4 );}

N_count ++;

If ( n_count >3 ) n_count =0;

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

С этим всё.

Но, так как у нас теперь количество индикаторов увеличилось, теперь очередь до того же индикатора доходит позже, то есть скорость обнолвения показаний одного индикатора у нас упала, и мы должны немного перенастроить таймер. Как это делать, нас учить не надо

OCR1AH = 0b00001111 ; //записываем в регистр число для сравнения

OCR1AL =0b01000010 ;

Ну и сделаем возможность нашему счётчику считать не до 99, а до 9999 для этого в цикле мы напишем не 100, а 10000

for ( i =0; i < 10000 ; i ++)

И также уменьшим задержку, иначе с такой скоростью мы четвёртой цифры долго не дождёмся

Delay_ms (10 );

Соберём код, прошьём контроллер и посмотрим результат нашей работы

Вот теперь другое дело. У нас теперь есть рабочий код для организации динамической индикации четырёхразрядного динамического индикатора, поэтому в следующей части нашего занятия нам к этому вопросу уже больше возвращаться не придется.

5 542

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

Конструктор покупался на ebay.com за 1.38 фунтов (0.99+0.39 доставка), что эквивалентно 2.16$. На момент покупки это самая низкая цена из всех предложенных.

Доставка заняла около 3х недель, набор пришел в обычном полиэтиленовом пакетике, который в свою очередь был упакован в небольшой «пупырчатый» пакет. На выводах индикатора был небольшой кусочек пенопласта, остальные детали были без какой либо защиты.

Из документации только небольшой листочек формата А5 со списком радиодеталей с одной стороны и принципиальной электрической схемой с другой.

1. Принципиальная электрическая схема, используемые детали и принцип работы



Основой или «сердцем» часов является 8-ми разрядный КМОП микроконтроллер AT89C2051-24PU оснащенный Flash программируемым и стираемым ПЗУ объемом 2кб.
Узел тактового генератора собран по схеме (рис.1) и состоит из кварцевого резонатора Y1 двух конденсаторов C2 и С3, которые образуют вместе параллельный колебательный контур.


Изменением емкости конденсаторов можно в небольших пределах изменять частоту тактового генератора и соответственно точность хода часов. На рисунке 2 показан вариант схемы тактового генератора с возможностью регулировки погрешности часов.

Узел начального сброса служит для установки внутренних регистров микроконтроллера в начальное состояние. Он служит для подачи после подключения питания на 1 вывод МК единичного импульса длительностью не менее 1 мкс (12 периодов тактовой частоты).
Состоит из RC цепочки, образуемой резистором R1 и конденсатором C1.

Схема ввода состоит из кнопок S1 и S2. Программно сделано так, что при одиночном нажатии любой из кнопок в динамике раздается одиночный сигнал, а при удержании двойной.

Модуль индикации собран на четырехразрядном семисегментном индикаторе с общим катодом DS1 и резистивной сборке PR1.
Резистивная сборка представляет собой набор резисторов в одном корпусе:


Звуковая часть схемы представляет собой схему собранную на резисторе R2 10кОм, pnp транзисторе Q1 SS8550(выполняющего роль усилителя) и пьезоэлемента LS1.

Питание подается через разъем J1 с подключенным параллельно сглаживающим конденсатором C4. Диапазон питающих напряжений от 3 до 6В.

2. Сборка конструктора

Сборка трудностей не вызвала, на плате подписано, куда какие детали паять.

Много картинок - сборка конструктора спрятана под спойлером

Я начал с панельки, так как она единственная не является радиодеталью:

Следующим шагом я припаял резисторы. Перепутать их невозможно, они оба на 10кОм:


После этого установил на плату соблюдая полярность электролитический конденсатор, резисторную сборку (также обращая внимание на первый вывод) и элементы тактового генератора - 2 конденсатора и кварцевый резонатор

Следующим шагом припаиваю кнопки и конденсатор фильтра питания:

После этого очередь за звуковым пьезоэлементом и транзистором. В транзисторе главное установить правильной стороной и не перепутать выводы:

В последнюю очередь припаиваю индикатор и разъем питания:

Подключаю к источнику напряжением 5В. Все работает!!!


3. Установка текущего времени, будильников и ежечасового сигнала.

После включения питания дисплей находится в режиме («ЧАСЫ: МИНУТЫ») и отображает время по умолчанию 12:59. Ежечасный звуковой сигнал включен. Оба будильника включены. Первый установлен на время срабатывания 13:01, а второй – 13:02.


При каждом кратковременном нажатии на кнопку S2 дисплей будет переключаться между режимами («ЧАСЫ: МИНУТЫ») и («МИНУТЫ: СЕКУНДЫ»).
При длительном нажатии кнопки S1 происходит вход в меню настроек, состоящее из 9 подменю, обозначенных буквами A, B, C, D, E, F, G, H, I. Подменю переключаются кнопкой S1, значения изменяются кнопкой S2. После подменю I следует выход из меню настроек.

А: Установка показаний часов текущего времени
При нажатии кнопки S2 значение часов изменяется от 0 до 23. После установки часов необходимо нажать S1 для перехода в подменю B.

B: Установка показаний минут текущего времени


C: Включение ежечасного звукового сигнала
По умолчанию включено (ON) – каждый час с 8:00 до 20:00 подается звуковой сигнал. При нажатии кнопки S2 значение изменяется между ON (Вкл.) и OFF (Выкл.). После установки значения необходимо нажать S1 для перехода в подменю D.

D: Включение\выключение первого будильника
По умолчанию будильник включен (ON). При нажатии кнопки S2 значение изменяется между ON (Вкл.) и OFF (Выкл.). После установки значения необходимо нажать S1 для перехода в следующее подменю. Если будильник выключен, то подменю E и F пропускаются.

E: Установка показаний часов первого будильника
При нажатии кнопки S2 значение часов изменяется от 0 до 23. После установки часов необходимо нажать S1 для перехода в подменю F.

F: Установка показаний минут первого будильника
При нажатии кнопки S2 значение минут изменяется от 0 до 59. После установки минут необходимо нажать S1 для перехода в подменю С.

G: Включение\выключение второго будильника
По умолчанию будильник включен (ON). При нажатии кнопки S2 значение изменяется между ON (Вкл.) и OFF (Выкл.). После установки значения необходимо нажать S1 для перехода в следующее подменю. Если будильник выключен, то подменю H и I пропускаются и происходит выход из меню настроек.

H: Установка показаний часов второго будильника
При нажатии кнопки S2 значение часов изменяется от 0 до 23. После установки часов необходимо нажать S1 для перехода в подменю I.

I: Установка показаний минут второго будильника
При нажатии кнопки S2 значение минут изменяется от 0 до 59. После установки минут необходимо нажать S1 для выхода из меню настроек.

Коррекция секунд
В режиме («МИНУТЫ: СЕКУНДЫ») необходимо удержать кнопку S2 для обнуления секунд. Далее коротким нажатием на кнопку S2 запустить отсчет секунд.

4. Общие впечатления от часов.

Плюсы:
+ Низкая цена
+ Легкая сборка, минимум деталей
+ Удовольствие от самостоятельной сборки
+ Достаточно низкая погрешность (у меня за сутки отстали на несколько секунд)

Минусы:
- После отключения питания не держит время
- Отсутствие какой либо документации, кроме схемы (данная статья частично решила этот минус)
- Прошивка в микроконтроллере защищена от считывания

5. Дополнительно:

1) На безграничных просторах интернета нашел инструкцию к этим часам на английском языке и перевел ее на русский. Скачать ее можно

В продолжение темы:
Штукатурка

Что такое злаки, знает каждый. Ведь человек начал выращивать эти растения более 10 тысяч лет назад. Поэтому и сейчас такие названия злаков, как пшеница, рожь, ячмень, рис,...

Новые статьи
/
Популярные