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