Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
19.02.2015, 19:22
|
|
Вид на жительство
Регистрация: 26.10.2009
Сообщений: 379
Сказал спасибо: 47
Сказали Спасибо 146 раз(а) в 93 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
У меня получилось так.(в программировании я новичёк )
Вложения:
|
kn.rar (60.8 Кб, 28 просмотров) |
__________________
..истина где то рядом..
|
|
|
|
19.02.2015, 22:02
|
|
Гражданин KAZUS.RU
Регистрация: 27.11.2012
Адрес: 30км от Софии
Сообщений: 732
Сказал спасибо: 89
Сказали Спасибо 310 раз(а) в 180 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сие простейший интегратор. Тоесть убирает помехи и дербезг конопок.
Надо выбрать период слежения за состоянием входа. Важно. Ну и пороги переключения бита ноги по состоянию счетчиков. 100 200 так написал. В реале 70-120. Или как попадется. По реалиям.
|
|
|
|
19.02.2015, 22:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от prosto_andriy
|
Правильнее всего наверно
|
Возможно, но в лоб это не решить - у Вас каждая смена состояния кнопки сопровождается "дребезгом". Отфильтруйте сначала его - чётко зафиксируйте состояние кнопки, а уж потом займитесь логикой обработки изменений её состояния.
Разделяй и властвуй.
|
|
|
|
19.02.2015, 22:46
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от proba60
|
У меня получилось так.(в программировании я новичёк )
|
Всем доброго времени суток.
Я скажу, что в программировании тоже не асс, но некоторые замечания могу сделать.
1. Нет комментариев и поэтому довольно трудно разбираться что есть что. Даже переменные не подписаны.
2.На каждую однобитную переменную тратиться по целому байту.
3. Когда в условии нужно сложить логический результат, а не переменную, то нужно писать по два знака. У тебя записано: if ((kn==0)&(flage==0)), а надо if ((kn==0)&&(flage==0)) в Вашем случае выполняется побитное (И) между двумя переменными.
4. Есть такая строчка DDRC=(1‹‹DDC0); Я так, понял, что Вы хотели установить PORTC.0 как выход. Но надо думать и о других портах. А если бы кроме нулевого бита в регистре были бы еще единицы? Они тогда сбросяться, так как маска 1‹‹0 - это 0b00000001 и если бы какой то пин в этом порту работал как выход, то он станет входом. Если надо изменить один бит, то нужно писать так. при установке DDRC|=1‹‹n, а если сбросить - DDRC&=~(1‹‹n)
PS. И нужно активнее использовать табуляцию, а то трудно разбираться со скобками.
Последний раз редактировалось МВА; 19.02.2015 в 22:59.
|
|
|
|
20.02.2015, 00:12
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,969
Сказал спасибо: 2,554
Сказали Спасибо 11,850 раз(а) в 5,938 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от МВА
|
в программировании тоже не асс
|
Одна буква может в корне изменить смысл и даже придать ему комичность. "Ас" - крупный спец, а "асс" (или "ass"), простите, задница.
Сообщение от МВА
|
На каждую однобитную переменную тратиться по целому байту.
|
Не всегда это плохо.
Сообщение от МВА
|
в Вашем случае выполняется побитное (И) между двумя переменными.
|
Между двумя логическими результатами "true" или "false". Такая конструкция может и работать, но лучше так не делать.
Сообщение от МВА
|
нужно активнее использовать табуляцию
|
Нужно правильно вставлять в пост программу.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 20.02.2015 в 00:22.
|
|
|
|
20.02.2015, 09:51
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от akegor
|
Одна буква может в корне изменить смысл и даже придать ему комичность. "Ас" - крупный спец, а "асс" (или "ass"), простите, задница.
Не всегда это плохо.
Между двумя логическими результатами "true" или "false". Такая конструкция может и работать, но лучше так не делать.
Нужно правильно вставлять в пост программу.
|
Всем доброго времени суток.
Спасибо за комментарии, я в программировании, действительно не большой специалист, а так получилось, что большой (не задница). И программы я в пост неправильно вставлял я, но замечание делал по программе из архива в проекте AVR studio.
|
|
|
|
21.02.2015, 08:04
|
|
Временная регистрация
Регистрация: 23.07.2007
Сообщений: 42
Сказал спасибо: 3
Сказали Спасибо 13 раз(а) в 10 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
ох и любит народ из ничего проблему создать ))
236 постов, когда вопрос решается на трёх МС мелкой логики 564 (ЛА7, ИЕ10, ТМ2) за полчаса пайки. Однобокое мышление, однако...
|
|
|
|
21.02.2015, 08:11
|
|
Временная регистрация
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от omercury
|
...у Вас каждая смена состояния кнопки сопровождается "дребезгом". Отфильтруйте сначала его - чётко зафиксируйте состояние кнопки, а уж потом займитесь логикой обработки изменений её состояния.
Разделяй и властвуй.
|
Посмотрел Ваш код, и хотя он имеет четкую структуру, я так и не понял, как в нем отфильтровывается дребезг?
Вот функция сканирования кнопки:
PHP код:
|
void key_scan(void)
{
if KeyPress //Если кнопка нажата
{ //Проверим, давно ли её нажали
if (KeyNew) //Если флаг установлен (значит "давно")
{
count++; //Увеличиваем счётчик задержки
if (count›longkey) //Если длинное нажатие
{
bright_ch(); //Начинаем менять компаратор ШИМ
count--; //Декремент счетчика(увеличивать-то его больше никчему)
PWM_on = 1;
} //Выход
}
else //Нажали только что, на это и укажем
{
KeyNew = 1; //Устанавливаем флаг
} //Выход
systemClock = 0; //Сброс таймаута выключения подсветки
}
else //Если кнопка не нажата Это может означать,
{ //что её и не нажимали или только что отпустили, вот это и проверим даьше
if (KeyNew) //Если флаг установлен (только что отпустили)
{ //Проверим, до скольки успели досчитать
if (count‹longkey) //Если меньше длинного(короткое нажатие)
{//Можно было и объединить, но не люблю я двойные условия, МК их всё равно по очереди сделает
if (count›shortkey) //Если больше минимального (короткое, но не дребезг)
{
led_on_off(); //Включаем/выключаем фонарь
} //Иначе - Это был дребезг
}
else {Dir_on=~Dir_on;} //Меняем направление изменения яркости
}
clr_var(); //Сброс переменных
} //Выход
KeyEXE = 0; //Запрет опроса кнопок
#asm("sleep") //Усыпляем МК
}
|
Мне непонятно, когда устанавливается флаг "KeyNew"? Сразу же после нажатия кнопки? А сбрасывается он сразу после её отпускания?
Объясните пожалуйста, если Вас это не затруднит!
|
|
|
|
21.02.2015, 10:34
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от Proshha
|
вопрос решается на трёх МС мелкой логики 564 (ЛА7, ИЕ10, ТМ2) за полчаса пайки. Однобокое мышление, однако...
|
Боюсь, что даже при разнобоком мышлении 3 корпуса и куча внешних элементов займут больше места, чем один мелкий МК
|
|
|
|
21.02.2015, 10:56
|
|
Временная регистрация
Регистрация: 23.07.2007
Сообщений: 42
Сказал спасибо: 3
Сказали Спасибо 13 раз(а) в 10 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от NewWriter
|
Боюсь, что даже при разнобоком мышлении 3 корпуса и куча внешних элементов займут больше места, чем один мелкий МК
|
три кондёра и 6 резисторов против кварца с обвязкой? это "куча внешних"? про потребление я вообще молчу. 564 (планарка, к слову) в статике потребляет микроамперы. а в динамимке она будет только при нажатии. но и в динамике при низкой частоте - потребление не намного больше. в отличии от МК.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:18.
|
|