Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
15.04.2011, 17:20
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
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;
}
}
} |
|
|
|
|
15.04.2011, 17:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от poligon_85
|
Зачем кучу дэфайнов
|
Чтобы не запутаться. И для лёгкой переносимости на другие порты.
|
|
|
|
15.04.2011, 17:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Если внимательно смотрели, в прерывании только установка флага. Очень быстро прерывание выполняется.
И всё на одном таймере, который регулирует яркость. И нет паразитной подсветки(при "0" в компараторе, таймер 1 импульс всё-равно пропускает. Так он устроен. С этим ничего не сделать.)
Может не назначен файл .cof? Схему изменил. У меня работает. Proteus 7.7sp2.
|
|
|
|
15.04.2011, 17:35
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Для меня по прежнему загадка почему ваш код работает Вот хоть убейте, не понимаю. Уже которые сутки сижу
А может кнопку на внешнее прерывание повесить?
Последний раз редактировалось poligon_85; 15.04.2011 в 17:42.
|
|
|
|
15.04.2011, 17:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от poligon_85
|
Для меня по прежнему загадка почему ваш код работает Вот хоть убейте, не понимаю. Уже которые сутки сижу
А может кнопку на внешнее прерывание повесить?
|
Можно, конечно. Но будет ещё хуже. От дребезга контактов кнопки МК будет слишком часто сваливаться в прерывание. Так нельзя. Почитайте ещё раз на второй страничке мой пост. Там подробно описана логика работы с кнопкой. В первую очередь надо правильно составить алгоритм, а уж код написать под него очень просто.
Зы. Забыл обнуление флага. Файл заменил.
|
|
|
|
15.04.2011, 17:52
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Цитата:
|
Алгоритм обработки таков: Структура обработчика прерывания
Если кнопка нажата
...Если флаг не установлен -› установить флаг. выход.
...Если флаг установлен -› инкремент счетчика.
......Если счётчик досчитал до длинного нажатия -› начинаем менять компаратор ШИМ. Декремент счётчика(увеличивать-то его больше никчему). выход.
Если кнопка не нажата -› проверяем флаг состояния кнопки
...Если флаг установлен - › проверяем счётчик времени нажатия кнопки
......Если меньше длинного
.........Если больше минимального времени -› включаем/выключаем фонарь. сброс переменных. выход.
.........Иначе - это был "дребезг". сброс переменных. выход.
...Если флаг не установлен -› сброс переменных. выход.
|
Я на 4-ой строчке уже потерялся. Зачем проверять сначала длинное нажатие??? Зачем счетчик надо уменьшать????
Последний раз редактировалось poligon_85; 15.04.2011 в 17:54.
|
|
|
|
15.04.2011, 17:58
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
poligon_85, никогда не пытайтесь понять смысл чужого кода, если его писал новичок. Испортите себе нервы и только. Человек не ищет простых решений. Но за собой тянет в бездну еще и вас.
|
|
|
|
15.04.2011, 18:17
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
У меня выхода нет. Я уже купил светодиод за 480 руб. Готовый код конечно хорошо, но я хочу понять как мне теперь управлять светодиодом, чтобы потом я смог подправить код под свои нужды. Нужды то скромные, вкл/выкл, регулировка. Код чужой понимаю, но логики не вижу, вот хоть об стенку расшибись. Наверное придется делать при помощи delay. Вроде не такой уж и тупой, но застрял и ни в какую
|
|
|
|
15.04.2011, 18:27
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Ну если достаните PIC12F какой-нибудь, напишу вам код. А под мегу - это не ко мне.
|
|
|
|
15.04.2011, 18:34
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Так принцип наверное тот же??? Есть пин МК, на нём кнопка которая придавливает пин на землю. И есть таймер который каждые 10 мс вызывает прерывание, в котором нам и нужно считывать состояние кнопки и определять кратко её нажали или держут какое то время. Вот что в этом прерывании писать до меня не доходит.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:27.
|
|