Простые светодиодные часы на Atmega8A

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Аватара пользователя
boingo-00
Нашел транзистор. Понюхал.
Сообщения: 186
Зарегистрирован: Ср авг 15, 2012 19:52:40
Откуда: 161 RUS
Контактная информация:

Re: Простые светодиодные часы на Atmega8A

Сообщение boingo-00 »

А можно исходник?
А то я при сборке накосячил :)))
Здесь может быть ваша реклама.
Реклама
Аватара пользователя
boingo-00
Нашел транзистор. Понюхал.
Сообщения: 186
Зарегистрирован: Ср авг 15, 2012 19:52:40
Откуда: 161 RUS
Контактная информация:

Re: Простые светодиодные часы на Atmega8A

Сообщение boingo-00 »

Автор, вы где???
Дайте исходник!!! :?
Здесь может быть ваша реклама.
Реклама
Аватара пользователя
Hertz
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Ср дек 28, 2011 20:31:35
Откуда: Нижний Новгород

Re: Простые светодиодные часы на Atmega8A

Сообщение Hertz »

Исходника нет.
В статье указано, что используется готовая прошивка.
EXEcutor_XS
Родился
Сообщения: 1
Зарегистрирован: Пт июн 13, 2014 15:03:43

Re: Простые светодиодные часы на Atmega8A

Сообщение EXEcutor_XS »

Вобщем собрал, прошил, цифры есть...кнопки их меняют но сами часы не ходят...кварц менял, кондёры к нему вешал..не понимаю что делать МК Atmega8-16PU.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
SERYKOS
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пн ноя 28, 2011 15:13:08
Откуда: Кубань

Re: Простые светодиодные часы на Atmega8A

Сообщение SERYKOS »

Меняю вариант печатки, проверено в железе,
на прошивку с О.К., секундными импульсами на 4ом выходе МК, но без автоотключения.
Часы атмега8 светодиодн дораб.rar
(44.48 КБ) 564 скачивания
Изображение
Изображение
Изображение
Изображение
[color=#00FF00]госнаркоконтроль всей правды про канифоль еще не знает[/color]
Реклама
Аватара пользователя
Vittas
Родился
Сообщения: 5
Зарегистрирован: Чт мар 25, 2010 21:35:26

Re: Простые светодиодные часы на Atmega8A

Сообщение Vittas »

Я так думаю пригодится многим.
Вот прошивка под общий анод семисегментных индикаторов.
Вложения
OA.hex
Прошивка ОА
(3.59 КБ) 799 скачиваний
Кот Темофей, открытая душа коту Василию принес в зубах мыша. И так тихонько не шурша оставил сей девайс для [color=#0000BF]РАДИОКОТА[/color]
Реклама
Аватара пользователя
Vittas
Родился
Сообщения: 5
Зарегистрирован: Чт мар 25, 2010 21:35:26

Re: Простые светодиодные часы на Atmega8A

Сообщение Vittas »

Вот исходник (взят с другого сайта)

' Исходник для индикатора с общим анодом (ОА)
$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 ' < Обычные операторы деления и умножения здесь не нужны
Cifri(2) = _hour Mod 10 ' Целочисленное деление рулит, у нас тут не пентиум

Cifri(3) = _min \ 10 'Проделываем тоже самое с минутами (56 / 10 = 5)
'Cifri(4) = Cifri(3) * 10 '5 * 10 = 50
Cifri(4) = _min Mod 10 '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
Кот Темофей, открытая душа коту Василию принес в зубах мыша. И так тихонько не шурша оставил сей девайс для [color=#0000BF]РАДИОКОТА[/color]
Аватара пользователя
SERYKOS
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пн ноя 28, 2011 15:13:08
Откуда: Кубань

Re: Простые светодиодные часы на Atmega8A

Сообщение SERYKOS »

Vittas писал(а):Я так думаю пригодится многим.
Вот прошивка под общий анод семисегментных индикаторов.
А с О.К. только без автовыключения есть?
[color=#00FF00]госнаркоконтроль всей правды про канифоль еще не знает[/color]
Аватара пользователя
Vittas
Родился
Сообщения: 5
Зарегистрирован: Чт мар 25, 2010 21:35:26

Re: Простые светодиодные часы на Atmega8A

Сообщение Vittas »

Повторяю, коды взяты с других источников

$regfile = "m8def.dat" ' мега8
$crystal = 8000000
Config Portb = Output , Portd = Output ,
Config Pinc.3 = Input 'конфигурируем порты на выход
Portc.5 = 1
Portc.4 = 1
Dim I As Byte , X As Byte , Y As Byte , Temp As Integer , Bn(10) As Byte , Cifri(5) As Integer 'задаем всякие переменные и масивы '
'Dotx As Integer
Restore Dta ' говорим из какой таблици нужно заносить данные в масив
For I = 1 To 10 ' начало цикла
Read Bn(i) ' поочериде заносим ячейки из таблици в масив
Next ' конец цикла
Config Clock = Soft ' конфигурируем совтовые часы
_sec = 0 : _min = 0 : _hour = 0 ' задаем конкретные значения времени, с которого часы будут начинать считать при включении питания
Config Timer0 = Timer , Prescale = 8 ' конфигурируем таймер 0 чтоб потом на него повесить алгоритм отображения цифр
Config Timer1 = Counter , Edge = Falling , Prescale = 1 ' конфигурируем таймер 1 на подсчет импульсов на кварце, припаянного к Xtal1 Xtal2 на 32768 гц БЕЗ КОНДЕРОВ!
On Timer0 Pulse ' назначаем подпрограмму, которая будет запускатся по переполнению 1го таймера
Enable Interrupts 'разрешаем прерывания
Enable Timer0
Config Debounce = 30 'разрешаем таймер0
' начало основного цикла
Do
Debounce Pinc.4 , 0 , Minuti , Sub
Debounce Pinc.5 , 0 , Chasi , Sub
Temp = _hour * 100 ' "складываем" часы с минутами так чтобы получилось 4хзначное число тоесть 8часов+59мин = 859
Temp = Temp + _min
For I = 1 To 4 ' цикл разбиения склеенных часов с минутами на цифры и занесения каждой в таблицу масива
Cifri(i) = Temp Mod 10 ' берем последнюю цифру (9)
If Cifri(i) = 0 Then '
Cifri(i) = 10 '
Goto T '
End If '
Temp = Temp - Cifri(i) ' вычитаем из часов/минут последнюю цифру 859-9=850
T: '
Temp = Temp / 10 ' отбрасываем последний ноль 859/10=85
Next 'возвращаемся к началу цикла и заносим следующюю цифру в масив
' Dotx = _sec Mod 2
Loop 'конец основного цикла
End '
'
Pulse: ' подпрограмма прерываний таймера0
'If Pinc.3 = 0 Then
'Else
Incr X ' увеличиваем х на единицу, для выбора нужных цифр из таблици
Portb = &HFF ' гасим индикатор
Portd = Bn(cifri(x))
Set Portd.2
'If Dotx = 0 Then Reset Portd.2 Else Set Portd.2 ' подаем на индикатор цифру из масива Bn с номером cifri(x)
Y = X - 1 ' считаем какую конкретно цифру, из 4х нужно сейчас зажечь
Reset Portb.y ' зажигаем нужную цифру под номером игрик
If X = 4 Then X = 0 ' обнуляем х при достижении его величины 4
'End If
Return
' возвращаемся на место откуда прервали программу
Dta: ' таблица с данными о цифрах зажигает по порядку : 1234567890
Data &H88 , &HB3 , &HBA , &HD8 , &H7A , &H7B , &HA8 , &HFB , &HFA , &HEB '

Minuti:
Incr _min
If _min = 60 Then
_min = 00
Incr _hour
End If
If _hour > 23 Then _hour = 00
_sec = 00
Return
'
Chasi:
Incr _hour
If _hour > 23 Then _hour = 00
Return
Последний раз редактировалось Vittas Ср июн 24, 2015 19:26:33, всего редактировалось 1 раз.
Кот Темофей, открытая душа коту Василию принес в зубах мыша. И так тихонько не шурша оставил сей девайс для [color=#0000BF]РАДИОКОТА[/color]
Аватара пользователя
Vittas
Родился
Сообщения: 5
Зарегистрирован: Чт мар 25, 2010 21:35:26

Re: Простые светодиодные часы на Atmega8A

Сообщение Vittas »

А вот новая прошивка (V2.0), где код значительно уменьшен.
Изменения: Теперь при нажатии кнопки цифорки бегут сами, пока ее держишь.
Не нужно клацать 50 раз чтоб установить 50 минут.

$regfile = "m8def.dat" ' мега8
$crystal = 8000000
Config Portb = Output , Portd = Output : Portc = &H30
Dim I As Byte , X As Byte , Cifri(4) As Byte 'задаем всякие переменные и масивы
Config Clock = Soft 'конфигурируем софтовые часы
Config Timer0 = Timer , Prescale = 8 : On Timer0 Pulse : Enable Timer0
'конфигурируем таймер 0 чтоб потом на него повесить алгоритм отображения цифр
'назначаем подпрограмму, которая будет запускатся по переполнению 1-го таймера
Config Timer1 = Counter , Edge = Falling , Prescale = 1 : Enable Interrupts
' конфигурируем таймер 1 на подсчет импульсов на кварце, припаянного к Xtal1 Xtal2 на 32768 гц БЕЗ КОНДЕРОВ!
Do
'начало основного цикла
If Pinc.4 = 0 Then
Do
Incr _min : _sec = 00
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
Incr X : If X > 3 Then X = 0
Portd = Lookup(cifri(x + 1) , Dta)
Reset Portb.x
Return
'возвращаемся на место откуда прервали программу
Dta:
'таблица с данными о цифрах зажигает по порядку : 0123456789
Data &HEF , &H8C , &HB7 , &HBE , &HDC , &H7E , &H7F , &HAC , &HFF , &HFE
Последний раз редактировалось Vittas Ср июн 24, 2015 19:27:35, всего редактировалось 1 раз.
Кот Темофей, открытая душа коту Василию принес в зубах мыша. И так тихонько не шурша оставил сей девайс для [color=#0000BF]РАДИОКОТА[/color]
Аватара пользователя
АлександрЛ
Друг Кота
Сообщения: 43895
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

Re: Простые светодиодные часы на Atmega8A

Сообщение АлександрЛ »

EXEcutor_XS писал(а):Вобщем собрал, прошил, цифры есть...кнопки их меняют но сами часы не ходят...кварц менял, .
Фьюзы как прошили?
В этих часах должны стоять фьюзы для работы от ВНУТРЕННЕГО генератора 8 мГц, а от внешнего кварца тактируется только счётчик "тиков"
Аватара пользователя
Endry
Родился
Сообщения: 4
Зарегистрирован: Ср авг 19, 2015 12:20:25
Откуда: Краснодар

Re: Простые светодиодные часы на Atmega8A

Сообщение Endry »

SERYKOS писал(а):Меняю вариант печатки, проверено в железе,
на прошивку с О.К., секундными импульсами на 4ом выходе МК, но без автоотключения.

Доброго времени суток.
Подскажите пожалуйста, что озночает "автоотключение"?
Последний раз редактировалось Endry Ср авг 19, 2015 16:43:13, всего редактировалось 1 раз.
Аватара пользователя
АлександрЛ
Друг Кота
Сообщения: 43895
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

Re: Простые светодиодные часы на Atmega8A

Сообщение АлександрЛ »

Endry писал(а):Подскажите пожалуйста, что озночает "автоотключение"?
Это- гашение индикатора часов- до нажатия любой кнопки кроме "сброс", если она есть..
У меня часы с "автоотключением" ходили полгода от сборки из 3-х NiMg аккумуляторов, после чего я заменил аккумулятор на литиевый от "электронной сигареты" типа "PONS"
Изображение

Изображение

По "предварительным расчётам" могут проработать больше 5-ти лет..
Аватара пользователя
Endry
Родился
Сообщения: 4
Зарегистрирован: Ср авг 19, 2015 12:20:25
Откуда: Краснодар

Re: Простые светодиодные часы на Atmega8A

Сообщение Endry »

АлександрЛ писал(а):Это- гашение индикатора часов- до нажатия любой кнопки кроме "сброс", если она есть..
Простите, не понял функционал..."до нажатия любой кнопки кроме "сброс"" - это как? А то что экономит расход энергии это здорово.
Аватара пользователя
АлександрЛ
Друг Кота
Сообщения: 43895
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

Re: Простые светодиодные часы на Atmega8A

Сообщение АлександрЛ »

Просто кнопкой "сброс", если она есть- вы сбросите часы в 00:00.

зы.. В исходной схеме
http://radiokot.ru/circuit/digital/home/163/01.jpg
кнопки "сброс" нет, но её можно сделать, задействовав ногу "reset" МК..
прошивку и исходник для часов с гашением индикатора, написанный akl - можно найти вот тут: http://radiokot.ru/forum/viewtopic.php? ... 5#p2394055

зы.. Правда, лучше вместо ОДНОГО резистора поставить по резистору на каждый сегмент индикатора.. :dont_know:
Аватара пользователя
Endry
Родился
Сообщения: 4
Зарегистрирован: Ср авг 19, 2015 12:20:25
Откуда: Краснодар

Re: Простые светодиодные часы на Atmega8A

Сообщение Endry »

АлександрЛ писал(а): ...прошивку и исходник для часов с гашением индикатора, написанный akl - можно найти вот тут:...
И тут мне стало все ясно :idea: Спасибо.
Поясню для тех кто не в теме (таких как я, которые первый раз с этим столкнулись).
Гашение индикатора происходит в состоянии покоя (кнопки не нажимаются) по истечении заданного времени, т.е. переход в энергосберегающий режим до повторного нажатия кнопки. :beer:
Аватара пользователя
Smith2011
Прорезались зубы
Сообщения: 210
Зарегистрирован: Вс дек 26, 2010 23:08:53
Откуда: Москва, Зеленоград
Контактная информация:

Re: Простые светодиодные часы на Atmega8A

Сообщение Smith2011 »

Собирал данные часы, за сутки минут на 10 убегали или отставали, точно не помню...
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Простые светодиодные часы на Atmega8A

Сообщение akl »

Здесь получился другой результат. Правда, программа другая, с автоотключением индикации через 16 секунд бездействия со стороны оператора.
АлександрЛ Почти месяц с момента "запуска" часов прошел.. Ушли примерно на одну минуту..
Аватара пользователя
Endry
Родился
Сообщения: 4
Зарегистрирован: Ср авг 19, 2015 12:20:25
Откуда: Краснодар

Re: Простые светодиодные часы на Atmega8A

Сообщение Endry »

Всем привет.
Расскажите пожалуйста принцип работы "секундного" светодиода относительно итоговой схемы. (http://radiokot.ru/circuit/digital/home/163/04.jpg)
Аватара пользователя
АлександрЛ
Друг Кота
Сообщения: 43895
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

Re: Простые светодиодные часы на Atmega8A

Сообщение АлександрЛ »

В этой: http://radiokot.ru/circuit/digital/home/163/04.jpg схеме светодиод просто постоянно светится..
Ответить

Вернуться в «Статьи»