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

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

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

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

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

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

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

 
Опции темы
Непрочитано 24.12.2013, 16:35  
ua3rad
Временная регистрация
 
Регистрация: 04.02.2013
Сообщений: 78
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ua3rad на пути к лучшему
По умолчанию Несколько функций на одной кнопке

Всем добрый день!!! Прошу помощи в разъяснении моей проблемы.
При нажатии на кнопку (длительность менее 3 сек.) должна изменяться выводимая информация на LCD. При нажатии и удержании кнопки определенная информация должна сохраняться в EEPROM. Для этих целей я использую таймер (может и неправильно, я не знаю). Проверяю продолжительность фронта путем изменения состояния порта подключенного к осциллографу. Каждый раз, когда я нажимаю продолжительность фронта разная. Я сделал при нажатии на кнопку запускался таймер, а при отпускании кнопки таймер останавливался. Все равно фронт плывет. Что делать?

procedure T0_start_stop (init: byte);
begin
SREG_I_bit := 1; // Interrupt enable
TOIE0_bit := 1; // Timer0 overflow interrupt enable
TCCR0 := init; // Start timer with 1024 prescaler
end;

procedure Timer0Overflow_ISR(); org IVT_ADDR_TIMER0_OVF ;
var count_nastr, count_vibor, count_save: byte;
begin
if button_vibor = 0 then
begin
if count_save ›= Delay_save then
begin
PORTC:= not PORTC;
count_save:= 0;
end
else inc (count_save);
end
else
begin
T0_start_stop (0);
count_save:= 0;
end;

end;

While true do
begin
if button_vibor = 0 then T0_start_stop (5)
else T0_start_stop (0);
end;
Реклама:
ua3rad вне форума  
Непрочитано 24.12.2013, 17:49  
chapa
Вид на жительство
 
Аватар для chapa
 
Регистрация: 13.05.2005
Сообщений: 386
Сказал спасибо: 9
Сказали Спасибо 44 раз(а) в 37 сообщении(ях)
chapa на пути к лучшему
По умолчанию Re: несколько функций на одной кнопке

Что такое "продолжительность фронта"? И куда она плывет?
Для начала нужно понять на какие события от кнопки: нажатие/отпускание в определенный период вы собираетесь реагировать... не забудьте отфильтровать антидребезг.
__________________
В технике главное - кувалда. (с)
chapa вне форума  
Непрочитано 24.12.2013, 19:09  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: несколько функций на одной кнопке

Сообщение от ua3rad Посмотреть сообщение
Что делать?
Пусть таймер постоянно молотит в каждом прерывании по переполнению инкментирует глобальную (или статическую) переменную.
Посмотрели, если нащелкало больше чем умещается в 3 сек, одно действие, меньше - другое.
Все просто.
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 24.12.2013, 20:56  
MaxiMuz79
Гражданин KAZUS.RU
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
MaxiMuz79 на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Делал так:
Как написал gary2007, постоянно работает таймер по совпадению (вроде режим СТС), период срабатывания примерно каждые 0,2..0,4 с.
Нажал кнопку взводиться Start=1 - программный счетчик запустился ; следующее срабатывание - проверяем состяние кнопки: если все еще нажата инкремент счетчика, если уже отжата , Start=0 - прверяем сколько натикало:
больше 3сек - одно действие, меньше - другое.
Как приемущество - ненадо дополнительно вводить операцию антидребезг ,т.к. период проверки 0,2с.
MaxiMuz79 вне форума  
Непрочитано 24.12.2013, 22:12  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

А это разве не антидребезг?
Только недоношенный - при отпускании нет фильтрации дребезга. Будут проскакивать короткие "нажатия".
omercury вне форума  
Сказали "Спасибо" omercury
dosikus (09.01.2014)
Непрочитано 25.12.2013, 12:17  
MaxiMuz79
Гражданин KAZUS.RU
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
MaxiMuz79 на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Сообщение от omercury Посмотреть сообщение
при отпускании нет фильтрации дребезга. Будут проскакивать короткие "нажатия".
как показали эксперименты на определенных кнопках , дребезг по отжатию не происходит. Специально ставил счетчики срабатывания контактов по нажатию и отпусканию кнопки.
MaxiMuz79 вне форума  
Непрочитано 25.12.2013, 13:43  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Сообщение от MaxiMuz79 Посмотреть сообщение
дребезг по отжатию не происходит. Специально ставил счетчики срабатывания контактов по нажатию и отпусканию кнопки.
Незафиксированный вашими счетчиками еще не означает "не происходит". Не обольщайтесь.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 06.01.2014, 14:36  
andrey9806
Временная регистрация
 
Регистрация: 08.02.2011
Сообщений: 74
Сказал спасибо: 8
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
andrey9806 на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

PHP код:
void TIM4_IRQHandler(void)
{
if(
push_butt0xFFFFFFF0)push_butt++;    
}

unsigned int power_butt_ms(void)
{
unsigned int tmp;
tmp push_butt/20;
//printf("push_butt %i , %u , %u\n",push_butt,push_butt,tmp);    
push_butt=0;
return 
tmp;     
}

void EXTI15_10_IRQHandler(void)
{
if((
EXTI-›PR&(1‹‹10))!=0)
{    
    
delay_us(100);// антидребезг
    
if((GPIOB-›IDR&power_butt)==0)
        {
            
GPIOB-›BSRR=power_sw;
        
butt_hold_off();        
        }
    else
        {
        
GPIOB-›BRR=power_sw;
            
butt_hold_on();
                    
        }
    
EXTI-›PR |= (1‹‹10);         
}
EXTI-›PR EXTI-›PR ;     

}
void butt_hold_on(void)
{
//printf("push\n");
power_butt_ms();    
}
void butt_hold_off(void)
{
int tmp power_butt_ms();
printf("push %i\n",tmp);
if(
tmp8000)power_off();    

как-то так у меня реализовано
таймер накручивает счетчик
при изменении состояния считывание и сброс

Последний раз редактировалось andrey9806; 06.01.2014 в 14:39.
andrey9806 вне форума  
Непрочитано 06.01.2014, 14:42  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Антидребезг у вас мощный, andrey9806!
Я делаю иначе. По перепаду фронта по кнопке запускается прерывание, которое запускает таймер. Таймер вызывает прерывание и инкременирует счетчик. Прерывание смотрит, нажата ли кнопка и инкременирует второй счетчик, если нажата и третий, если не нажата. Если третий переполнился - кнопка отпущена. Тормозим таймер. Измеряем второй счетчик. Сколько в нем значений, столько долго держали кнопку нажатой. И не важно, было ли случайное срабатывание или нет.
Easyrider83 вне форума  
Непрочитано 09.01.2014, 08:34  
ua3rad
Временная регистрация
 
Регистрация: 04.02.2013
Сообщений: 78
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ua3rad на пути к лучшему
По умолчанию Re: Несколько функций на одной кнопке

Мне бы пока реализовать и без антидребезга, попроще. На данный момент вообще не работает.
ua3rad вне форума  
 

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

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

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, время: 20:21.


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