Простые часы на Atmega8 

| Часы, Будильники |

 

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

Состоят данные часы из микроконтроллера Atmega8, светодиодного индикатора (PL-F5610) с общим катодом (минусом), часового кварца 32768 Hz и резистора. Да, можно удивиться, но больше нам ничего не понадобится.

Резистором можно подобрать яркость свечения индикатора – при 180 Om часы будут очень ярки и днем и ночью, а при 220 Om – будут видны только ночью. Я остановился на 200 Om.

Простые электронные часы на микроконтроллере Atmega8 в навесном монтаже. Фото.

Микроконтроллер Atmega8 можно прошить программатором PonyProg. Прошивку в формате *.hex можно скачать ЗДЕСЬ. Фьюзы при прошивке микроконтроллера Atmega8 необходимо выставить: СКОРТ, ВООТSZ1, ВООТSZ0, SUT1, SUT0, СКSEL3, СКSEL1, СКSEL0. При выставлении бита СКОРТ к часовому кварцу подключаются два внутренних конденсатора микроконтроллера.

Питание данных часов от 5v источника, можно сеть, можно батареи.

Принципиальную схему простых часов на микроконтроллере Atmega8 привожу ниже.

Принципиальная схема простых электронных часов на микроконтроллере Atmega8.

Если у Вас индикатор с двумя точками (светодиодами) между парами цифр, то их можно подключить к четвертой лапе микроконтроллера. Вместо кнопок был использован датчик от дисковода, отвечающий за наличие дискеты и возможность записи на нее. По сути это и есть две кнопки в одном корпусе.

Работа микроконтроллера Atmega8 очень проста и заключается в обработке двух счетчиков. Первый считает количество колебаний кварца и выводит минуты, а второй – количество минут и выводит часы.

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

Автор данной схемы и программного кода некий «Paha». За что ему спасибо! :-)

Страницы:   1  2  3  4  5
 amedvedev | 10.04.2012 22:08
 

Меня заинтересовал сей проект-есть желание собрать часы,но у меня правило- сначала проверить в Протеусе.Когда собрал,то обнаружил -да действительно проект работает ,за исключением нюанса-после нуля идет 7 а не 1(лишний А сегмент)и вместе с 4 рисует тоже (лишний А сегмент)сверху.Может что-то не так делаю?

все гениальное просто

Коментариев: 1  | amedvedev63(on)i.ua  | IP: 37.55.179.173  | Зарегестрирован: 2012-04-10 17:10:30
 admin | 10.04.2012 22:13
 

Может!)) Если интересно, паяйте. На практике такой проблемы нет.

Администратор сайта

Коментариев: 377  | e(on)mail.net  | IP: 46.119.207.0  | Зарегестрирован: 2009-12-25 19:12:05
 Dimon4ik | 11.04.2012 22:58
 

Очень хотелось бы собрать сей девайс, но вот только индикаторы с общим анодом..ни у кого нет случаем прошивки или ссылки? беглый поиск с гуглом не помог(


Коментариев: 3  | sozkov(on)ya.ru  | IP: 93.178.106.129  | Зарегестрирован: 2012-04-11 18:53:21
 admin | 12.04.2012 08:53
 

Вот листинг программы под индикаторы с общим плюсом:

$regfile = «m8def.dat» ‘ Работаем с ATmega8
$crystal = 8000000 ‘Работаем на частоте 8 мГц
Config Portb = Output ‘
Config Portd = Output ‘Назначаем порты на вход и выход
Config Portc = Input ‘
Set Portc.5 ‘Поддтягиваем вход Portc.5 и Portc.4 резисторами к Vcc
Set Portc.4
Dim X As Byte , Y As Byte , Cifri(4) As Byte , Cifra As Byte , Tochka As Byte ‘рабочие переменные

Config Clock = Soft ‘Включаем софтовые часы
_sec = 0 : _min = 0 : _hour = 0 ‘Вводим время с которого будет производиться отчёт времени
Config Timer0 = Timer , Prescale = 8 ‘Включаем таймер0, применяем делитель на 8
Config Timer1 = Counter , Edge = Falling , Prescale = 1 ‘Включаем таймер1, назначаем его работу по спаду от кварца 32768 Гц, делитель на 1
On Timer0 Pulse ‘При срабатывании таймера0, переходим на вклатку Pulse
Enable Interrupts ‘Разрешаем все прерывания
Enable Timer0 ‘Разрешаем прерывания таймера0
Config Debounce = 20 ‘Ставим задержку при нажатии на кнопки в 20 м.Сек.

Do ‘Основной цикл
Debounce Pinc.4 , 0 , Minuti , Sub ‘
Debounce Pinc.5 , 0 , Chasi , Sub ‘Проверяем на нажатие кнопок, если кнопка нажата переходим на соответствуюшую вкладку

If _hour = 24 Then _hour = 00 ‘
If _min = 60 Then _min = 00 ‘Проверяем переменные с временем, при переполнении обнуляем их

Tochka = _sec Mod 2 ‘
Loop ‘Конец основного цикла

Pulse:
Incr X ‘Увеличиваем переменную Х на еденицу (была 0, стала 1)

Cifri(1) = _hour / 10 ‘Разбиваем двузначное число часов на два однозначных (21 / 10 = 2)
Cifri(2) = Cifri(1) * 10 ‘2 * 10 = 20 сохраняем результат в переменную Cifri(2)
Cifri(2) = _hour — Cifri(2) ’21 – 20 = 1 сохраняем вновь полученный результат, в итоге переменная Cifri(2) равняется 1

Cifri(3) = _min / 10 ‘Проделываем тоже самое с минутами (56 / 10 = 5)
Cifri(4) = Cifri(3) * 10 ‘5 * 10 = 50
Cifri(4) = _min — Cifri(4) ’56 – 50 = 6

‘Portd = &H00
Portd = &HFF ‘Гасим индикатор
If X = 1 Then ‘Проверяем значение Х, если оно рано 1, выполняем дествие ниже
‘Portb = &H77
Portb = &H8
Cifra = Cifri(1)
End If ‘Конец проверки
If X = 2 Then ‘Опять проверяем Х
‘Portb = &H7B
Portb = &H4 ‘
Cifra = Cifri(2) ‘
End If ‘
If X = 3 Then
‘Portb = &H7D
Portb = &H2
Cifra = Cifri(3)
End If
If X = 4 Then
‘Portb = &H7E
Portb = &H1
Cifra = Cifri(4)
End If
If X > 4 Then X = 0 ‘Последняя проверка, если Х больше 4, обнуляем его

‘Select Case Cifra
‘Case 0 : Y = &HEF
‘Case 1 : Y = &H8C
‘Case 2 : Y = &HB7
‘Case 3 : Y = &HBE
‘Case 4 : Y = &HDC
‘Case 5 : Y = &H7E
‘Case 6 : Y = &H7F
‘Case 7 : Y = &HAC
‘Case 8 : Y = &HFF
‘Case 9 : Y = &HFE
‘End Select

Select Case Cifra ‘Начинаем выбор переменной Cifra
Case 0 : Y = &H10 ‘Если Cifra = 0, Y равен &H10 (Dec 16 ; Bin 00010000)
Case 1 : Y = &H73 ‘
Case 2 : Y = &H48 ‘
Case 3 : Y = &H41 ‘
Case 4 : Y = &H23 ‘
Case 5 : Y = &H81 ‘
Case 6 : Y = &H80 ‘
Case 7 : Y = &H53 ‘
Case 8 : Y = &H00 ‘
Case 9 : Y = &H1 ‘
End Select ‘Конец выбора
Portd = Y ‘Приравниваем значение переменной Y к Portb
‘If Portb.2 = 0 And Tochka = 0 Then Set Portd.2 Else Reset Portd.2
If Portb.2 = 1 And Tochka = 0 Then Reset Portd.2 Else Set Portd.2 ‘Прверяем условие, если совпало — зажигаем точку, если нет — гасим
Return ‘ Возврашаемся

Minuti: ‘При нажатии кнопки «минуты» обнуляем секунды и увеличиваем переменную _min на 1
Incr _min
_sec = 00
If _min = 60 Then _min = 00
Return ‘Возврашаемся

Chasi: ‘Тоже, что с минутами
Incr _hour
_sec = 00
If _hour > 23 Then _hour = 00
Return

Компилировать необходимо в Bascom AVR. Удачи!

Администратор сайта

Коментариев: 377  | e(on)mail.net  | IP: 46.119.207.0  | Зарегестрирован: 2009-12-25 19:12:05
 Dimon4ik | 12.04.2012 15:41
 

admin, большое спасибо) TUP


Коментариев: 3  | sozkov(on)ya.ru  | IP: 93.178.106.129  | Зарегестрирован: 2012-04-11 18:53:21
 Dimon4ik | 30.04.2012 00:25
 

при компиляции выдает слишком много ошибок. я имею для индикатора с ОА. поисал в инетернете, сделал какую то сборную солянку и прошил, но как то не правильно работает..нет ли у кого уже скомпилированного файла для ОА?


Коментариев: 3  | sozkov(on)ya.ru  | IP: 93.178.104.24  | Зарегестрирован: 2012-04-11 18:53:21
 admin | 01.05.2012 11:50
 

Попробуйте код перенабрать руками, так как там может латиница с кириллицей быть смешана.

Администратор сайта

Коментариев: 377  | e(on)mail.net  | IP: 46.119.226.3  | Зарегестрирован: 2009-12-25 19:12:05
Страницы:   1  2  3  4  5
Необходимо авторизоваться, чтобы комментировать.