Доброго времени суток!
Вот впервые решил взяться за контроллеры, откопал где-то 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-у где побыстрому накидал схему, запустил, вроде все работает, но вот беда, не всегда отзывается на нажатие кнопки
и вот, друзья, может кто поможет доброму человеку, начинающиму мега програмЁру оптимизировать мою первую программу , и может окажите помощь в поиске багов?
и схемка
Раздел: МК для начинающих
Вот впервые решил взяться за контроллеры, откопал где-то 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
и схемка
Раздел: МК для начинающих