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

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

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

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

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

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

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

 
Опции темы
Непрочитано 21.03.2013, 11:04  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от whoim Посмотреть сообщение
расскажите, как работаете со счетчиком в полубайте?
Счётчик в старших 5 битах. Счётчик++ это байт+8, очень просто.

Сообщение от Yurkin2007 Посмотреть сообщение
А зачем эти флаги нужны?
Эти флаги нужны, чтобы опрашивать состояние кнопки в любом месте программы. Флаг ON соответствует состоянию (status) кнопки. Флаги UP и DOWN - события (event), обычно анализируются сразу после опроса кнопки.

Стандартно так:
__считываем состояние порта с кнопками (pin) в регистр, ну пусть его звать Р1

__ вызываем описанный мной анализатор состояния с аргументами: адрес байта (Y) и битовая маска с одной единичкой в бите, где кнопка. Это пусть регистр М1. Возвращается Y+1, М1=обновлённые счётчик кнопки+флаги, Р1 не изменяется.
__Анализируем флаги (Y и Р1 не трогаем)
Байты кнопок расположены последовательно, поэтому для следующей кнопки задаём её маску и вызываем анализатор, Y уже указывает на её байт, Р1 помнит её состояние.

Такой участок алгоритма для кнопок.
Реклама:

Последний раз редактировалось makakus; 21.03.2013 в 11:08.
makakus вне форума  
Сказали "Спасибо" makakus
whoim (21.03.2013)
Непрочитано 21.03.2013, 12:31  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от makakus Посмотреть сообщение
Счётчик в старших 5 битах
00011111 - максимум?

Сообщение от makakus Посмотреть сообщение
Счётчик++ это байт+8
uint8_t cnt = cnt + 8; ?
минус -- так же?

как проще "вытащить" значение, для проверки скажем?

спасибо!

Последний раз редактировалось whoim; 21.03.2013 в 12:34.
whoim вне форума  
Непрочитано 21.03.2013, 12:35  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Кстати, на всех демобордах, что я видел, любая кнопка всегда подключена через интегральную цепочку. В общем, лишний конденсатор погоды не сделает, но сколько нервов спасет разработчику. Так что лично я этим способом тоже не брезгую. Там только при переходе через половину питания дребезг может возникнуть. Но этот дребезг совершенно точно определен по длительности постоянной времени. Поэтому и фильтровать его программно на много проще.
Easyrider83 вне форума  
Непрочитано 21.03.2013, 13:26  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от whoim Посмотреть сообщение
00011111 - максимум?
В СТАРШИХ битах, максимум это 11111000. Сделано, чтобы не париться с переполнениями: 00000000-00001000 = 11111000, 11111000+1000 = 00000000. Хотя переполнений там быть не должно, счётчик работает "с упорами".
Думаете, 5 разрядов мало? Нет, результат будет минимум через 160 мс после нажатия если опрос через 10 мс - это нормально или даже многовато, если взять микрик и с бешеной скоростью его щёлкать, то программа не всегда успевает. Делал опрос через 20 мс, когда нужна была "тупая" кнопка для запуска большого мотора. Там так и надо: нажал, держишь - мотор начал раскручиваться. Получается, пока не увидишь реакцию мотора, держишь кнопку, секунду наверное . А если быстренько ткнул, он не обращает внимания. Солидный, уважения требует

Сообщение от whoim Посмотреть сообщение
как проще "вытащить" значение, для проверки скажем?
Что значит "вытащить"? Значение счётчика вам не нужно, это, как говорят в ООП, приватный член класса. Флаг вытащить? #define BON 1; if(cnt & BON) {}, не?
makakus вне форума  
Непрочитано 21.03.2013, 14:16  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Обычно с кнопками поступаю примерно так;

PHP код:

#define Td 16  // время дребезга
#define Tp 128 // время непрерывного нажатия до повтора
#define Tr 64  //  время между автоповтором 

unsigned char kb;
// == вызывается раз в 10 мс
// == sos - состояение битика кнопки
char GetKBunsigned char *kchar sos)
{
   if( 
sos == )
      {
         *
0;
          return 
0;
      }
   *
k++;
    if( *
== Td )  return 1// время выдержки кнопки в 1 без дребезга;
    
if( *== Tp )             // срабатываниу кнопки
    
{
        *
= ( tp Tr) ;        //  автоповтор 
        
return 1;  
    }
        return 
0;

А в остальном "вариации на заданную тему", зависящие конкретно от задачи, количества и функций кнопок.
Boba_spb вне форума  
Непрочитано 21.03.2013, 15:18  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от makakus Посмотреть сообщение
В СТАРШИХ битах
тьфу, считал что старшие - это от 0 и выше) А нумерация принята вроде как справа-налево

Сообщение от makakus Посмотреть сообщение
не?
да я не для проверки кнопок, хочется для других целей засунуть в один байт и счетчик и флаги))
Передавать в байте с компа на МК а там читать
whoim вне форума  
Непрочитано 21.03.2013, 15:21  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

по кнопка - делал так, вродь работает
Код:
		//опрашиваем кнопки
		if(!(PINB&(1‹‹BUT_MODE))) { //BUT_MODE
			last_press_time = millis;		
			while(!(PINB&(1‹‹BUT_MODE))) pause(1);
			//определим долгое нажатие
			if ((millis - last_press_time) › KEYPRESS_DELAY_SETUP) { //больше пяти секунд
				.....
			}
			else { //если короткое нажатие
			....
			}
		} //BUT_MODE
whoim вне форума  
Непрочитано 21.03.2013, 15:36  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от whoim Посмотреть сообщение
для других целей засунуть в один байт и счетчик и флаги))
Я не против... вроде показал уже, как счётчик работает мимо флагов.
makakus вне форума  
Непрочитано 21.03.2013, 21:57  
whoim
Почётный гражданин KAZUS.RU
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

makakus, непонятно как сравнить его значение с десятичным представлением, например
whoim вне форума  
Непрочитано 21.03.2013, 22:23  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Опрос кнопки/клавиатуры

Сообщение от whoim Посмотреть сообщение
как сравнить его значение
Ну как - сдвинуть его на место, на котором он был бы, если бы не было флагов:
Код:
    if ( (counter››3) › 16  )
        printf("Дождались!\r");

Хотя, быстрее так:
Код:
    if ( counter&0xF8 › 16‹‹3  )
        printf("Дождались!\r");
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 21.03.2013 в 22:26.
tempora вне форума  
Сказали "Спасибо" tempora
whoim (23.03.2013)
 

Закладки
Опции темы

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

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:25.


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