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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
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,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
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,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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, время: 14:20.


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