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

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

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

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

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

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

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

 
Опции темы

Многофункциональная кнопка

Непрочитано 12.06.2013, 14:39  
Uragan90
Почётный гражданин KAZUS.RUN
 
Аватар для Uragan90
 
Регистрация: 20.09.2009
Сообщений: 1,895
Сказал спасибо: 469
Сказали Спасибо 407 раз(а) в 254 сообщении(ях)
Uragan90 на пути к лучшему
По умолчанию Многофункциональная кнопка

Здравствуйте!!!
Пишу обработчик нажатия на кнопку и встретился с трудностью определения "долгого и короткого" нажатия на кнопку.
По сути нужно написать код обработчика в котором учитывается продолжительность нажатия с целью запуска разного рода действий...
Задача:
1) При нажатии на кнопку коротким толчком (если это именно нажатие, а не дребезг)- зажечь светодиод чтоб он горел постоянно пока не будет еще раз нажата кнопка, причём любой продолжительности (при этом светодиод должен погаснуть)!
2) Если нажать на кнопку и удерживать её "долго" (порядка 3-5сек.) - светодиод должен гореть, но лишь пока мы удерживаем кнопку.
Как только отпустили кнопку светодиод тут же должен гаснуть!
Я написал код, но он работает коряво и через раз, в протеусе светодиод ведёт себя не культурно- моргает как попало
Помогите оформить идейку советом, примером ну или хоть как то

PHP код:

if (PINB.0==0){ // если нажали на кнопку то...
    delay_ms(50);     // задержка
    
    if (PINB.0==0){ // если не дребезг то...
        flags=1;          // выставляем флаг нажатия и...
        count++;            // увеличиваем счетчик
    
        if (count›20){   // если count больше 20 (долгое удержание кнопки), то...
             while(PINB.0==0){led_=1;}   // зажигаем светодиод с условием (ГОРИТ) пока держим кнопку
             led_=0;
             flags=0;  // сбрасываем флаг нажатия кнопки
             count=0;    // и сбрасываем счетчик
        }
    }
    
    if (PINB.0!=0){ // если отжали кнопку
        count=0;
        if (flags==1){   // но флаг был ранее установлен
            while(PINB.0!=0){led_=1;}   // зажигаем светодиод с условием (ПОСТОЯННО ГОРИТ) пока не нажмем на кнопку
            led_=0;
            flags=0;      // сбрасываем флаг нажатия кнопки
        }
    }
} 
Реклама:
__________________
Я бы изменил весь мир, но бог не дал исходников
Uragan90 вне форума  
Непрочитано 12.06.2013, 14:43  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Многофункциональная кнопка

https://kazus.run/forums/showthread....F2%EA%EE%E3%EE
omercury вне форума  
Сказали "Спасибо" omercury
Uragan90 (12.06.2013)
Непрочитано 12.06.2013, 14:56  
Uragan90
Почётный гражданин KAZUS.RUN
 
Аватар для Uragan90
 
Регистрация: 20.09.2009
Сообщений: 1,895
Сказал спасибо: 469
Сказали Спасибо 407 раз(а) в 254 сообщении(ях)
Uragan90 на пути к лучшему
По умолчанию Re: Многофункциональная кнопка

Там вроде таймер задействован
__________________
Я бы изменил весь мир, но бог не дал исходников
Uragan90 вне форума  
Непрочитано 12.06.2013, 15:18  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Многофункциональная кнопка

Uragan90, Использую http://www.microchip.su/showpost.php...2&postcount=12
http://www.microchip.su/showpost.php...5&postcount=22
http://www.microchip.su/showpost.php...2&postcount=50
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 12.06.2013 в 15:21.
dosikus вне форума  
Сказали "Спасибо" dosikus
Uragan90 (12.06.2013)
Непрочитано 12.06.2013, 15:28  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Многофункциональная кнопка

dosikus, ты в какой по счёту программе структуры начал использовать?

Сообщение от Uragan90 Посмотреть сообщение
Там вроде таймер задействован
У тебя системный таймер есть?
Или перебей на задержках, если хочешь. Алгоритм.
omercury вне форума  
Сказали "Спасибо" omercury
Uragan90 (12.06.2013)
Непрочитано 12.06.2013, 15:34  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Многофункциональная кнопка

На АВР в качестве системного таймера прекрасно работает вачдог
Заодно потребление минимально
niXto вне форума  
Непрочитано 12.06.2013, 15:36  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Многофункциональная кнопка

Сообщение от omercury Посмотреть сообщение
dosikus, ты в какой по счёту программе структуры начал использовать?
Дык, ну перебить на просто переменные .
Пощадим Ураганчика ...
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 12.06.2013 в 15:39.
dosikus вне форума  
Непрочитано 12.06.2013, 15:46  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Многофункциональная кнопка

Кстати о кнопках . Засвечу , хоть и без отслеживания длительности .
Давилка дребезга на вертикальных счетчиках . Сразу 8 кнопок .
Код:
volatile unsigned char  input,flag_100ms,count_10ms;
...
Код:
void interrupt low_priority tmr1_ov(void)
{

    static unsigned char tick_count, in_state, in_cnt0, in_cnt1;
    unsigned char in_delta, in_toggle;


    if (TMR1IE && TMR1IF) {
        TMR1IF = 0;
       
        TMR1 = (TMR1_RELOAD-TMR1_OVHEAD);
      
        if ((++tick_count) == 10) {
            tick_count = 0;
            if(++count_10ms==10){
             count_10ms=0;
            flag_100ms=1;
            }
        
            in_delta = (~IN_PORT) ^ in_state;
            in_cnt1 = in_cnt1 ^ in_cnt0;
            in_cnt0 = ~in_cnt0;
            in_cnt0 &= in_delta;
            in_cnt1 &= in_delta;
            in_toggle = in_cnt0 & in_cnt1;
            in_state ^= in_toggle;
            input = in_state;


        }
        return;
    }
   
}
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 12.06.2013, 15:59  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Многофункциональная кнопка

Сообщение от dosikus Посмотреть сообщение
Использую
Тестер, конечно, молодец, но моя чуть менее ресурсоёмкая и в прерывании не висит. Но это из-за подхода - у меня кейпресс, у него кейскан. Как библиотечная функция его универсальней.
omercury вне форума  
Непрочитано 12.06.2013, 16:02  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Многофункциональная кнопка

omercury, Здесь приаттач плиз, лениво по той ветке скакать.
__________________
Осторожно , злой кот
dosikus вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кнопка start -stop man19320 Электроника средств транспорта 24 30.12.2013 16:06
Не опрашивается вторая кнопка. Attiny2313/ putmannn Микроконтроллеры, АЦП, память и т.д 8 02.02.2011 02:40
Сенсорная кнопка на авр yarunt Микроконтроллеры, АЦП, память и т.д 1 20.11.2010 21:01
Плоская кнопка /датчик/ веса человека - как? DDimon Электроника - это просто 26 29.01.2010 22:09
Atmega 16 не работает кнопка через порт PC4 ? uriy-ch Микроконтроллеры, АЦП, память и т.д 16 14.01.2009 21:42


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


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