![]() |
|
|||||||
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
#1 |
|
Member
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0 ![]() |
добрый день
### ЗАДАЧА некий проек, написанный на "Ардуине/ATmega-328P", в нем активно используется delay() планируется: - по событию PCINT -> вызвать обработчик, в нем настроить и запустить таймер (одноразово) (еще не знаю в каком режиме и какой из 3х) - по срабатыванию таймера (переполнение, сравнени не важно как) -> вызвать обработчик таймера - в обработчике "сделать нечто" и "самоуничтожится" (отключиться) - далее управление основному процессу шаг с вызовом таймера нужен для подавления "шума" на входе PCINT (на "профильных" форумах рекомендуют задержку 50-200 мс) ### ВОПРОСЫ 1. возможно ли такая реализация задуманного? есть подзрения, что из-за использования в проекте delay() могут быть как.либо "особенности и подводные камни" (я не знаю как реализована функция delay(), м.б. и с пом-ю таймеров, поэтому и закрались сомнения) 2. какой из таймеров/режим наиболее подходит под эту задачу 3. подводные камни такой реализации, мысли, идеи 4. у таймеров есть так называемый "подавитель шума", как можно это использовать в поставленной задаче? можно ссылки, ключевые слова итд спасибо Последний раз редактировалось sunjob; 18.11.2013 в 03:11. |
|
|
|
|
|
#2 |
|
Senior Member
Регистрация: 21.09.2013
Сообщений: 109
Вес репутации: 0 ![]() |
Если проект написан на ардуевском языке я бы на этом языке все и реализовывал, чтобы не сотворить самому себе повод для увлекательной многочасовой отладки.
Я так понял, что Вам нужно: дождаться изменения значения на ноге -> подождать 50-200 милисекунд -> выполнить некоторые действия. Если не прав поправьте. В этом случае логичнее было бы повесить на нужную ногу прерывание и внутри обработчика прерывания вызывать delay(50), перед выполнением требуемых операций. |
|
|
|
|
|
#3 | |||
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
Цитата:
|
|||
|
|
|
|
|
#4 |
|
Member
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0 ![]() |
да, шум - это дребезг контактов
|
|
|
|
|
|
#5 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Тогда лучше и надежнее использовать на вход конденсатор 0,01-0,1мКф
|
|
|
|
|
|
#6 |
|
Member
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0 ![]() |
статьи (множество) про энкодер изучил, про RC-цепочки в курсе, вопросы все равно остались
да и на практике не все так радужно: - RC-цепи помогают, но не устраняют дребезг - с энкодером, так же не все однозначно рассматриваю прерывание PCINT, есть рабочая реализация но !!! хочу улучшить характеристики "программным подавление дребезга контактов" >> "внутри обработчика прерывания вызывать delay(50)" разве это нормально в обработчике использовать задержку? >> "подавитель шума" у таймера можно ли использовать его в данном случае (я не нашел описания применения этой фишки) Последний раз редактировалось sunjob; 18.11.2013 в 17:15. |
|
|
|
|
|
#7 | ||
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
А программно, получается с задержками и все равно иногда проскакивают ложные срабатывания При условии что энкодер обрабатывается в цикле, а не в обработчике прерывания Цитата:
Получается что на вход попало, то его уже не убрать. Я для частотомера использовал счетчик импульсов, так вот при инициализации у него есть такая функция фильтрации |
||
|
|
|
|
|
#8 |
|
Member
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0 ![]() |
>> Вы проверяли?
проверял, конкретный экземпляр энкодера... конкретный экземпляр, возможно другие эклемпляры ведут себя поспокойнее, но данный очень шумливый, меняться не будет, оч. специфичный вторую часть ответа не совсем переварил: >> разве это нормально в обработчике использовать задержку? если да, то почему?! если нет, то почему?! я считаю что в прерываниях не должно быть ни чего кроме "выставления флагов" и мгновенный выход, ни чего более буду переваривать сказанное-прочитанное, спасибо |
|
|
|
|
|
#9 | |
|
Senior Member
Регистрация: 21.09.2013
Сообщений: 109
Вес репутации: 0 ![]() |
Цитата:
|
|
|
|
|
|
|
#10 |
|
Member
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0 ![]() |
остались три вопроса:
- какой из режимом таймера Timer1 наиболее подходит под эту задачу? - подводные камни такой реализации, мысли, идеи, учитывая что в проекте используется кондовые ардуиновские функции delay() etc... ? - вызов таймера может нарушить работу ардуиновских функций delay(), etc... ? Последний раз редактировалось sunjob; 20.11.2013 в 04:33. |
|
|
|
![]() |
| Здесь присутствуют: 3 (пользователей: 0 , гостей: 3) | |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|