Реле Времени На Attiny13A + Оптимизация Кода На Bascom-Avr

30-07-2013, 11:58 От: admin Посмотрели: 1274
Доброго времени суток!

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

идея такая:

в 8:00 включается светодиодная подсветка (типа имитация восхода , как нибудь соберу ШИм)

в 9:00 включается основное освещение

через 11 или 12 или 13  часов (в зависимости от программы)  отключается основное освещение  и вкл светодиодная подсветка на 1 час(типа имитация заката), потом все гаснет до 8:00



есть 1 кнопка ( выбор программы ) , LED1 светодиод мигающий раз в секунду, LED2 светодиод отображающий переход в режим программирования, и два реле ( пока на схеме вместо них вокнул светодиоды REL1, REL2)



при надатии на кнопочку контроллер переходит в режим "прогрпм"  и зажигает светодиод LED2

при втором нажатии  светодиод LED2 мигнет один раз и выберется программа для таймера со световым днем 11 ч

при третьем нажатии  светодиод LED2 мигнет 2 раза и выберется программа для таймера со световым днем 12 ч

при 4 нажатии  светодиод LED2 мигнет 3 раза и выберется программа для таймера со световым днем 13 ч

при 5 нажатии  светодиод LED2 мигнет 4 раза  с длиннным гашением светодиода  контроллер запомнит тек. время  и сбросит часы на 00:00

при 6 нажатии  светодиод LED2 погаснет  контроллер восстановит  запомненное  время  и выйдет из режима программирования



если кнопочку после выбора программы не нажимать то через 30 сек  контроллер применит программу  и выйдет из режима программирования



так как я контроллер держу в руках первый раз, то и среду программирования я выбрал первую попавшуюся , а попал я на BASCOM-AVR ( пока разобрался с синтаксисом... ужос, потратил целый день)

так вот, написал прогу, откомпилел  и скормил ее Proteus-у где побыстрому накидал схему, запустил, вроде все работает, но вот беда, не всегда отзывается на нажатие кнопки



и вот, друзья, может кто поможет доброму человеку, начинающиму мега програмЁру   оптимизировать мою первую программу , и может окажите помощь в поиске багов?

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 16
$framesize = 16
$noramclear

Dim S As Byte
Dim M As Byte
Dim H As Byte
Dim Bt As Byte

Dim S1 As Byte
Dim M1 As Byte
Dim H1 As Byte
Dim R1 As Bit
Dim R2 As Bit
Dim Onof(4) As Byte

Config Pinb.1 = Input 'Button
Config Portb.0 = Output 'реле 1
Config Portb.2 = Output 'реле 2
Config Portb.3 = Output 'LED1-секунд
Config Portb.4 = Output 'LED2-reset

Rel1 Alias Portb.0
Rel2 Alias Portb.2
Led1 Alias Portb.3
Led2 Alias Portb.4

Button Alias Pinb.1

H = 0
M = 0
S = 0
Bt = 0
R1 = 0
R2 = 0
' *************
Onof(1) = 8
Onof(2) = 9 ' (световой день 12 часов)
Onof(3) = 21
Onof(4) = 22
' *************
Do
Debounce Button , 0 , Knopka , Sub
If S >= 59 Then 'если S=60 то +1 минута
S = 0
If M = 59 Then 'если М=60 то +1 час
M = 0
If H = 23 Then
H = 0
Else
Incr H '+1 min
End If
Else
Incr M '+1 min
End If
Else
Incr S '+1 sec
End If
If S = 30 Then 'сброс лед2 через 30 секунды
Led2 = 0
Bt = 0
End If
Select Case H 'H
Case Onof(1): '8
Rel1 = 0
Rel2 = 1
R1 = 0
R2 = 1 '9
Case Onof(2):
Rel1 = 1
Rel2 = 0
R1 = 1
R2 = 0
Case Onof(3) : '21
Rel1 = 0
Rel2 = 1
R1 = 0
R2 = 0
Case Onof(4) : '23
Rel1 = 0
Rel2 = 0
R1 = 0
R2 = 0
End Select
Led1 = 1
Waitms 500
Debounce Button , 0 , Knopka , Sub
Led1 = 0
Waitms 498
Loop
End

Knopka: 'обработка кнопки
Select Case Bt
Case 0:
Led2 = 1 '1 раз нажата- переход в режим программирования
S1 = S
S = 0
Case 1:
S1 = S + S1
S = 0 '2 раз нажата - время вкл 9:00 время Откл 20:00 (световой день 11 часов)
Onof(3) = 20
Onof(4) = 22
Led2 = 0
Waitms 350 ' и мегаем светодиодом 1 раз
Led2 = 1
Case 2:
S1 = S + S1
S = 0 '3-раза нажата - время вкл 9:00 время Откл 21:00 (световой день 12 часов)
Onof(3) = 21
Onof(4) = 22
Led2 = 0
Waitms 250 ' и мегаем светодиодом 2 раз
Led2 = 1
Waitms 250
Led2 = 0
Waitms 250
Led2 = 1
Case 3:
S1 = S + S1
S = 0 '4-раза нажата - время вкл 9:00 время Откл 22:00 (световой день 13 часов)
Onof(3) = 22
Onof(4) = 23
Led2 = 0
Waitms 200
Led2 = 1
Waitms 200
Led2 = 0
Waitms 200
Led2 = 1
Waitms 200
Led2 = 0
Waitms 200
Led2 = 1 '5-раза нажата - установка времени 00:00:00
Case 4:
' и мигаем 4 раз с длиннным гашением светодиода
H1 = H
M1 = M
S1 = S
H = 0
M = 0
S = 0
Led2 = 0
Waitms 500
Led2 = 1
Waitms 200
Led2 = 0
Waitms 500
Led2 = 1
Waitms 200
Led2 = 0
Waitms 500
Led2 = 1
Waitms 200
Led2 = 0
Waitms 500
Led2 = 1

Case 5:
'возврат старого времени+10 сек
H = H1 'и гасим светодиот программирования
M = M1
S = S1 + 30
Rel1 = R1
Rel2 = R2
Led2 = 0
End Select


If Bt = 5 Then
Bt = 0
Else
Incr Bt
End If
Return

и схемка

Прикрепленные миниатюры





  • 00000000000000.jpg





Раздел: МК для начинающих

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Реле Времени На Attiny13A + Оптимизация Кода На Bascom-Avr все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031