Всем добрый день!Решил освоить программирование в Bascom-avr так как очень много полезного можно на них сделать.
Первая моя задумка ,захотел я в своей машине поменять плафон освещения на другой и столкнулся с проблемой управления.
Так как на старом стоял переключатель а на новом просто кнопка на замыкание.Решил я сделать управление на ATTINY2313 просто она у меня оказалась в наличии.
С программированием давно не сталкивался,ну и начал вспоминать Basic ,включить выключить у меня получилось а вот алгоритм сделать не получается.
Вот и решил обратится к профессионалам с помощью,может вы мне поможете с простой задачей (для вас).
Алгоритм простой ,при первом нажатии на кнопку свет загорается при повторном тухнет,но при такой ситуации свет будет гореть если дверь открыта.Если нажать на кнопку и подержать 3 секунды свет должен потухнуть и при повторном удержании снова загореться.Если длительным нажатием мы выключили свет а необходимо его кратковременно включить,просто нажимаем и отпускаем кнопку свет зажигается принудительно.
Схему прилагаю :кнопка это та которая на плафоне тумблер это минус с концивика двери.
Может поможете с кодом для ATTINY2313,или направьте в нужное русло.
Заранее спасибо!
Управление одной кнопкой.
Сообщений 1 страница 8 из 8
Поделиться12012-09-18 16:14:19
Поделиться22012-09-18 17:30:46
напишите алгоритм, а мы поможем
писать вам с нуля явно никто не станет - надо и самому головой покумекать 
работы на 15-30 минут
Поделиться32012-09-18 19:43:40
Добрый день!Алгоритм приблизительно такой 
У меня не получается выполнить команды на разных портах.с одним портом вроде получается а с двумя в обще ни чего.
$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Подскажите пожалуйста 
Поделиться42012-09-18 20:38:54
неверно
алгоритм должен иметь одну точку входа!
и напишите ваше задание точнее, вообще не понимаю
Поделиться52012-09-18 23:16:31
При подаче питания на портах выставлены (0),при однократном нажатии кнопки на выходе (PB0)появляется(1), при повторном нажатии появляется (0). При длинном нажатии в течении трех секунд появляется (1)на выходе (PB1) при повторном удержании в течении трех секунд появляется (0) на выходе (PB1).
Поделиться62012-09-19 08:08:58
ждем нажатия кнопки пауза 100 ms кнопка нажата? если нет - в начало ' Защита от помех пауза 900ms кнопка нажата? если нет >> переход на "короткое нажатие" пауза 2000ms кнопка нажата? если нет - в начало "длинное нажатие" инвертировать PB1 (toggle PB1) в начало "короткое нажатие": инвертировать PB0 (toggle PB0) в начало
Это самый простой и наглядный алгоритм определения времени нажатия и удержания нажатой кнопки
Он может быть иным, всё зависит от конкретной задачи
Можно считать в цикле время удержания, и по её отпусканию проверять время удержания
Можно по таймеру опрашивать время нажатия и инкременировать некую переменную длительности нажатия
Куча всего 
Поделиться72012-09-19 13:09:05
Добрый день! Большое спасибо за подсказку,буду пробывать писать текст программы. 
Поделиться82012-09-21 13:20:01

Вот переписал код под 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Может поправите если что не так.