Простейшие часы на Atmega8


Авраменко Павел

Читатели нашего сайта уже знакомы с первой версией часов. Она подкупает своей простотой и повторяемостью. А вот теперь появилась уже четвёртая версия!

Это реплика с разрешения автора.

Плюшки 4й прошивки:
1. Поддержка общего анода и катода
2. Понижено потребление и тактовая частота меги до 1 мГц
3. Добавлен режим работы от батареи с выключенным индикатором. При нажатии на кнопку время показывается 2 секунды. Потребление в дежурном режиме составляет 10 микроампер.
4. Добавлены новые элементы схемы. Возможность подключить разряды индикации секунд.
5. Устранены все проблемы с точками. Они теперь мигают или горят там где нужно а не везде.

 

Сразу хочу сказать что можно подключить еще два сегмента, отображающих секунды. Часы могут питаться как от батареек так и от сетевого блока питания или USB порта компьютера. При питании от батареек часы отображают время при нажатии кнопки "Минуты" в течении 2х секунд и гаснут. Часы очень энерго эффективны и имеют минимальное потребление. Всего 10 микроампер в спящем режиме. Эти часы можно взять за базу и на их основе делать от малых до огромных часов, задача которых показывать точное время! Точность часов зависит только от кварца. В следующей прошивке планируется корректировка времени. Поскольку часы работают от кварца их точность будет немного зависить от температуры. Дело в том что частота кварца меняется от изменения температуры и ничего тут не поделаешь.  Разработанную схему собрали сотни людей. Так что она проверенна и настроек после сборки не требует.
Давай сразу посмотрим на самую простую схему. Вот она:

На ней всего 6 деталей. Именно ее повторили сотни радиолюбителей благодаря ее простоте. Эта схема имеет недостаток - дело в том что падение напряжения на резисторе разное. К примеру отображение восьмерки заставляет светится 7 светодиодов, а единицы только два. От этого общая яркость светодиодов меняется и единица светится ярче восьмерки. Этот недостаток легко убирается выбрасыванием резистора и питанием контроллера от стабилизированного напряжения 2,7-3,0 В. 
Однако время идет вперед и людям хочется чего-то большего. Именно для этого я разработал новую схему и прошивку в которых можно дополнительно подключить два разряда для отображения секунд. Также прошивка полностью совместима с первым вариантом схемы. Главное чтобы ноги микросхемы, которые находятся "в воздухе" там и оставались и не были никуда "заземлены".
К вашему вниманию новая схема:

Именно ее я и рекомендую к сборке. Детали, без которых часы будут работать нарисованы пунктиром. Оставляю право за радиолюбителями выбирать то, что им нужно. А именно - независимое питания для того чтоб время не сбивалось и сегменты с секундами.

Алгоритм работы довольно простой, с часами разберется любая хозяйка. Одна кнопка прибавляет часы, вторая минуты. Если подключить батарейку и зажать кнопку минуты а потом часы то дисплей погаснет и узнать время можно будет только лишь нажав кнопку "Минуты". Кнопка "Часы" переведет устройство в обычный режим.
А если зажать кнопку "Часы" а потом "Минуты" то устройство будет показывать время только при внешнем питании, а при исчезновении питания индикатор погаснет и часы будут идти от батарейки. Посмотреть время и выйти из этого режима можно точно так же как и в предыдущем режиме.
 
Я сделал несколько версий 4й прошивки которые отличаются разным поведением точек. Они или горят или мигают. В общем сами посмотрите на видеоролике в конце статьи и выберите то что вам подходит. 
 
Прошивка firmware v4, datasheet на русском, схемы, программа для прошивки в этом архиве

Распайка схемы. Вид со стороны выводов.

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

'Автор Авраменко Павел.
$regfile = "m8def.dat" ' мега8
$crystal = 8000000 'частота тактирования камня.
Config Portb = Output , Portd = Output : Portc = &H30 'Конфигурируем порты на входы и выходы. Включаем внутренние подтягивающие резисторы
Dim X As Byte , Cifri(4) As Byte 'задаем всякие переменные и масивы
Config Clock = Soft ' конфигурируем совтовые часы которые будут подсчитывать колебания часового кварца и раз в секунду вызывать прерывания.
Config Timer0 = Timer , Prescale = 8 : On Timer0 Pulse : Enable Timer0 : Enable Interrupts ' конфигурируем таймер 0 чтоб потом на него повесить алгоритм отображения цифр. Назначаем подпрограмму, которая будет запускаться по переполнению 0го таймера
 Do ' основной бесконечный цикл в котором идет опрос кнопок
If Pinc.4 = 0 Then ' Если кнопка нажата то запускаем бесконечный цикл
Do
 Incr _min : _sec = 00 : Timer2=0 ' добавляем к минутам 1. Секунды =0. Все что наклацал таймер 2 тоже обнуляем
 If _min > 59 Then : _min = 00 : Incr _hour : End If : If _hour > 23 Then _hour = 00 : Waitms 100 ' счетчик + задержка
Loop Until Pinc.4 = 1 ' если кнопку отпустили то выходим из бесконечного цикла
End If
If Pinc.5 = 0 Then 'Если кнопка "Часы" нажата то запускаем бесконечный цикл
 Do
 Incr _hour : If _hour > 23 Then _hour = 00 : Waitms 100 ' счетчик
 Loop Until Pinc.5 = 1 ' если кнопку отпустили то выходим из бесконечного цикла
End If
 Loop 'конец основного цикла
Pulse: ' подпрограмма прерываний таймера0
Cifri(1) = _min Mod 10 : Cifri(2) = _min / 10 : Cifri(3) = _hour Mod 10 : Cifri(4) = _hour / 10 ' разбиваем минуты на два отдельных числа, тоже делаем и с часами. Все записываем в масив
Portb = &HFF 'гасим индикатор подав на общие выводы плюс. 
Для индикатора с общим плюсом нужно заменить &HFF на ноль.
Incr X : If X > 3 Then X = 0 ' переменная определяющая какой индикатор зажечь
Portd = Lookup(cifri(x + 1) , Dta) 'присваиваем индикатору с номером х (из предыдущей строки) символ из строки Dta
Reset Portb.x 'зажигаем индикатор х
Return ' возвращаемся на место откуда прервали программу
 Dta: ' таблица с данными о цифрах зажигает по порядку : 0123456789
 Data &HEF , &H8C , &HB7 , &HBE , &HDC , &H7E , &H7F , &HAC , &HFF , &HFE 'для общего плюса закомментировать
' Data &H10 , &H73 , &H48 , &H41 , &H23 , &H81 , &H80 , &H53 , &H0 , &H1 'для общего плюса раскомментировать

 

 

Эти же часы на форуме баскома.

Happiness Toom

Автор


Авраменко Павел.

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

В часах имеется два режима энергосбережения. Режим "Работа от батарей" включается при нажатии кнопки "Минуты" и "Часы". В таком режиме дисплей отключается. Для просмотра времени необходимо нажать кнопку "Минуты" через 2 секунды индикатор снова погаснет. Для выхода из режима нужно удерживать кнопку "Часы"

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

Программа написана на языке бэйсик в среде Bascom-AVR. Добавлены исходники прошивки V2 Демо версию компилятора вы можете скачать отсюда http://www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=99&Itemid=54 Не переживайте, дэмо версия ограничена 4 кБ памяти микроконтроллера, т.е. половиной Atmega 8.Исходник компилируется как 0,8 кБ. Так что есть большое поле для деятельности. Рускоязычный форум бэйсика где помогут http://bascomavr.3bb.ru Видео автора о сборке часов тут https://www.youtube.com/watch?v=IY8YyFwUa60 Канал автора часов http://www.youtube.com/c/Happinesstoom Автор часов Авраменко Павел. г. Запорожье

Планируется следующая прошивка в которой будет корректировка времени.

При копировании материала просьба размещать ссылку на видеоролик или ютуб канал автора.