Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.11.2013, 01:38   #1
sunjob
Member
 
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0
sunjob is an unknown quantity at this point
По умолчанию arduino, таймер, обработчик, delay() - неск. вопросов по реализации

добрый день

### ЗАДАЧА

некий проек, написанный на "Ардуине/ATmega-328P", в нем активно используется delay()

планируется:

- по событию PCINT -> вызвать обработчик, в нем настроить и запустить таймер (одноразово) (еще не знаю в каком режиме и какой из 3х)
- по срабатыванию таймера (переполнение, сравнени не важно как) -> вызвать обработчик таймера
- в обработчике "сделать нечто" и "самоуничтожится" (отключиться)
- далее управление основному процессу

шаг с вызовом таймера нужен для подавления "шума" на входе PCINT (на "профильных" форумах рекомендуют задержку 50-200 мс)

### ВОПРОСЫ

1. возможно ли такая реализация задуманного?
есть подзрения, что из-за использования в проекте delay() могут быть как.либо "особенности и подводные камни" (я не знаю как реализована функция delay(), м.б. и с пом-ю таймеров, поэтому и закрались сомнения)
2. какой из таймеров/режим наиболее подходит под эту задачу
3. подводные камни такой реализации, мысли, идеи
4. у таймеров есть так называемый "подавитель шума", как можно это использовать в поставленной задаче?

можно ссылки, ключевые слова итд

спасибо

Последний раз редактировалось sunjob; 18.11.2013 в 03:11.
sunjob вне форума   Ответить с цитированием
Старый 18.11.2013, 10:02   #2
SilverSwift
Senior Member
 
Регистрация: 21.09.2013
Сообщений: 109
Вес репутации: 0
SilverSwift is an unknown quantity at this point
По умолчанию

Если проект написан на ардуевском языке я бы на этом языке все и реализовывал, чтобы не сотворить самому себе повод для увлекательной многочасовой отладки.

Я так понял, что Вам нужно:
дождаться изменения значения на ноге -> подождать 50-200 милисекунд -> выполнить некоторые действия.
Если не прав поправьте. В этом случае логичнее было бы повесить на нужную ногу прерывание и внутри обработчика прерывания вызывать delay(50), перед выполнением требуемых операций.
SilverSwift вне форума   Ответить с цитированием
Старый 18.11.2013, 12:16   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
шаг с вызовом таймера нужен для подавления "шума" на входе PCINT (на "профильных" форумах рекомендуют задержку 50-200 мс)
В данном случаи лучше и надежнее использовать на вход конденсатор

Цитата:
2. какой из таймеров/режим наиболее подходит под эту задачу
Timer1

Цитата:
4. у таймеров есть так называемый "подавитель шума", как можно это использовать в поставленной задаче?
Какие характеристики у шума? Может быть речь идет о драбезге?
Admin вне форума   Ответить с цитированием
Старый 18.11.2013, 16:45   #4
sunjob
Member
 
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0
sunjob is an unknown quantity at this point
По умолчанию

да, шум - это дребезг контактов
sunjob вне форума   Ответить с цитированием
Старый 18.11.2013, 16:58   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Тогда лучше и надежнее использовать на вход конденсатор 0,01-0,1мКф
Admin вне форума   Ответить с цитированием
Старый 18.11.2013, 17:11   #6
sunjob
Member
 
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0
sunjob is an unknown quantity at this point
По умолчанию

статьи (множество) про энкодер изучил, про RC-цепочки в курсе, вопросы все равно остались

да и на практике не все так радужно:
- RC-цепи помогают, но не устраняют дребезг
- с энкодером, так же не все однозначно

рассматриваю прерывание PCINT, есть рабочая реализация но !!! хочу улучшить характеристики "программным подавление дребезга контактов"

>> "внутри обработчика прерывания вызывать delay(50)"
разве это нормально в обработчике использовать задержку?

>> "подавитель шума" у таймера
можно ли использовать его в данном случае (я не нашел описания применения этой фишки)

Последний раз редактировалось sunjob; 18.11.2013 в 17:15.
sunjob вне форума   Ответить с цитированием
Старый 18.11.2013, 17:33   #7
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
- RC-цепи помогают, но не устраняют дребезг
Вы проверяли? Я лично проверял на энкодерах, помогает и устраняет
А программно, получается с задержками и все равно иногда проскакивают ложные срабатывания
При условии что энкодер обрабатывается в цикле, а не в обработчике прерывания

Цитата:
рассматриваю прерывание PCINT, есть рабочая реализация но !!! хочу улучшить характеристики "программным подавление дребезга контактов"

>> "внутри обработчика прерывания вызывать delay(50)"
разве это нормально в обработчике использовать задержку?
Проблема в том что дребезг внутри прерывания никак не устранить. Потому как прерывание срабатывает и запускает обработчик от этих импульсов
Получается что на вход попало, то его уже не убрать.

Я для частотомера использовал счетчик импульсов, так вот при инициализации у него есть такая функция фильтрации
Admin вне форума   Ответить с цитированием
Старый 18.11.2013, 18:44   #8
sunjob
Member
 
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0
sunjob is an unknown quantity at this point
По умолчанию

>> Вы проверяли?
проверял, конкретный экземпляр энкодера... конкретный экземпляр, возможно другие эклемпляры ведут себя поспокойнее, но данный очень шумливый, меняться не будет, оч. специфичный

вторую часть ответа не совсем переварил:
>> разве это нормально в обработчике использовать задержку?

если да, то почему?!
если нет, то почему?!

я считаю что в прерываниях не должно быть ни чего кроме "выставления флагов" и мгновенный выход, ни чего более

буду переваривать сказанное-прочитанное, спасибо
sunjob вне форума   Ответить с цитированием
Старый 18.11.2013, 22:46   #9
SilverSwift
Senior Member
 
Регистрация: 21.09.2013
Сообщений: 109
Вес репутации: 0
SilverSwift is an unknown quantity at this point
По умолчанию

Цитата:
разве это нормально в обработчике использовать задержку?
По ситуации... Если надо быстро выставить флаг - ОК. Можно добавить флаг, который будет выставляться по прерыванию и на каждой итерации цикла проверять его...
SilverSwift вне форума   Ответить с цитированием
Старый 19.11.2013, 18:39   #10
sunjob
Member
 
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0
sunjob is an unknown quantity at this point
По умолчанию

остались три вопроса:

- какой из режимом таймера Timer1 наиболее подходит под эту задачу?
- подводные камни такой реализации, мысли, идеи, учитывая что в проекте используется кондовые ардуиновские функции delay() etc... ?
- вызов таймера может нарушить работу ардуиновских функций delay(), etc... ?

Последний раз редактировалось sunjob; 20.11.2013 в 04:33.
sunjob вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 01:58. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика