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

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

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

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

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

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

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

 
Опции темы

Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Непрочитано 15.04.2011, 19:01  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Как подождать 40 мс ???
Код:
#define button PINB.0 

volatile unsigned int timer_count = 0;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
                                    // Reinitialize Timer 0 value
  TCNT0=0xB2;                       // срабатывание каждые ~10 мс    
  timer_count++;                    // постоянно считаем 10 мс интервалы  
  if (timer_count›65534) {          // если насчитали больше 65535, то сбрасываем на 0    
    timer_count=0;                      
    } 
  
  if (button == 0) {          // если на пине 0, то надо подождать 40 мс и опять проверить пин
                              // если через 40 мс там по прежнему 0, то кнопку нажали   
    }                         // НО КАК ПОДОЖДАТЬ 40 мс ???
}
Реклама:
poligon_85 вне форума  
Непрочитано 15.04.2011, 19:09  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от poligon_85 Посмотреть сообщение
Как подождать 40 мс ???
Это 4 переполнения TCNT0, если он включен. Считайте переполнения
niXto вне форума  
Непрочитано 15.04.2011, 19:11  
oleg_harp
Прописка
 
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
oleg_harp на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от poligon_85 Посмотреть сообщение
Для меня по прежнему загадка почему ваш код работает
Сообщение от Easyrider83
poligon_85, никогда не пытайтесь понять смысл чужого кода, если его писал новичок. Испортите себе нервы и только. Человек не ищет простых решений. Но за собой тянет в бездну еще и вас.
Ребята, нас здесь много. Вы хоть пишите, кого имеете ввиду и к кому обращаетесь. Я не профессинал, я уже говорил, но алгоритм, который цитировал poligon_85, принадлежит omercury. Он тоже не профессионал? Easyrider83, напишете образцовый код, чтобы было с чего брать пример?
oleg_harp вне форума  
Непрочитано 15.04.2011, 19:13  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от niXto Посмотреть сообщение
Это 4 переполнения TCNT0, если он включен. Считайте переполнения
Я это прекрасно понимаю. Но как??? Если сбросить при этом timer_count в ноль и ждать пока timer_count не станет больше 4, то при дребезге счет нарушится!!! Потому что на пине будет то 0 то 1
poligon_85 вне форума  
Непрочитано 15.04.2011, 19:31  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
Вопрос Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Пробую просто инвертировать состояние вывода при каждом нажатии.
Срабатывает через раз. А если нажать кнопку и держать то светодиод начинает быстро быстро моргать.
Код:
#define button PINB.0 
volatile bit first = 1;
volatile unsigned int timer_count = 0;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
                                    // Reinitialize Timer 0 value
  TCNT0=0xB2;                       // срабатывание каждые ~10 мс  
  
  timer_count++;                    // постоянно считаем 10 мс интервалы  
  if (timer_count›65534) {          // если насчитали больше 65535, то сбрасываем на 0    
    timer_count=0;                      
    } 
  
  if (button == 0) { 
    if (first) {                    // если это первый ноль на пине
      timer_count = 0;              // начинаем отсчет для анти дребезга
      first = 0;
      }                   
    }

  if (timer_count › 3) {                 // подавили дребезг 40 мс
    if (button == 0) {                   // если кнопка всё ещё нажата через 40 мс
	   // кнопка нажата                  // фиксируем что кнопку нажали
      first = 1;
      PORTB.3^=1;
      }
	else {
	  // это дребезг
	  first = 1;
	  }
    }
}
poligon_85 вне форума  
Непрочитано 15.04.2011, 19:46  
oleg_harp
Прописка
 
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
oleg_harp на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

poligon_85, к сожалению меня в компании с omercury забраковали. Комментировать ваш код не могу. Вам остается дождаться только Easyrider83, может он поможет?
Кстати, подскажите код omercury в реале чётко работает? Потому что в Proteuse он у меня так и не заработал.
oleg_harp вне форума  
Непрочитано 15.04.2011, 19:50  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Я помочь не смогу. Задача не сложная, но на Си я не пишу. Поэтому от моего кода вам легче не станет.
Easyrider83 вне форума  
Непрочитано 15.04.2011, 20:04  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от oleg_harp Посмотреть сообщение
poligon_85, к сожалению меня в компании с omercury забраковали. Комментировать ваш код не могу. Вам остается дождаться только Easyrider83, может он поможет?
Кстати, подскажите код omercury в реале чётко работает? Потому что в Proteuse он у меня так и не заработал.
Глупости, никто вас не браковал. Как создатель темы воспользуюсь правом вето и снимаю с вас любое "бракование". Код omercury работает в протеусе через раз. И я не понял зачем там кнопка работает на размыкание.
poligon_85 вне форума  
Непрочитано 15.04.2011, 20:16  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Easyrider83, Вы правы - я не профессионал. И действительно новичек в Си. Скажу больше - это вторая программуля на Си, написанная мной. Всё, что было до этого написано на Ассемблере. Но, как ни странно, это программка заработала, причём сразу.
Нажмите на изображение для увеличения
Название: m8_PWM+Key.jpg
Просмотров: 53
Размер:	239.3 Кб
ID:	20606
Это говорит только об одном - алгоритм верный. На Асме не переписывал, но уверен, что и там заработает.
Что касается помощи poligon_85, то нет ничего проще - вот Вам бейсик для AVR.. Там же Паскаль и Си - на выбор.
Сообщение от poligon_85 Посмотреть сообщение
И я не понял зачем там кнопка работает на размыкание.
Кнопка работает на замыкание, как и у всех, просто я её "зафиксировал" чтобы не держать - там есть такой кружочек со стрелками вверх/вниз для фиксации кнопки.
omercury вне форума  
Непрочитано 15.04.2011, 20:20  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Да есть у меня все для работы в АВР. Проблема-то не в этом. Просто глубое отвращение как к самим камням, так и к тем людям, которые писали документации.
Дребезг устранять програмно - очень много кода выйдет. Не мучайтесь, поставьте конденсатор. К тому же, мембранные кнопки с щелчком дребезга почти не имеют. Не знаю, как их надо нажимать, чтобы они дребезжали.
Easyrider83 вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Электронная библиотека 11242 29.12.2015 23:45
Как правильно отследить импульс sdsrem Микроконтроллеры, АЦП, память и т.д 8 17.08.2010 21:28
[Решено] Третье Послание Человечеству lelkanet Отвлекитесь, эмбеддеры! 201 06.01.2010 00:33


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


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