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

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

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

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

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

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

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

Ответ
Опции темы

Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Непрочитано 27.02.2015, 15:17   #341
makakus
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
В начале программы есть такая строчка
Не очень хочется разбираться в чужих программах, тем более, если автор присутствует.

"постараемся отрезки времени установить 0,1 сек" Что значит "постараемся?" И 100 мс это очень много. Человек легко нажимает кнопку 15 раз в секунду...

Я же писал выше: таймер даёт прерывание через 10 мс: выставляет флаг "системный тик". В основном цикле программы обработчик кнопок может выставить флаги событий и состояний кнопок, может тут же обработать эти события или кто там их обработает дальше в цикле.

Вы хотите опрашивать через 100 мс? Пожалуйста, но тогда решение будете принимать за 1 интервал, и кнопки будут неприятными пользователю.
Реклама:
makakus вне форума   Ответить с цитированием
Непрочитано 27.02.2015, 16:21   #342
МВА
Гражданин KAZUS.RUN
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 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   #343
makakus
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
makakus на пути к лучшему
По умолчанию 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)
makakus вне форума   Ответить с цитированием
Непрочитано 28.02.2015, 11:56   #344
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
Только после двойного нажатия контроллер засыпает примерно через секунду. Но от этого не избавиться, так как решение принимается пауза или нет через 0,7 секунды. Пауза между нажатиями до 0,7 сек.
Не горюйте по этому поводу, пауза необходима, чтоб успеть убрать руки от кнопки подальше и не включить подсветку ненароком снова.
omercury вне форума   Ответить с цитированием
Непрочитано 28.02.2015, 20:54   #345
МВА
Гражданин KAZUS.RUN
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
Не горюйте по этому поводу, пауза необходима, чтоб успеть убрать руки от кнопки подальше и не включить подсветку ненароком снова.
Всем доброго времени суток.
Нет, не поможет. Лишние нажатия воспримутся, как несуществующие команды, а раз их нет в сравнении и их функций, то ничего не будет. После каждого нажатия инкрементируется счетчик команд. Теоретически можно обработать 256 команд, если считать 0 командой. Но, кому это надо? Максимум 3-4. Представляете 255 раз нажать?
МВА вне форума   Ответить с цитированием
Непрочитано 02.03.2015, 07:06   #346
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
В режиме, когда светодиод управляется таймером в режиме ШИМ, PORTB.0 включается и выключается с частотой ШИМ таймером, и поэтому то, что вы пытались его включить вручную - он тут-же начнет дергать ногой от таймера.
Если нужно выключить ШИМ - запиши, на СИ, TCCR0A&=~(3‹‹6); Этим Вы сбросите биты СOM0A0 и COM0A1, что отключит таймер от вывода...
Большое спасибо Вам за подсказку! Отредактировал код, как Вы посоветовали, но всё равно компилятор почему-то считает функцию бесполезной? Может я что-то неправильно написал? Подскажите пожалуйста - вот отредактированный код
Вложения:
Тип файла: txt LED_on_off_corrected.txt (4.3 Кб, 23 просмотров)
prosto_andriy вне форума   Ответить с цитированием
Непрочитано 02.03.2015, 21:18   #347
МВА
Гражданин KAZUS.RUN
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Большое спасибо Вам за подсказку! Отредактировал код, как Вы посоветовали, но всё равно компилятор почему-то считает функцию бесполезной? Может я что-то неправильно написал? Подскажите пожалуйста - вот отредактированный код
Всем доброго времени суток.
Я не знаю, каким компилятором вы пользуетесь, но у меня такие типы данных, как bit, AVR Studio, не воспринимает. И поэтому я не могу Вашу программу дизассемблировать и пройти по шагам.
Но бегло просмотрев программу я так и не понял функцию key_scan() и много замечаний по другим функциям. Я не знаю, как добавлять программы в пост, но я прописными буквами поделал комментарии в Вашем прикрепленном файле и прилагаю к сообщению. Кстати, имеются те же ошибки о которых писал Proshha.

PS. Инкремент переменной systemClock задуман в прерывании по переполнению. Зачем пытаться инкрементировать его еще и в функции?
Вложения:
Тип файла: txt LED_on_off_corrected.txt (5.4 Кб, 30 просмотров)

Последний раз редактировалось МВА; 02.03.2015 в 21:42.
МВА вне форума   Ответить с цитированием
Сказали "Спасибо" МВА
prosto_andriy (02.03.2015)
Непрочитано 02.03.2015, 21:35   #348
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
Я не знаю, каким компилятором вы пользуетесь
Я знаю - CVAVR.
2 дня потерял на борьбу с ней - при изменении значений констант!!! прога наглухо вешается и не запускается даже приметивнейший ШИМ, не говоря уж о контроле каких-либо состояний. Та же беда с volatile. Пробовал от версий 1.25 до 3.12. В результате убил нафиг эту гадость.

Пока не смените IDE - я вам не помощник.

Последний раз редактировалось omercury; 02.03.2015 в 21:39.
omercury вне форума   Ответить с цитированием
Непрочитано 02.03.2015, 21:52   #349
МВА
Гражданин KAZUS.RUN
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 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   #350
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
Я тоже начинал использовать CVAVR.
Мне-то всё равно, в чём писать, один фиг ручками (старый ассемблерщик ), но вот адептов жалко.
omercury вне форума   Ответить с цитированием
Ответ


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

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, время: 17:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.