Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
27.02.2015, 15:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от МВА
|
В начале программы есть такая строчка
|
Не очень хочется разбираться в чужих программах, тем более, если автор присутствует.
"постараемся отрезки времени установить 0,1 сек" Что значит "постараемся?" И 100 мс это очень много. Человек легко нажимает кнопку 15 раз в секунду...
Я же писал выше: таймер даёт прерывание через 10 мс: выставляет флаг "системный тик". В основном цикле программы обработчик кнопок может выставить флаги событий и состояний кнопок, может тут же обработать эти события или кто там их обработает дальше в цикле.
Вы хотите опрашивать через 100 мс? Пожалуйста, но тогда решение будете принимать за 1 интервал, и кнопки будут неприятными пользователю.
|
|
|
|
27.02.2015, 16:21
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от makakus
|
"постараемся отрезки времени установить 0,1 сек" Что значит "постараемся?"
|
Очень просто, прерывание вызывается через 16,38 ms. 100 ms/16,38 ms= 6,1.
Если мы примем дополнительный делитель равным 6, это и будет 16,38*6=98,28 ms. Я старался, но... Для большей точности надо повышать частоту таймера, но мне это неважно.
И не критикуйте очень сильно. Реально, задержек я не замечаю. Только после двойного нажатия контроллер засыпает примерно через секунду. Но от этого не избавиться, так как решение принимается пауза или нет через 0,7 секунды. Пауза между нажатиями до 0,7 сек.
Последний раз редактировалось МВА; 27.02.2015 в 16:26.
|
|
|
|
27.02.2015, 16:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от МВА
|
прерывание вызывается через 16,38 ms. 100 ms/16,38 ms= 6,1.
|
Я не понимаю, а почему вы со мной это обсуждаете? Я вас нигде не призывал с точному интервалу 100 мс. У меня тик 10 мс, я описал своё, проверенное решение. Хотите - пользуйтесь.
Кстати, про двойное нажатие - неожиданно - довольно подробно описано в аппноте на LIS3DH (AN3308 Application note
LIS3DH: MEMS digital output motion sensor ultra low-power high performance 3-axis nano” accelerometer)
|
|
|
|
28.02.2015, 11:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от МВА
|
Только после двойного нажатия контроллер засыпает примерно через секунду. Но от этого не избавиться, так как решение принимается пауза или нет через 0,7 секунды. Пауза между нажатиями до 0,7 сек.
|
Не горюйте по этому поводу, пауза необходима, чтоб успеть убрать руки от кнопки подальше и не включить подсветку ненароком снова.
|
|
|
|
28.02.2015, 20:54
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от omercury
|
Не горюйте по этому поводу, пауза необходима, чтоб успеть убрать руки от кнопки подальше и не включить подсветку ненароком снова.
|
Всем доброго времени суток.
Нет, не поможет. Лишние нажатия воспримутся, как несуществующие команды, а раз их нет в сравнении и их функций, то ничего не будет. После каждого нажатия инкрементируется счетчик команд. Теоретически можно обработать 256 команд, если считать 0 командой. Но, кому это надо? Максимум 3-4. Представляете 255 раз нажать?
|
|
|
|
02.03.2015, 07:06
|
|
Временная регистрация
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от МВА
|
В режиме, когда светодиод управляется таймером в режиме ШИМ, PORTB.0 включается и выключается с частотой ШИМ таймером, и поэтому то, что вы пытались его включить вручную - он тут-же начнет дергать ногой от таймера.
Если нужно выключить ШИМ - запиши, на СИ, TCCR0A&=~(3‹‹6); Этим Вы сбросите биты СOM0A0 и COM0A1, что отключит таймер от вывода...
|
Большое спасибо Вам за подсказку! Отредактировал код, как Вы посоветовали, но всё равно компилятор почему-то считает функцию бесполезной? Может я что-то неправильно написал? Подскажите пожалуйста - вот отредактированный код
|
|
|
|
02.03.2015, 21:18
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от prosto_andriy
|
Большое спасибо Вам за подсказку! Отредактировал код, как Вы посоветовали, но всё равно компилятор почему-то считает функцию бесполезной? Может я что-то неправильно написал? Подскажите пожалуйста - вот отредактированный код
|
Всем доброго времени суток.
Я не знаю, каким компилятором вы пользуетесь, но у меня такие типы данных, как bit, AVR Studio, не воспринимает. И поэтому я не могу Вашу программу дизассемблировать и пройти по шагам.
Но бегло просмотрев программу я так и не понял функцию key_scan() и много замечаний по другим функциям. Я не знаю, как добавлять программы в пост, но я прописными буквами поделал комментарии в Вашем прикрепленном файле и прилагаю к сообщению. Кстати, имеются те же ошибки о которых писал Proshha.
PS. Инкремент переменной systemClock задуман в прерывании по переполнению. Зачем пытаться инкрементировать его еще и в функции?
Последний раз редактировалось МВА; 02.03.2015 в 21:42.
|
|
|
|
02.03.2015, 21:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от МВА
|
Я не знаю, каким компилятором вы пользуетесь
|
Я знаю - CVAVR.
2 дня потерял на борьбу с ней - при изменении значений констант!!! прога наглухо вешается и не запускается даже приметивнейший ШИМ, не говоря уж о контроле каких-либо состояний. Та же беда с volatile. Пробовал от версий 1.25 до 3.12. В результате убил нафиг эту гадость.
Пока не смените IDE - я вам не помощник.
Последний раз редактировалось omercury; 02.03.2015 в 21:39.
|
|
|
|
02.03.2015, 21:52
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от omercury
|
Я знаю - CVAVR.
2 дня потерял на борьбу с ней - при изменении значений констант!!! прога наглухо вешается и не запускается даже приметивнейший ШИМ, не говоря уж о контроле каких-либо состояний. Та же беда с volatile. Пробовал от версий 1.25 до 3.12. В результате убил нафиг эту гадость.
Пока не смените IDE - я вам не помощник.
|
Я тоже начинал использовать CVAVR. Но когда мне надо были переменные в 1 бит, я использовал битовые поля (структуры) и все работало нормально, но у них много своих личных прибамбасов, которые другие компиляторы не принимают и я решил учить правильный синтаксис. Но ассемблер хоть и тяжелее, но программы весят намного меньше. Я как-то разложил управление тремя фазами в CVAVR, прокрутил в протэусе, все работало, и напряжение уменьшалось с понижением частоты, линейно, но пришлось использовать ATmega128, даже в шестнадцатую не влезло, использовал под таблицы всю оперативку и под одну еще и флеш память. Через время я сделал это на asm. я использовал 5,7% в ATmega8. единственное, что пришлось добавить логические ключи, чтобы разделить сигналы по каналам, так, как мало счетчиков.
|
|
|
|
02.03.2015, 21:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от МВА
|
Я тоже начинал использовать CVAVR.
|
Мне-то всё равно, в чём писать, один фиг ручками (старый ассемблерщик ), но вот адептов жалко.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:19.
|
|