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

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

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

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

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

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

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
Сообщений: 384
Сказал спасибо: 9
Сказали Спасибо 44 раз(а) в 37 сообщении(ях)
chapa на пути к лучшему
По умолчанию Re: несколько функций на одной кнопке

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

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

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

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

Сообщение от omercury Посмотреть сообщение
при отпускании нет фильтрации дребезга. Будут проскакивать короткие "нажатия".
как показали эксперименты на определенных кнопках , дребезг по отжатию не происходит. Специально ставил счетчики срабатывания контактов по нажатию и отпусканию кнопки.
MaxiMuz79 вне форума  
Непрочитано 25.12.2013, 13:43  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 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_butt‹0xFFFFFFF0)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(tmp›8000)power_off();    
} 
как-то так у меня реализовано
таймер накручивает счетчик
при изменении состояния считывание и сброс

Последний раз редактировалось andrey9806; 06.01.2014 в 14:39.
andrey9806 вне форума  
Непрочитано 06.01.2014, 14:42  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
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, время: 06:16.


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