реклама на сайте
подробности

 
 
> Алгоритм распознавания команд с любого ИК пульта, Нужно конечное число содержащее последовательность пауз и единиц
TViT
сообщение Feb 21 2017, 22:15
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016



Всем привет. Люди подскажите как с минимальными вычислениями реализовать распознавание, детектирование команд с любого пульта на МК.
Сейчас делаю так - использую ATtiny25 нога к которой подключен TSOP настроена как внешнее прерывание по спаду. После 2го спада начинает записывать в массив из 32х ячеек длину 1 и 0.
И потом соответственно ищем минимум это 0 максимум это 1. Пропускаем через алгоритм сравнения если больше минимума значит устанавливаем в конечной 32битной переменной соответствующий времени бит в 1 или соответствующий расположению от начала приема, если равно минимальной длительности то соответственно 0. Все работает. Но на пульте Philips с RC6 глючит по страшному. Он просто по иному работает. Переворачивает toggle бит если второй раз та же кнопка нажимается, плюет без остановки команды пока кнопку не отпустишь и т.д.

Помимо массива длительностей массив из 4х например 32бит переменных в которые в начале записываются команды, ну и потом с ними сравниваются поступающие в реальном времени команды с пульта для управления.

Так вот задача. Следить за длительностью любого импульса что 1 что 0 что паузы или переходов. Потом массив длительностей преобразовать к виду например мин ширина 1, больше в 1.5 или 2 раза минимальной ширины соответственно 2. И этот преобразованный массив к 1,2 (потому что ширина импульсов гуляет то например 10, то 12 или 36, 37) кинуть на что-то подобное CRC8 после чего у нас число в котором зашифрована команда и последовательность бит учтена. Что-то на подобии сжатия. С другой похожей не совпадет.

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

Сообщение отредактировал TViT - Feb 21 2017, 22:19
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
TViT
сообщение Mar 24 2017, 10:08
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016



Я думаю ваш алгоритм сложен, у меня нет столько памяти, чтобы в несжатом виде хранить массивы длительностей. Массив у меня 65байт. Было 32байта ранее, работает кроме пультов от Филипса с RC6. Всего 128байт память и еще занято под программу ФИУ симистором, управлением освещением, плавным включением, яркостью различными режимами и блокировками поступающих команд и т.д. Это всего лишь одна опция моей системы, управление с пульта. Помимо управления кнопками и голосом.

На Филипсе 3 вида длительностей оказалось и разная длительность команд. Может 35 импульсов плюнуть, а может 39 и т.д. Зависит от команды. В остальном похоже с вашим описанием. Плюют постоянно при удержании. И новую команду при повторном нажатии. Но есть еще кнопки, которые 3 команда разом плюют и ожидают. Конечно тайминги и задержки у меня тоже есть, не принимать вторичную посылку. Все упирается в память.



Хотелось бы что-то попроще. Итак не успевает моргает свет при управлении с пульта пока обрабатывает прерывания и вычисляет команду, а управление симистором на это период упускает.
На сколько помню в ATtiny25 нет режима захвата по таймеру.

Сообщение отредактировал TViT - Mar 24 2017, 10:38
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 24 2017, 10:54
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(TViT @ Mar 24 2017, 12:08) *
Я думаю ваш алгоритм сложен, у меня нет столько памяти,
...
Это всего лишь одна опция моей системы, управление с пульта. Помимо управления кнопками и голосом.

Очевидно Вы неправильно выбрали элементную базу. Раз столько функций, зачем было на дохлом AVR делать?
Переделайте на Cortex-M.

Цитата(TViT @ Mar 24 2017, 12:08) *
На Филипсе 3 вида длительностей оказалось и разная длительность команд. Может 35 импульсов плюнуть, а может 39 и т.д.

Я описанным алгоритмом уже много лет пользуюсь. Несколько программ с ним написал.
Написал даже ПО под винду для визуализации и исследования посылок - вот с помощью него в своё время и выяснил многое про работу пультов.
И пультов 1-го и 2-го вида - полно, то что Вы нашли только один ни о чём не говорит. Я перепробовал десятки разных.
И были очень даже хитрые: например от какого-то потолочного кондишена на каждое новое нажатие менял длительность не одного импульса, а нескольких. Вот для того пульта даже моя программа детектирования работать не будет, так как у него более двух кодов на каждую кнопку (там в посылке похоже какой-то N-разрядный счётчик нажатий передавался, а может он ещё что-то передавал вместе с нажатием, так как пульт был навороченный, имел ЖК-индикатор). Но такой пульт встречал только раз.

Цитата(TViT @ Mar 24 2017, 12:08) *
Хотелось бы что-то попроще. Итак не успевает моргает свет при управлении с пульта пока обрабатывает прерывания и вычисляет команду, а управление симистором на это период упускает.

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

Цитата(TViT @ Mar 24 2017, 12:08) *
На сколько помню в ATtiny25 нет режима захвата по таймеру.

Так меняйте его на адекватный задаче.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016