roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 12:59

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 10:00 
Не в сети

Зарегистрирован: 31 мар 2009, 09:57
Сообщения: 27
Откуда: Мск
Здравствуйте!
Программирую в CodeVisonAVR.
Хочу сделать, чтобы МК переходил в спящий режим и возвращался из него по нажатию кнопки. По аналогии с кнопкой включения/выключения как на сотовом телефоне.

Может ли кто помочь примером на Си. Или хотя бы подсказать алгоритм работы прерывания в этом случае.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 10:19 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
кнопку с подтяжкой повесь на любое прерывание и будет тебе счастье.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 11:37 
Не в сети

Зарегистрирован: 31 мар 2009, 09:57
Сообщения: 27
Откуда: Мск
Ставлю следующий код в прерывание:
Код:
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)

{
if(PIND.2 == 0 && flag1==0)
    {
    sleep_enable();
    powerdown();
    flag1=1;   
    }
if(PIND.2 == 0 && flag1==1)
    {
    sleep_disable();
    }
     
   
}


он не работает, в чем ошибка?

ЗЫ. МК тина2313


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 11:44 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
я конечно в Сях полный ноль, но думаю всё таки нужно не только влючить прерывание, но сконфигурировать его
в васике это делается вот так

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

Config Pind.6 = Output
Config Pind.2 = Input
Config Int0 = Falling

Dim Wtime As Byte

On Int0 Stopbutton

Cls

Wtime = 255

Enable Interrupts
Enable Int0

Do
  Set Portd.6
  Waitms Wtime
  Reset Portd.6
  Waitms Wtime
Loop

Stopbutton:
  Lcd "stopъ!"
Return

End



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 11:54 
Не в сети

Зарегистрирован: 31 мар 2009, 09:57
Сообщения: 27
Откуда: Мск
Сконфигурированно по изменению напряжения.
Код:
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
// INT1: On
// INT1 Mode: Any change
// INT2: Off
GICR|=0xC0;
MCUCR=0x05;
MCUCSR=0x00;
GIFR=0xC0;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 11:57 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
ну тогда жди Сишников.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 12:00 
Не в сети

Зарегистрирован: 31 мар 2009, 09:57
Сообщения: 27
Откуда: Мск
EdGull писал(а):
ну тогда жди Сишников.

Ждем-с. Надеюсь, что подскажут. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 12:34 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
1. Прерывание сделать по переходу из 1 в 0.
2. В прерывании ввести задержку для устранения дребезга контактов.
3. Проверять состояние ноги в прерывании нет необходимости, сам факт прерывания будет говорить о том, что кнопка нажата.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 14:09 
Не в сети

Зарегистрирован: 31 мар 2009, 09:57
Сообщения: 27
Откуда: Мск
1. Прерывание сделать по переходу из 1 в 0.
Это Low Level или Falling Edge?

2. В прерывании ввести задержку для устранения дребезга контактов.
3. Проверять состояние ноги в прерывании нет необходимости, сам факт прерывания будет говорить о том, что кнопка нажата.

Согласен, просто сначала не подумал. ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 14:13 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Edge = переход

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 14:38 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
blindman писал(а):
1. Прерывание сделать по переходу из 1 в 0.
2. В прерывании ввести задержку для устранения дребезга контактов.
3. Проверять состояние ноги в прерывании нет необходимости, сам факт прерывания будет говорить о том, что кнопка нажата.

Нафига тогда на дребезг проверять ???


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 14:41 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Чтобы не выхватить еще одно прерывание

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 14:44 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
ferio писал(а):
1. Прерывание сделать по переходу из 1 в 0.
Это Low Level или Falling Edge?


ПЕРЕВОД он-лайн http://www.Translate.ru <- ИСПОЛЬЗУЙТЕ !

blindman писал(а):
Чтобы не выхватить еще одно прерывание
Задержка наверно не поможет без очистки флага от дребезга.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 14:46 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
blindman писал(а):
Чтобы не выхватить еще одно прерывание

Опа, а при размыкании кнопки же тоже дребезг будет. Надо это тоже как-то учитывать.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как запрограммировать "кнопку" вкл/выкл
СообщениеДобавлено: 31 мар 2009, 14:50 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
blindman писал(а):
blindman писал(а):
Чтобы не выхватить еще одно прерывание

Опа, а при размыкании кнопки же тоже дребезг будет. Надо это тоже как-то учитывать.


Наверно в прерывании надо делать паузу 50-100 мС и потом смотреть все же какой уровень на ноге.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO