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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

Закрытая тема
Опции темы
Непрочитано 09.01.2014, 14:00   #11
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Делайте на счетчике, как я написал, там нечему "не работать".
Алгоритм таков, что можно делать несколько задержек на одной кнопке.

ps
Если вы не можете за две c лишним недели осмыслить написанное (этот примитив) - может вам вообще не стоит этим заниматься?
Реклама:
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 10.01.2014, 14:16   #12
ua3rad
Временная регистрация
 
Регистрация: 04.02.2013
Сообщений: 78
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ua3rad на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Сообщение от gary2007 Посмотреть сообщение
Если вы не можете за две c лишним недели осмыслить написанное (этот примитив) - может вам вообще не стоит этим заниматься?
Я этим не занимался. Наверное еще течении еще 1-2 недель не смогу поработать над моей программой. Да к тому же датчики еще не прислали.
ua3rad вне форума  
Непрочитано 10.01.2014, 14:52   #13
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

https://kazus.ru/forums/showthread.p...E8%ED%ED%EE%E5
omercury вне форума  
Непрочитано 11.01.2014, 05:56   #14
andrey9806
Временная регистрация
 
Регистрация: 08.02.2011
Сообщений: 74
Сказал спасибо: 8
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
andrey9806 на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Сообщение от Easyrider83 Посмотреть сообщение
Антидребезг у вас мощный, andrey9806!
Я делаю иначе. По перепаду фронта по кнопке запускается прерывание, которое запускает таймер. Таймер вызывает прерывание и инкременирует счетчик. Прерывание смотрит, нажата ли кнопка и инкременирует второй счетчик, если нажата и третий, если не нажата. Если третий переполнился - кнопка отпущена. Тормозим таймер. Измеряем второй счетчик. Сколько в нем значений, столько долго держали кнопку нажатой. И не важно, было ли случайное срабатывание или нет.
как ни странно все работает
так как вся у меня прошивка написана на прерываниях усложнять нет
смысла только морока

да и таймеры не лишние 2 счетчика на кнопку
кроме этого при обработке нажатия дребезг можно легко отсеять как слишком короткое нажатие

попробуй сделать 3 кнопки

а еще аналоговый фильтр на оу и мелкий мк поставить для устранения..

Последний раз редактировалось andrey9806; 11.01.2014 в 05:58.
andrey9806 вне форума  
Непрочитано 12.01.2014, 11:20   #15
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Несколько функций на одной кнопке

Сообщение от andrey9806 Посмотреть сообщение
а еще аналоговый фильтр на оу и мелкий мк поставить для устранения..
Видел я такое.

Примитивная установка. Кнопка пуск, стоп и концевик.
Кнопка пуск запускает мотор, на валу (после редуктора) стоит концевик.
МК отсчитывает 15 оборотов и останавливает мотор.

Так там - да. На каждой кнопке и концевике стояло по ОУ, фильтр второго порядка и ещё по два диода. Два импульсных преобразователя для питания как МК, так и реле. Ну всё это от сетевого миниатюрного трансформатора питалось.

Насоветуете щас, потом плоды таких горе-разработчиков будут по всей стране вспоминать.
Godzilla82 вне форума  
Непрочитано 13.01.2014, 11:26   #16
MaxiMuz79
Гражданин KAZUS.RU
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
MaxiMuz79 на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Наверное самый простой и эффективный алгоритм (имхо) реализующий , как мною описано выше , функцию антидребезга + фиксация короткого и длинного нажатия (t› 3 сек). Период опроса кнопки сделал = 0,1сек. Проверено на двух устройствах с кнопками одинакового типа, лишних или ошибочных срабатываний не было обнаруженно.
Фрагмент кода:
Код:
/*-----------------------------------------------------------------------------------------*/
/*	Обьявление ПЕРЕМЕННЫХ и КОНСТАНТ :					*/
volatile u16 StatPin,StatKey;
#define MskKey1 0x0003
#define MskGreen 0x01
#define MskBlue 0x02

/*=================================================  ==========================================*/
void TIM2_IRQHandler(void)
{
	static u8 cntTK;
	u16 temp;
	TIM2-›SR &=~(TIM_SR_UIF);// reset flag interrupt!
	// 0bxxxxxx00 - no action
	// 0bxxxxxx10 - key pressed
	// 0bxxxxxx01 - key clicking on time ‹ 3 sec
	// 0bxxxxxx11 - key clicking on time › 3 sec
	temp=StatKey&MskKey1;
	if (temp==0x0002)// key pressed
	{
		cntTK++; if (cntTK==255) cntTK=254;
		if (!(CHECK_PIN(Pa0)))// key pressed off
		{	
			if(cntTK‹30)
			{ 	StatKey=0x0001; // code key of time‹3sec	
			}
			else StatKey=0x0003; // code key of time›3sec
			cntTK=0;
		}
	}
	else if(!temp) // key no pressed
	{
		if (CHECK_PIN(Pa0))
		{StatKey=0x0002;// State key pressed
		}
	}
}

/*=================================================  ==========================================*/
int main(void)
{
	//u8 btMsk=0x80;//0b10000000;
	Init();
	RCC-›APB1ENR|=(RCC_APB1ENR_TIM2EN);
/* Настройка таймера TIM2 на событие: Прерывание при совпадении с р-ром TIM2_ARR */
	TIM2-›PSC=10000-1;// предделитель CK_CNT=24 000 000/10000=2400 Hz
	TIM2-›ARR=240; // загрузка рег-ра для сравнения CNT=2400/240=10 Hz 
	TIM2-›DIER|=(TIM_DIER_UIE); // Вкл.разрешения прерывания на совпадение сч.
	NVIC_EnableIRQ(TIM2_IRQn);
	TIM2-›CR1|=(TIM_CR1_CEN); // Запуск Таймера!
	
	StatPin=0;
	StatKey=0;

	do
	{
		if (StatKey==0x0001) // t‹3sec
		{
			StatKey=0;
			if(StatPin&MskGreen)
			{OFF_PIN(Green);}
			else ON_PIN(Green);
			StatPin^=MskGreen;
		}
		if (StatKey==0x0003) // t›3sec
		{
			StatKey=0;
			if(StatPin&MskBlue)
			{OFF_PIN(Blue);}
			else ON_PIN(Blue);
			StatPin^=MskBlue;
		}

	}
	while (1); // зависаем
 
}

Последний раз редактировалось MaxiMuz79; 13.01.2014 в 11:35.
MaxiMuz79 вне форума  
Непрочитано 13.01.2014, 11:30   #17
MaxiMuz79
Гражданин KAZUS.RU
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
MaxiMuz79 на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Сообщение от omercury Посмотреть сообщение
Только недоношенный - при отпускании нет фильтрации дребезга. Будут проскакивать короткие "нажатия".
при отпускании такая же отстройка от дребезга , вследствии определенного периода опроса кнопки
MaxiMuz79 вне форума  
Непрочитано 13.01.2014, 23:07   #18
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Несколько функций на одной кнопке

Сообщение от MaxiMuz79 Посмотреть сообщение
Наверное самый простой и эффективный алгоритм (имхо) реализующий , как мною описано выше , функцию антидребезга + фиксация короткого и длинного нажатия (t› 3 сек).
Я делал так:

PHP код:
 
unsigned char cnt0
;
begin:

if(!
PINA.0) {
            if((
cnt0==0) || (cnt0==20)) Press();
            if(
cnt020cnt0++;
            }
else        
cnt0=0;

delay_ms(100);
goto 
begin
Это для быстрого повторения действия при удерживании.

Можно аналогично переделать под короткое и длинное нажатие:

PHP код:
 
unsigned char cnt0
;
begin:

if (!
PINA.0) {
             if(
cnt030cnt0++;
             }
else         {
             if((
cnt00) && (cnt030))  Press_short();
             if((
cnt0==30)              Press_long();
             
cnt0=0;
             }

delay_ms(100);
goto 
begin
Лично мне не нравится, когда действие выполняется после отпускания кнопки. Вроде нажал, а ничего не происходит. Инстинктиквно жмёшь сильнее - ничего. Отпускаешь - произошло. Нехорошо как-то.
Godzilla82 вне форума  
Непрочитано 14.01.2014, 09:43   #19
MaxiMuz79
Гражданин KAZUS.RU
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
MaxiMuz79 на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Godzilla82, вы показали частный вариант алгоритма в общем потоке, а если кроме опроса кнопок требуется еще какие то действия ?
Сообщение от Godzilla82 Посмотреть сообщение
Лично мне не нравится, когда действие выполняется после отпускания кнопки. Вроде нажал, а ничего не происходит. Инстинктиквно жмёшь сильнее - ничего. Отпускаешь - произошло. Нехорошо как-то.
.. ну в случае когда на одну кнопку вешается несколько действий , непредставляю как будет выглядеть многократное срабатывание при нажатие и что им можно выполнять
MaxiMuz79 вне форума  
Непрочитано 14.01.2014, 13:05   #20
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Несколько функций на одной кнопке

Сообщение от MaxiMuz79 Посмотреть сообщение
Godzilla82, вы показали частный вариант алгоритма в общем потоке, а если кроме опроса кнопок требуется еще какие то действия ?
Ну всё, конечно, зависит от алгоритма.
В этом варианте у меня так: нажал кнопку - выполняется какое-то действие (запустили процесс, увеличили какой-то параметр, перешли на какой-то пункт меню и т.п.).

Сообщение от MaxiMuz79 Посмотреть сообщение
.. ну в случае когда на одну кнопку вешается несколько действий , непредставляю как будет выглядеть многократное срабатывание при нажатие и что им можно выполнять
Поэтому я стараюсь не использовать длинное нажатие.

В единичных случаях (когда это действительно нужно, например, чтобы прервать длительный процесс) - кнопка опрашивается отдельно в самом процессе.

А так - применений масса. Задаётся число с клавиатуры. Например, 50. Нажал кнопку + и значения быстренько увеличились до 50.
Godzilla82 вне форума  
Закрытая тема

Закладки


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Интересный вопрос - два усилителя к одной нагрузке eCAH Аудиотехника 45 14.10.2010 01:23
Триггер на несколько секунд rewacom Электроника средств транспорта 9 30.06.2009 11:47
Несколько мобильных операторов на одной SIM карте Angelus Автоматика и аппаратура связи 7 05.03.2007 11:26


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


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