Easyelectronics.ru

Электроника для всех
Текущее время: 22 июл 2018, 23:21

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 14:08 
Только пришел

Зарегистрирован: 01 дек 2015, 18:24
Сообщения: 16
Возникла специфическая задача отслеживания мигания светодиода внешнего устройства. Доступа к этому устройству нет, единственный индикатор на нем это светодиод. С помощью него можно отслеживать текущее состояние, но это необходимо делать удаленно. Так вот у него есть следующие алгоритмы работы:
1) Он не светится - это состояние совершенно не интересует и его передавать не нужно.
2) Он постоянно горит - это состояние также неинтересно.
3) Идет передача данных, диод загорается и вспыхивает с разной периодичностью - это состояние также неинтересно.
4) Устройство в ошибке: светодиод вспыхивает несколько раз, после небольшая пауза и действие повторяется до устранения ошибки, количество вспышек это номер ошибки устройства. Именно наличие ошибки и ее номер сейчас необходим.
Устройство медленное, наличие ошибки может прийти с задержкой, потому собирать данные можно хоть минуту, хоть 2.
Есть ограничение по памяти в контроллере: не более 256 байт на эту задачу, потому делать монстроузорные массивы возможности нет.
Сейчас пришел к решению:
1) Включаем таймер на отсчеты по 10мс, в прерывании суммируем переменную.
2) Настраиваем прерывание по спаду и подъему на входе.
3) При первом прерывании от входа сбрасываем переменную что суммирует таймер, при повторном прерывании записываем значение этой переменной в массив, сбрасываем эту переменную и ожидаем следующее прерывание по входу..... Действие повторяем пока не заполним массив до конца.
4) Далее ищем два максимума задержки времени и считаем количество элементов в массиве между этими значениями(это и будет количество морганий).
5) Можно провернуть такое действие пару раз и сравнить.
Так вот мне не ясно, какие подводные камни могут быть у такого подхода? Правильный ли он, может кто то такую задачу уже решал.
Также не могу понять каким образом понять где в массиве 2 максимальные задержки, найти максимальное число в массиве не составляет труда, но как понять сколько еще раз искать максимальное значение? Ведь если количество морганий диода 2, то в массив этих максимумов влезет допустим 10, а если морганий 4, то уже не более 4х.
В общем буду рад любым предложениям.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 14:18 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4586
На сколько надежно считывание "светодиода"?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 14:19 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1970
Вах-вах, зачэм массиви? Простой однобайтный счетчик, и инкрементируйте его, когда обнаружите факт мигания светодиода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 14:24 
Только пришел

Зарегистрирован: 01 дек 2015, 18:24
Сообщения: 16
BusMaster писал(а):
Вах-вах, зачэм массиви? Простой однобайтный счетчик, и инкрементируйте его, когда обнаружите факт мигания светодиода.

А как же вариант 3? Беспорядочное мигание?
u37 писал(а):
На сколько надежно считывание "светодиода"?

Он внешний, потому можно подключится к проводам через оптопару и поставить триггер по входу. Будем считать, что надежное.
ПС. Вариант стрима потока диода не предлагать, трафик дорогой :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 14:28 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1970
Так вы анализируйте длительность включения св.диода и длительность пауз между включениями. Если попадает точно в нужный интервал, значит, есть факт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 14:31 
Только пришел

Зарегистрирован: 01 дек 2015, 18:24
Сообщения: 16
Да, так и есть, но интервал между вспышками и паузами вспышек да и время нахождения диода зажженным может измениться, так как третья сторона может это просто взять и сделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 14:35 
Только пришел

Зарегистрирован: 01 дек 2015, 18:24
Сообщения: 16
Представьте флешку, которая во время записи моргает диодом, во время отключения от порта ЮСБ потушена и в режиме готовности постоянно горит и добавьте еще к ней вариант сигнализирования ошибки вспышками диода в бесконечном цикле с паузами между "блоками" вспышек(это нужно отслеживать). Это и будет моя задача контроля.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 14:59 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1253
Откуда: Курск
Посадите наблюдать за вспышками гастарбайтера. И по памяти уложитесь и по быстродействию


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 15:18 
Только пришел

Зарегистрирован: 01 дек 2015, 18:24
Сообщения: 16
А теперь представим, что на данный момент таких устройств более 800 шт. И предвидится их увеличение. Это вызовет бум на рынке труда гастарбайтеров, что в свою очередь приведет к их ценности, что приведет к увеличению зарплаты, после это заметят новые гастарбайтеры их количество будет расти, что приведет к нехватке продовольствия.......................................... Спустя 5 лет: общемировой кризис, третья мировая из-за борьбы за продукты....... Не, я не готов отвечать за такое :)
Буду привлекать к ответственности STM32.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 17:20 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4586
1. вычислите длительность импульса и паузы при "импульсе" и длительность интервала между импульсами (пропуск между "морганиями")
Сие придется сделать руками, относительно точно и на нескольких экземплярах.
2. на основе данных п1 научитесь декодировать моргания в код, с учетом допуска, скажем, 15%.
3. если ОченьДолго (ваша константа) не принимается код, обнуляйте буфер.
3. пишите полученные коды в буфер. Если за последние N (>2) отсчетов принят код К, значит вы получили то, что хотели.
P.S.
Если внешнее моргание фатально мешает и налезает на код моргания, придется применять другой прием ... и уж точно не AVR.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 19:07 
Только пришел

Зарегистрирован: 01 дек 2015, 18:24
Сообщения: 16
u37 писал(а):
1. вычислите длительность импульса и паузы при "импульсе" и длительность интервала между импульсами (пропуск между "морганиями")
Сие придется сделать руками, относительно точно и на нескольких экземплярах.
2. на основе данных п1 научитесь декодировать моргания в код, с учетом допуска, скажем, 15%.
3. если ОченьДолго (ваша константа) не принимается код, обнуляйте буфер.
3. пишите полученные коды в буфер. Если за последние N (>2) отсчетов принят код К, значит вы получили то, что хотели.
P.S.
Если внешнее моргание фатально мешает и налезает на код моргания, придется применять другой прием ... и уж точно не AVR.


К сожалению пункт 1 невыполним, прошивку устройства за которым должно следить моё, обновляют без предупреждения, сам замечал, что длительность импульса может быть разной, на некоторых посчитать "глазами" можно совершенно не напрягаясь, на других при количестве морганий более 10 шт, начинаешь уже сбиваться со счета. Если бы пункт 1 был выполним этой темы не было бы. Так же таблица ошибок иногда обновляется и добавляется новое количество морганий.
ПС. Не понял при чем тут AVR?
Так же вариант - написать разработчику устройства и попросить что то изменить, не рассматривается, по многим причинам:
1) Делают их несколько разных компаний, от этого тоже небольшое отличие.
2) Цена обновления прошивки на одном от 5 до 15$, что при количестве 800+ выливается в круглую сумму, применяются только вынужденные обновления и то выборочно.
3) Одному из разработчиков уже и писали и звонили, получили ответ, что это идет в разрез с политикой компании, и это не мудрено, у них есть свой девайс слежения за дофига денег + абонплата(в этом случае предложение о гастарбайтерах обретает смысл).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 19:49 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2013, 00:58
Сообщения: 2935
Откуда: Тольятти
Если вы не можете выделить диапазоны длительностей импульсов и пауз такие, что в них однозначно классифицируются ваши мигания, то у задачи нет решения.

Задача решается тайм-аутами и счетчиками состояний, т.е., развитым механизмом распознавания состояний и обработке очередного события по дереву решений. Алгоритмическое мышление тут является большим врагом (если X, то Y), хотя наш мозг ищет именно такого решения (вы это демонстрируете в заглавном посте). Продумайте все возможные состояния декодера (идет прием импульса, идет прием паузы, кончился тайм-аут приема импульса/паузы, конец тайм-аута посылки пачки и т.д.). Разрисуйте на бумаге дерево состояний, выработайте поведение автомата в каждой ситуации (принятие решения), а потом это будет несложно переложить в алгоритм. Массивов и потоков не понадобится, максимум - это несколько программных таймеров и двоичных флагов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 20:19 
Старожил
Аватара пользователя

Зарегистрирован: 28 мар 2012, 10:33
Сообщения: 1143
Откуда: Сочи
Нужно жестко задать несколько констант:
1. Максимальная длительность паузы. (Если нет вспышки больше этого времени, считаем, что светодиод выключен.)
2. Максимальная длительность вспышки (аналогично)
3. Максимальное количество вспышек ошибки. Например 15. Если вспышек больше 15 - считаем, что мигает бесконечно, такой режим нас не интересует.

Далее задача разбивается на две:
1. Определить короткую паузу (между вспышками ошибки, с учетом погрешности).
2. Определить длинную паузу (между пакетами вспышек об ошибке) и посчитать количество вспышек.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 21:24 
Только пришел

Зарегистрирован: 01 дек 2015, 18:24
Сообщения: 16
Уже написал. В понедельник поеду тестировать. Если будут варианты, предлагайте, всегда рад.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 22:01 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 3171
Neo_Matrix писал(а):
4) Устройство в ошибке: светодиод вспыхивает несколько раз, после небольшая пауза и действие повторяется

Полагая, что длительность этой "небольшой паузы" - константа уникальная (не встречается при других режимах), то я бы сделал так:
1. Дежурное состояние: подсчет длительности каждой паузы.
2. Как только пауза искомой длины обнаружена, начинаем считать вспышки.
3. Контроль: если после какого-либо количества вспышек обнаружена пауза или горение "нестандартной" длительности, то считанное количество обнуляется как ложное детектирование и счетчик переходит в дежурный режим.
4. Если правильная пауза детектируется несколько раз подряд, и количество вспышек между ними одинаково, то выдаем сигнал обнаружения и дальнейшие требуемые действия.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 16 июн 2018, 22:32 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4586
Автокорреляционный метод и на выходе получается период сигнала и его достоверность.
По достоверности можно принять решение о наличии "ошибки". Ну а как ее распознать ...
"длительность импульса может быть разной, на некоторых посчитать "глазами" можно совершенно не напрягаясь, на других при количестве морганий более 10 шт"
...
(не знаю, меня такие отговорки никогда не останавливали. Для "чистого" сигнала не смочь его определить? ... )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм отслеживания "мигания светодиода"
СообщениеДобавлено: 18 июн 2018, 08:38 
Только пришел

Зарегистрирован: 01 дек 2015, 18:24
Сообщения: 16
Всем спасибо. Все отлично работает. По сути у меня и получился автокорреляционный метод.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB