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

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

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

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

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

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

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

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

Ну вот нажатие кнопки правильно же:
Код:
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
timer_count++;                    // постоянно считаем 10 мс интервалы                       
  
  if ((button == 0) && (enable == 1)) {   // если нажата кнопка и это первое срабатывание
    timer_count = 0;                      // сбрасываем счетчик
    enable = 0;                           // запрещаем сброс timer_count (случайный дребезг)
    }

  if (timer_count == 4) {         // подавили дребезг 40 мс
    if (button == 0) {            // если кнопка всё ещё нажата через 40 мс
      // кнопка нажата            // фиксируем что кнопку нажали
      }
    else {
      // это дребезг
      enable = 1;
      }
  }
}
Реклама:
poligon_85 вне форума  
Непрочитано 15.04.2011, 17:23  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от poligon_85 Посмотреть сообщение
Зачем кучу дэфайнов
Чтобы не запутаться. И для лёгкой переносимости на другие порты.
omercury вне форума  
Непрочитано 15.04.2011, 17:27  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Если внимательно смотрели, в прерывании только установка флага. Очень быстро прерывание выполняется.
И всё на одном таймере, который регулирует яркость. И нет паразитной подсветки(при "0" в компараторе, таймер 1 импульс всё-равно пропускает. Так он устроен. С этим ничего не сделать.)
Может не назначен файл .cof? Схему изменил. У меня работает. Proteus 7.7sp2.
omercury вне форума  
Непрочитано 15.04.2011, 17:35  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Для меня по прежнему загадка почему ваш код работает Вот хоть убейте, не понимаю. Уже которые сутки сижу

А может кнопку на внешнее прерывание повесить?

Последний раз редактировалось poligon_85; 15.04.2011 в 17:42.
poligon_85 вне форума  
Непрочитано 15.04.2011, 17:46  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от poligon_85 Посмотреть сообщение
Для меня по прежнему загадка почему ваш код работает Вот хоть убейте, не понимаю. Уже которые сутки сижу

А может кнопку на внешнее прерывание повесить?
Можно, конечно. Но будет ещё хуже. От дребезга контактов кнопки МК будет слишком часто сваливаться в прерывание. Так нельзя. Почитайте ещё раз на второй страничке мой пост. Там подробно описана логика работы с кнопкой. В первую очередь надо правильно составить алгоритм, а уж код написать под него очень просто.

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

Цитата:
Алгоритм обработки таков: Структура обработчика прерывания
Если кнопка нажата
...Если флаг не установлен -› установить флаг. выход.
...Если флаг установлен -› инкремент счетчика.
......Если счётчик досчитал до длинного нажатия -› начинаем менять компаратор ШИМ. Декремент счётчика(увеличивать-то его больше никчему). выход.
Если кнопка не нажата -› проверяем флаг состояния кнопки
...Если флаг установлен - › проверяем счётчик времени нажатия кнопки
......Если меньше длинного
.........Если больше минимального времени -› включаем/выключаем фонарь. сброс переменных. выход.
.........Иначе - это был "дребезг". сброс переменных. выход.
...Если флаг не установлен -› сброс переменных. выход.
Я на 4-ой строчке уже потерялся. Зачем проверять сначала длинное нажатие??? Зачем счетчик надо уменьшать????

Последний раз редактировалось poligon_85; 15.04.2011 в 17:54.
poligon_85 вне форума  
Непрочитано 15.04.2011, 17:58  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

У меня выхода нет. Я уже купил светодиод за 480 руб. Готовый код конечно хорошо, но я хочу понять как мне теперь управлять светодиодом, чтобы потом я смог подправить код под свои нужды. Нужды то скромные, вкл/выкл, регулировка. Код чужой понимаю, но логики не вижу, вот хоть об стенку расшибись. Наверное придется делать при помощи delay. Вроде не такой уж и тупой, но застрял и ни в какую
poligon_85 вне форума  
Непрочитано 15.04.2011, 18:27  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

Так принцип наверное тот же??? Есть пин МК, на нём кнопка которая придавливает пин на землю. И есть таймер который каждые 10 мс вызывает прерывание, в котором нам и нужно считывать состояние кнопки и определять кратко её нажали или держут какое то время. Вот что в этом прерывании писать до меня не доходит.
poligon_85 вне форума  
 

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

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

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:27.


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