Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Управление одной кнопкой.


Управление одной кнопкой.

Сообщений 1 страница 8 из 8

1

Всем добрый день!Решил освоить программирование в Bascom-avr так как очень много полезного можно на них сделать.
Первая моя задумка ,захотел я в своей машине поменять плафон освещения на другой и столкнулся с проблемой управления.
Так как на старом стоял переключатель а на новом просто кнопка на замыкание.Решил я сделать управление на ATTINY2313 просто она у меня оказалась в наличии.
С программированием давно не сталкивался,ну и начал вспоминать Basic ,включить выключить у меня получилось а вот алгоритм сделать не получается.
Вот и решил обратится к профессионалам с помощью,может вы мне поможете с простой задачей (для вас).
Алгоритм простой ,при первом нажатии на кнопку свет загорается при повторном тухнет,но при такой ситуации свет будет гореть если дверь открыта.Если нажать на кнопку и подержать 3 секунды свет должен потухнуть и при повторном удержании снова загореться.Если длительным нажатием мы выключили свет а необходимо его кратковременно включить,просто нажимаем и отпускаем кнопку свет зажигается принудительно.
Схему прилагаю :кнопка это та которая на плафоне тумблер это минус с концивика двери.
http://s1.uploads.ru/t/w89fk.png
Может поможете с кодом для ATTINY2313,или направьте в нужное русло.
Заранее спасибо!

0

2

напишите алгоритм, а мы поможем
писать вам с нуля явно никто не станет - надо и самому головой покумекать ;)

работы на 15-30 минут

0

3

Добрый день!Алгоритм приблизительно такой http://s1.uploads.ru/t/ZvG9X.png
У меня не получается выполнить команды на разных портах.с одним портом вроде получается а с двумя в обще ни чего.

Код:
$regfile = "attiny2313.dat"
$crystal = 4000000

Config Portb.0 = Output
Config Portb.1 = Output
Config Pind.0 = Input
Set Portd.0
Config Debounce = 254

Do
    Debounce Pind.0 , 0 , Led , Sub
Loop

led:
Toggle Portb.0

Return

Подскажите пожалуйста  :dontknow:

0

4

неверно
алгоритм должен иметь одну точку входа!

и напишите ваше задание точнее, вообще не понимаю

0

5

При подаче питания на портах выставлены (0),при однократном нажатии кнопки на выходе (PB0)появляется(1), при повторном нажатии появляется (0). При длинном нажатии в течении трех секунд появляется (1)на  выходе (PB1) при повторном удержании в течении трех секунд появляется (0) на выходе (PB1).

0

6

Код:
ждем нажатия кнопки
пауза 100 ms
кнопка нажата? если нет - в начало ' Защита от помех

пауза 900ms
кнопка нажата? если нет >> переход на "короткое нажатие"

пауза 2000ms
кнопка нажата? если нет - в начало 
"длинное нажатие"
   инвертировать PB1 (toggle PB1)
в начало



"короткое нажатие":
   инвертировать PB0 (toggle PB0)
в начало

Это самый простой и наглядный алгоритм определения времени нажатия и удержания нажатой кнопки
Он может быть иным, всё зависит от конкретной задачи
Можно считать в цикле время удержания, и по её отпусканию проверять время удержания
Можно по таймеру опрашивать время нажатия и инкременировать некую переменную длительности нажатия
Куча всего :)

0

7

Добрый день! Большое спасибо за подсказку,буду пробывать писать текст программы. :)

0

8

http://s1.uploads.ru/t/69aDE.png
Вот переписал код под tinny13.

Код:
$regfile = "attiny13.dat"
$crystal = 4800000

Config Portb.0 = Output
Config Portb.1 = Output
Config Pinb.4 = Input
Set Portb.4

Button Alias Pinb.4                                         'присваеваем имя button

Nachalo:
Do                                                          'начало цыкла

Waitms 100
      If Button = 1 Then Goto Nachalo                       'защита от помех
Waitms 100

      If Button > 0 Then Goto Kor                           'короткое нажатие
Waitms 300

      If Button = 1 Then Goto Nachalo                       'длинное нажатие

Toggle Portb.1
Goto Nachalo

Loop                                                        'конец цыкла

Kor:
Toggle Portb.0
Goto Nachalo

End

Может поправите если что не так.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Управление одной кнопкой.