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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 20.04.2013, 14:39  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Алгоритмы фильтра дребезга avr

_Ross_, два дебильных вопроса:

1) Как часто перекрываются датчики?
2) Зачем второе прерывание по входу?

Ответьте сначала на эти вопросы, главным образом себе.
Реклама:
omercury вне форума  
Непрочитано 21.04.2013, 21:08  
_Ross_
Временная регистрация
 
Регистрация: 12.02.2010
Сообщений: 67
Сказал спасибо: 27
Сказали Спасибо 45 раз(а) в 15 сообщении(ях)
_Ross_ на пути к лучшему
По умолчанию Re: Алгоритмы фильтра дребезга avr

Спасибо. По таймеру красиво, только вот мне не удаётся проверяя сразу 2 датчика понять кто из них первый, это теряется на этапе между опросом по таймеру и анализом данных в цикле. А реверс нужен.
omercury, максимум 7 раз в секунду.
А при реализации из первого поста могло за секунду и 20 насчитать.

Вот код без прерываний, в его основе то что в какой-то момент оба датчика имеют одинаковое состояние (оба смотрят в прорезь на диске) а затем выясняется в сторону какого из них объект ушёл.

Код:
Cycle:   
			  sbic PIND,3
			  rjmp Cycle
			  sbic PIND,2
			  rjmp Cycle
			  rjmp schet  ; Это выполняется только при "0" и "0"
			  
schet:
			  rcall Delay ; Задержка
			  inc stat     
			  cpi stat,5  ; Тут многократная проверка состояния
			  brlo Cycle
			  sbic PIND,3 ; Теперь ожидание затенения
			  rjmp prs   
			  sbic PIND,2 ; Одного из датчиков
 			  rjmp prr       
			  rjmp schet 
prr:
			  rcall Delay
			  inc stat1
			  cpi stat1,8  ; Тоже многократная проверка
			  brlo schet
			  rjmp chn    ; Переход на подпрограмму счёт назад
			  
Вторая подпрограмма по метке prs аналогична этой.
Используемые регистры очищаются в подпрограммах счёта.
Собственно, уверен что от ложных срабатываний это не избавит полностью, так, если именно с этой средней точки начнётся какая-то вибрация вперёд-назад ещё неизвестно куда будет счёт. Нужна критика и если не трудно-информация как же это в мире-то решается.

Последний раз редактировалось _Ross_; 21.04.2013 в 21:11.
_Ross_ вне форума  
Непрочитано 22.04.2013, 01:30  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Алгоритмы фильтра дребезга avr

Сообщение от _Ross_ Посмотреть сообщение
максимум 7 раз в секунду.
А при реализации из первого поста могло за секунду и 20 насчитать.
Могло и 200 и 2000 и 20000.
Не в этом суть. На второй вопрос не ответили.
(подсказка - квадратурный энкодер, картинка...)
omercury вне форума  
Непрочитано 22.04.2013, 08:44  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Алгоритмы фильтра дребезга avr

_Ross_, не понял устройство датчика, но, думаю, обычный вариант. Тогда должно быть четыре состояния:
1. Оба темные
2. Первый светлый, второй - темный
3. Оба светлые
4. Первый темный, второй - светлый
Если при проверках по прерыванию (по изменению состояния) состояния изменяются, скажем, 1-2-3 - норма, 1-2-1-2 (или подобным образом) - дребезг.
Думается, лучше развить эту мысль, чем воевать с временами (при разных скоростях - разные времена, сложный алгоритм).
ПС Это просто мысль, не конкретный алгоритм.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 22.04.2013, 08:53  
_Ross_
Временная регистрация
 
Регистрация: 12.02.2010
Сообщений: 67
Сказал спасибо: 27
Сказали Спасибо 45 раз(а) в 15 сообщении(ях)
_Ross_ на пути к лучшему
По умолчанию Re: Алгоритмы фильтра дребезга avr

Интересно, именно на вибрацию на границе учёта я и наткнулся, портит показания.
Думаю, я не стану изменять значение счётчика пока не пройдёт полный цикл изменений.
Есть вариант с изменением условий прерываний с фронта на спад.
Сейчас получаю ошибки положения при резких рывках туда-сюда несмотря на то что я сделал учёт только после цикла "оба открыты"- "оба закрыты". Нужно всё-же полностью контролировать ситуацию.

Последний раз редактировалось _Ross_; 22.04.2013 в 10:50.
_Ross_ вне форума  
Непрочитано 22.04.2013, 11:51  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Алгоритмы фильтра дребезга avr

Попробуйте делать счет отслеживая корректные изменения состояния датчиков. Примерно так

00 - › 01 - › 11 - count up
00 - › 10 - › 11 - cont down
__________________
misterdi<@>i.ua
MisterDi вне форума  
Сказали "Спасибо" MisterDi
_Ross_ (22.04.2013)
Непрочитано 22.04.2013, 12:00  
_Ross_
Временная регистрация
 
Регистрация: 12.02.2010
Сообщений: 67
Сказал спасибо: 27
Сказали Спасибо 45 раз(а) в 15 сообщении(ях)
_Ross_ на пути к лучшему
По умолчанию Re: Алгоритмы фильтра дребезга avr

Спасибо, этим я сейчас и занят.
Задача понятна - По сути мне нужно считывать состояние 2-х входов и возможно 4 их состояния отличных друг от друга.
Переход от 1 к 3 возможен только через 4 или 2
1-4-3 счёт назад например и 1-2-3 вперёд при этом такие штуки как 1-2-1-2-1-2-3 должны обрабатываться как 1-2-3
_Ross_ вне форума  
Непрочитано 22.04.2013, 13:35  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Алгоритмы фильтра дребезга avr

Так и не дождался ответа.
Попробую развить мысль в одно лицо.
Картинка как раз для этого случая, воспользуемся.
Нажмите на изображение для увеличения
Название: 480px-Счетчик_импульсов_реверсивный_режим_работы.jpg
Просмотров: 41
Размер:	20.5 Кб
ID:	46090
Работаем по событиям (Events) на первом датчике, второй для контроля направления.
1) Простейший случай:
- положение 1, оба датчика освещены, на входах "0" (датчики замыкают на "землю");
- переход в положение 2, перекрывается датчик-1 и линия переходит в "1" - происходит Event posedge(положительный перепад). Проверяем датчик-2, на нем по прежнему "0" - значит происходит вращение вправо. Если бы было "1" - значит было бы вращение влево. Однозначно!

2)Чуть сложней, с подавлением дребезга:
- положение 1, оба датчика освещены, на входах "0" (датчики замыкают на "землю");
- переход в положение 2, перекрывается датчик-1 и линия переходит в "1" - происходит Event posedge(положительный перепад). Проверяем датчик-2, на нем по прежнему "0" - значит происходит вращение вправо. Запоминаем состояние датчика-2 в двух флагах (флаг-1 и флаг-2) и запускаем таймаут. Если в течение отсчёта таймаута произошло ещё одно такое же событие(положительный перепад) и состояние датчика-2 изменилось на противоположное (проверяем по флагу-2), то это однозначно интерпретируется как дрожание счётного механизма. Происходит перезапуск таймаута, сохранение положения датчика-2 только в флаг-2 и ожидание следующего события. Это действие может происходить сколь угодно большое количество раз - на работу устройства оно не оказывает совершенно никакого влияния. Если за время таймаута происходит ещё одно событие (уже третье), но состояние флага-2 и датчика-2 на этот раз совпали, то это следует интерпретировать как реверс счётного механизма. Выполняем инверсию флага-1 и делаем переход на анализ его состояния и исполнение описанного в следующем предложении.
Если же вышел таймаут до прихода следующего события, то анализируется флаг-1 и производятся необходимые действия в соответствии с логикой программы. Далее происходит сброс флагов и наступает ожидание следующего события.

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

Можно, конечно, анализировать все четыре состояния датчиков, но нужно ли?

Последний раз редактировалось omercury; 22.04.2013 в 13:37.
omercury вне форума  
Сказали "Спасибо" omercury
_Ross_ (22.04.2013)
Непрочитано 22.04.2013, 20:15  
_Ross_
Временная регистрация
 
Регистрация: 12.02.2010
Сообщений: 67
Сказал спасибо: 27
Сказали Спасибо 45 раз(а) в 15 сообщении(ях)
_Ross_ на пути к лучшему
По умолчанию Re: Алгоритмы фильтра дребезга avr

Мне кажется, 4 состояния дали бы мне некую амплитудную фильтрацию вибрации датчика. По времени там диапазон возможных скоростей и вибраций частично пересекается.
В вашем описании алгоритма я кажется всё понял. Только пока он не функционирует но это я очевидно что-то упустил.

Цитата:
Если в течение отсчёта таймаута произошло ещё одно такое же событие(положительный перепад) и состояние датчика-2 изменилось на противоположное (проверяем по флагу-2), то это однозначно интерпретируется как дрожание счётного механизма.
То есть оно будет работать как маятник пока не закончится дребезг? Перезапись обратного значения, перезапуск таймера...

Цитата:
Если за время таймаута происходит ещё одно событие (уже третье), но состояние флага-2 и датчика-2 на этот раз совпали, то это следует интерпретировать как реверс счётного механизма.
А если у меня таймаут такой что за его длительность никак не может произойти такого смещения?
_Ross_ вне форума  
Непрочитано 22.04.2013, 20:30  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Алгоритмы фильтра дребезга avr

Сообщение от _Ross_ Посмотреть сообщение
А если у меня таймаут такой что за его длительность никак не может произойти такого смещения?
А если вообще без времен, а только анализ состояний? Правильная последовательность - движение, неправильная - дребезг. И никаких заморочек типа "а какая скорость?" и тому подобного.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Искуственный интелект и его алгоритмы Uragan90 Отвлекитесь, эмбеддеры! 254 02.10.2012 13:29
АЦП и алгоритмы нормализации данных nerozero Микроконтроллеры, АЦП, память и т.д 39 25.04.2011 18:40
Декоративный RGB светильник, алгоритмы светоэффектов gary2007 Источники питания и свет 8 24.02.2011 13:57
Программное избавление от дребезга контактов. bopohok Микроконтроллеры, АЦП, память и т.д 10 06.04.2007 14:26


Часовой пояс GMT +4, время: 00:13.


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