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

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

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

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

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

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

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

 
Опции темы
Непрочитано 20.03.2013, 10:26  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
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,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

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

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

Сообщение от omercury Посмотреть сообщение
Оба-на!
битовая...
Мой флаг! Какую хочу переменную, такую под него и выделю! И вапче!...
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 20.03.2013, 12:44  
metrA85
Прописка
 
Аватар для metrA85
 
Регистрация: 09.08.2007
Адрес: Харьков
Сообщений: 275
Сказал спасибо: 300
Сказали Спасибо 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,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot