Программирование BASCOM
Меню сайта
Категории каталога
Мои статьи [114]
Наш опрос
Оцените мой сайт
Всего ответов: 1166
Главная » Статьи » Мои статьи

Софтовые часы на МЕГЕ-8 (очень простые)
Вот собранный девайс.
 
Подходящий жмут проводов - исключительно для програмирования и питания, после заливки - можно смело отпаивать! Еще на фотке видно резюк (200 Ом) - он стоит последовательно питанию, поскольку у меня 5ти вольтовый БП, а индикатору нужно меньше.
 

 

 

 

Часы считаются софтово.
Config Clock = Soft                                         
от кварца, подцепленного на xtal1 (2)
Кстати уже двое суток идут секунда в секунду с компом.
Кварц со звездочкой, поскольку не знаю его номинала а только догадываюсь, он без обозначений.

 

Я заказывал вот такие индикаторы на Алиэкспресс: 

красные - https://goo.gl/yj59qt
синие - https://goo.gl/plr0pu 
можно применить такие:
зелёные - https://goo.gl/cIlQdM
белые - https://goo.gl/PbLqgG
 
Окончательный код:
 
' Пример часов которые отображают часы и минуты на семисегментном
' четырехсимвольном светодиодном индикаторе
' прога для ознакомления, работает 100%
' выставленные фюзы (в понипроге стоят галки на):CKOPT,BOOTSZ1,BOOTSZ0,SUT1,SUT0,CKSEL3,CKSEL1,CKSEL0
' Кварц выдрал из маленького тетриса с часами, думаю также подойдет из любых кварцевых наручных/настенных часов
'насчет точности - терпения больше 2х дней не хватило, идут точно, секунда в секунду.
'e-mail P-a-h-a@yandex.ru
$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 
А вот новая прошивка (V2.0), где код значительно уменьшен.
<Изменения: 
Теперь при нажатии кнопки цифорки бегут сами, пока ее держишь. 
Не нужно клацать 50 раз чтоб установить 50 минут.
'e-mail P-a-h-a@yandex.ru
$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

Категория: Мои статьи | Добавил: bascom (01.09.2009)
Просмотров: 22175 | Комментарии: 18
Всего комментариев: 181 2 »
18  
Вы прикинте, два дня парился с Atmega16 и в итоги наткнулся на это - http://atmega32-avr.com/real-time-clock-atmega16/
Кварц подцепляют не на Xtail на на осциллятор surprised
http://atmega32-avr.com/wp-content/uploads/2012/06/Real-Time-Clock-M16_sch.gif

17  
Прошу прощения, это был общий минус. А с общим плюсом вот он:
 
Код
'e-mail P-a-h-a@yandex.ru
$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 = &H0
Incr X : If X > 3 Then X = 0
Portd = Lookup(cifri(x + 1) , Dta)
Set Portb.x
Return  '  возвращаемся на место откуда прервали программу
  Dta:  '  таблица с данными о цифрах зажигает по порядку : 0123456789
  Data &H10 , &H73 , &H48 , &H41 , &H23 , &H81 , &H80 , &H53 , &H0 , &H1

16  
В железе не проверял, код для общего плюса. Отпишитесь о результатах.
Код
' Пример часов которые отображают часы и минуты на семисегментном
' четырехсимвольном светодиодном индикаторе
' прога для ознакомления, работает 100%
' выставленные фюзы (в понипроге стоят галки на):CKOPT,BOOTSZ1,BOOTSZ0,SUT1,SUT0,CKSEL3,CKSEL1,CKSEL0
' Кварц выдрал из маленького тетриса с часами, думаю также подойдет из любых кварцевых наручных/настенных часов
'насчет точности - терпения больше 2х дней не хватило, идут точно, секунда в секунду.
'e-mail P-a-h-a@yandex.ru
$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

15  
Термостат бы, для силы

13  
Доброго времени суток а возможно ли переделать прошивку под индикаторы с общим плюсом ?
Зарание благадарен !

12  
Подскажите, а для CodeVision фьюзы такие же?

11  
bascomavr.3bb.ru/ где то на этом форуме компилятор выложен. bascomavr называется. В нем и скомпилировать можно

10  
Помогите пожалуйста, как этот код перевести в HEX

9  
Извиняюсь, увидел, думал это код всё.

8  
Скажите, пожалуйста, какие фьюзы выставит в PonyProg ? Спасибо.

1-10 11-15
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 3
Гостей: 3
Пользователей: 0
Copyright Radan Studio © 2017