Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Опрос кнопки/клавиатуры

Непрочитано 20.03.2013, 10:26  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от Alex9797 Посмотреть сообщение
А на другие надо отреагировать мгновенно (конечно, с учетом интервалов таймера).
Если Вы про концевики, оптоограждения, коврики и аварийные кнопки, то и без учёта. Но такие вещи обрубают всё не только на программном, но и на физическом уровне, да и приоритет у них наивысший. Не кнопки это.
Реклама:
omercury вне форума  
Непрочитано 20.03.2013, 10:44  
aan20132
Временная регистрация
 
Регистрация: 17.07.2006
Сообщений: 70
Сказал спасибо: 20
Сказали Спасибо 8 раз(а) в 6 сообщении(ях)
aan20132 на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от ut1wpr Посмотреть сообщение
А вообще, мне кажется, что каждый давно отработал подобные процедуры "под себя" и не заморачивается. Потому как разные программные алгоритмы потянут за собой разные подходы к опросу кнопок-датчиков. Не совсем корректно настаивать на каком-то одном варианте. Абсолютной истины не существует.
Поддерживаю.
Гораздо эффективнее будет, ув. Frensis777, если Вы опишите свою конкретную задачу и все вместее её разберем. Сколько ситуаций - столько и конкретных решений. А всё универсальное, ИМХО, слишком тормозное и громоздкое, даже если корректно работает.
aan20132 вне форума  
Непрочитано 20.03.2013, 11:40  
Frensis777
Прописка
 
Аватар для Frensis777
 
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Frensis777 на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от Easyrider83 Посмотреть сообщение
В прерывании мы только поднимаем флаг. Больше ничего.
Так-сс, а можно поподробнее про флаг. И пример приведите, пожалуйста, тов.Easyrider83.
Frensis777 вне форума  
Непрочитано 20.03.2013, 12:02  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от Frensis777 Посмотреть сообщение
Так-сс, а можно поподробнее про флаг. И пример приведите, пожалуйста, тов.Easyrider83.
Это была шутка?
Флаг - любая байтовая переменная с пометкой volatile.
Ноль = флаг снят. Не ноль = установлен.
Если камень 32 бита, переменная типа long.
Easyrider83 вне форума  
Непрочитано 20.03.2013, 12:30  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от Easyrider83 Посмотреть сообщение
Флаг - любая байтовая переменная
Оба-на!
битовая...
omercury вне форума  
Непрочитано 20.03.2013, 12:32  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от omercury Посмотреть сообщение
Оба-на!
битовая...
Мой флаг! Какую хочу переменную, такую под него и выделю! И вапче!...
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 20.03.2013, 12:44  
metrA85
Прописка
 
Аватар для metrA85
 
Регистрация: 09.08.2007
Адрес: Харьков
Сообщений: 274
Сказал спасибо: 296
Сказали Спасибо 113 раз(а) в 56 сообщении(ях)
metrA85 на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от Easyrider83 Посмотреть сообщение
Это была шутка?
Флаг - любая байтовая переменная с пометкой volatile.
Ноль = флаг снят. Не ноль = установлен.
Если камень 32 бита, переменная типа long.
Эдак можно столько байт под флаги нарубить... куда экономичнее будет юзать отдельные биты для флага (на то он и флаг - емеет два состояния 0 и 1)
metrA85 вне форума  
Непрочитано 20.03.2013, 12:45  
Frensis777
Прописка
 
Аватар для Frensis777
 
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Frensis777 на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от Easyrider83 Посмотреть сообщение
Это была шутка?
Флаг - любая байтовая переменная с пометкой volatile.
Ноль = флаг снят. Не ноль = установлен.
Если камень 32 бита, переменная типа long.
Ну понятно, ясно. Теперь два момента:
1) Что такое метка Volatile, где она ставится, или где можно о ней прочитать?
2) Интересует, де-факто, по умолчанию мировой сложившийся стандарт на опрос клавиатуры. Что это за документ, МЭК и т.д., где можно почитать? А именно интересует через какое время должна быть опрошена клавиатура из N клавиш с одинаковым приоритетом, если делать опрос по прерыванию от таймера/счетчика?
Frensis777 вне форума  
Непрочитано 20.03.2013, 12:55  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от omercury Посмотреть сообщение
Оба-на!
битовая...
Именно байтовая. Ибо на проверку установки бита уходит еще несколько циклов. К битам стоит прибегать, если пытаетесь впихнуть невпихуемое. Тут да, жесткая экономия на всех этапах.
Сообщение от Frensis777 Посмотреть сообщение
Ну понятно, ясно. Теперь два момента:
1) Что такое метка Volatile, где она ставится, или где можно о ней прочитать?
Ответ легко гуглится. Скажем так - переменная, используемая в теле программы и в прерывании должна быть помечена, как volatile.
Сообщение от Frensis777 Посмотреть сообщение
2) Интересует, де-факто, по умолчанию мировой сложившийся стандарт на опрос клавиатуры. Что это за документ, МЭК и т.д., где можно почитать? А именно интересует через какое время должна быть опрошена клавиатура из N клавиш с одинаковым приоритетом, если делать опрос по прерыванию от таймера/счетчика?
Да, мировой стандарт от 1966 года ISO 18290 или ГОСТ 20081983 от 1971 года.
зы шютка
Easyrider83 вне форума  
Непрочитано 20.03.2013, 12:56  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от ut1wpr Посмотреть сообщение
Для работы с кнопками ... Использую прерывания в 1 мсек.
Для каждой кнопки создаю 8 бит переменную-накопитель, счетчик антидребезга.
Код:
#define delay_time     25
..................
if( BTN1_ON ) cnt1 = 0; else if( cnt1 ‹ delay_time ) cnt1++;
if( BTN2_ON ) cnt2 = 0; else if( cnt2 ‹ delay_time ) cnt2++;
if( BTN3_ON ) cnt3 = 0; else if( cnt3 ‹ delay_time ) cnt3++;
По байту под каждую кнопку - многовато, на мой взгляд, да и по одному if-els'у с одним инкрементом - тоже.
Как известно, человек - самое медленное периферийное устройство, поэтому, нажатие кнопок, в масштабе времени м/к, можно рассматривать как одну ситуацию для всех кнопок. При таком подходе можно:
- всю коллекцию кнопок упрятать в одну переменную,
- отрабатывать антидребезг одним счетчиком,
- проверять окончание дребезга одним на все кнопки набором операторов if-else.

Код:
/********** Keyboard data */
#define     READKEYB_      ((~PINx) & _KEYS_MASK_)
#define     DEBOUNCE_MIN  5

enum            {ksReady=0, ksInProc} eKeyState;

unsigned char   ucDebounceCounter,
                ucOldKeys = 0, ucNewKeys,

/********** Common data */
unsigned char ucAppFlags;

void pin_change_isr(void) // keyboard ISR
{
    ucNewKeys = READKEYB;
    if (ksReady == eKeyState){
      ucOldKeys = ucNewKeys;
      eKeyState = ksInProc;
    }
}

void timer0_ovf_isr(void) // timer ISR
{
unsigned char i;

    if (ksInProc == eKeyState){

      ucNewKeys = READKEYB;

      if (ucNewKeys == ucOldKeys){// if KBRD's stable - inc bebounce timeout
        if (++ucDebounceCounter ›= DEBOUNCE_MIN){

          ucAppFlags |= AF_KEYB;
          eKeyState = ksReady;
          ucDebounceCounter = 0;
        }
    }
}

void DoKeyPressed(unsigned char ucKeys)
{
    switch (ucKeys){

      case _KEY1_:
        break;
      ...
    }
}

void main(void)
{
    ...
    while ( true )
    {
      ...
      if ( ucAppFlags & AF_KEYB )
      {
        ucAppFlags &= ~(AF_KEYB);
        DoKeyPressed(ucOldKeys);
      }
      ...
    }
}
Разумеется, факт нажатия кнопки можно обнаруживать и по таймеру, здесь просто вариант с прерыванием PIN_CHANGE от кнопок.
Возможно пригодится, как вариант.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опрос кнопки на atmega 16 2517212 Микроконтроллеры, АЦП, память и т.д 10 31.03.2012 10:22
Опрос клавиатуры ra0wbj Микроконтроллеры, АЦП, память и т.д 3 13.10.2011 21:40
Опрос матричной клавиатурки на МК serb-radio Электроника - это просто 2 31.07.2009 16:32
Опрос удалённых датчиков. picavr Микроконтроллеры, АЦП, память и т.д 6 20.03.2009 01:09
Опрос кнопки Electric111 Микроконтроллеры, АЦП, память и т.д 15 18.12.2007 22:48


Часовой пояс GMT +4, время: 21:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.