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

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

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

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

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

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

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

 
Опции темы
Непрочитано 27.02.2015, 15:17  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

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

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

Вы хотите опрашивать через 100 мс? Пожалуйста, но тогда решение будете принимать за 1 интервал, и кнопки будут неприятными пользователю.
Реклама:
makakus вне форума  
Непрочитано 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  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
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  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
Только после двойного нажатия контроллер засыпает примерно через секунду. Но от этого не избавиться, так как решение принимается пауза или нет через 0,7 секунды. Пауза между нажатиями до 0,7 сек.
Не горюйте по этому поводу, пауза необходима, чтоб успеть убрать руки от кнопки подальше и не включить подсветку ненароком снова.
omercury вне форума  
Непрочитано 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  
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  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 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  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

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

Последний раз редактировалось omercury; 02.03.2015 в 21:39.
omercury вне форума  
Непрочитано 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  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
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, время: 16:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot