Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
15.04.2011, 19:01
|
#61
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
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 мс ???
} |
|
|
|
|
15.04.2011, 19:09
|
#62
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,034
Сказал спасибо: 60
Сказали Спасибо 3,947 раз(а) в 2,303 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от poligon_85
|
Как подождать 40 мс ???
|
Это 4 переполнения TCNT0, если он включен. Считайте переполнения
|
|
|
|
15.04.2011, 19:11
|
#63
|
Прописка
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от poligon_85
|
Для меня по прежнему загадка почему ваш код работает
|
Сообщение от Easyrider83
|
poligon_85, никогда не пытайтесь понять смысл чужого кода, если его писал новичок. Испортите себе нервы и только. Человек не ищет простых решений. Но за собой тянет в бездну еще и вас.
|
Ребята, нас здесь много. Вы хоть пишите, кого имеете ввиду и к кому обращаетесь. Я не профессинал, я уже говорил, но алгоритм, который цитировал poligon_85, принадлежит omercury. Он тоже не профессионал? Easyrider83, напишете образцовый код, чтобы было с чего брать пример?
|
|
|
|
15.04.2011, 19:13
|
#64
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от niXto
|
Это 4 переполнения TCNT0, если он включен. Считайте переполнения
|
Я это прекрасно понимаю. Но как??? Если сбросить при этом timer_count в ноль и ждать пока timer_count не станет больше 4, то при дребезге счет нарушится!!! Потому что на пине будет то 0 то 1
|
|
|
|
15.04.2011, 19:31
|
#65
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
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;
}
}
} |
|
|
|
|
15.04.2011, 19:46
|
#66
|
Прописка
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
poligon_85, к сожалению меня в компании с omercury забраковали. Комментировать ваш код не могу. Вам остается дождаться только Easyrider83, может он поможет?
Кстати, подскажите код omercury в реале чётко работает? Потому что в Proteuse он у меня так и не заработал.
|
|
|
|
15.04.2011, 19:50
|
#67
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,833
Сказал спасибо: 919
Сказали Спасибо 4,303 раз(а) в 2,572 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Я помочь не смогу. Задача не сложная, но на Си я не пишу. Поэтому от моего кода вам легче не станет.
|
|
|
|
15.04.2011, 20:04
|
#68
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от oleg_harp
|
poligon_85, к сожалению меня в компании с omercury забраковали. Комментировать ваш код не могу. Вам остается дождаться только Easyrider83, может он поможет?
Кстати, подскажите код omercury в реале чётко работает? Потому что в Proteuse он у меня так и не заработал.
|
Глупости, никто вас не браковал. Как создатель темы воспользуюсь правом вето и снимаю с вас любое "бракование". Код omercury работает в протеусе через раз. И я не понял зачем там кнопка работает на размыкание.
|
|
|
|
15.04.2011, 20:16
|
#69
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,489
Сказал спасибо: 30
Сказали Спасибо 3,071 раз(а) в 2,012 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Easyrider83, Вы правы - я не профессионал. И действительно новичек в Си. Скажу больше - это вторая программуля на Си, написанная мной. Всё, что было до этого написано на Ассемблере. Но, как ни странно, это программка заработала, причём сразу.
Это говорит только об одном - алгоритм верный. На Асме не переписывал, но уверен, что и там заработает.
Что касается помощи poligon_85, то нет ничего проще - вот Вам бейсик для AVR.. Там же Паскаль и Си - на выбор.
Сообщение от poligon_85
|
И я не понял зачем там кнопка работает на размыкание.
|
Кнопка работает на замыкание, как и у всех, просто я её "зафиксировал" чтобы не держать - там есть такой кружочек со стрелками вверх/вниз для фиксации кнопки.
|
|
|
|
15.04.2011, 20:20
|
#70
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,833
Сказал спасибо: 919
Сказали Спасибо 4,303 раз(а) в 2,572 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Да есть у меня все для работы в АВР. Проблема-то не в этом. Просто глубое отвращение как к самим камням, так и к тем людям, которые писали документации.
Дребезг устранять програмно - очень много кода выйдет. Не мучайтесь, поставьте конденсатор. К тому же, мембранные кнопки с щелчком дребезга почти не имеют. Не знаю, как их надо нажимать, чтобы они дребезжали.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:26.
|
|