На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Алгоритм распознавания команд с любого ИК пульта , Нужно конечное уникальное число содержащее информацию о входных данных
    Всем привет. Люди подскажите как с минимальными вычислениями реализовать распознавание, детектирование команд с любого пульта на МК.
    Сейчас делаю так - использую ATtiny25 нога к которой подключен TSOP настроена как внешнее прерывание по спаду. После 2го спада начинает записывать в массив из 32х ячеек длину 1 и 0.
    И потом соответственно ищем минимум это 0 максимум это 1.
    Пропускаем через алгоритм сравнения если больше минимума значит устанавливаем в конечной 32битной переменной соответствующий времени бит в 1 или соответствующий расположению от начала приема, если равно минимальной длительности то соответственно 0. Все работает.

    Но на пульте Philips с RC6 глючит по страшному. Он просто по иному работает. Переворачивает toggle бит если второй раз та же кнопка нажимается, плюет без остановки команды пока кнопку не отпустишь и т.д.

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

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

    Ну потом естественно простое сравнение какая кнопка нажата...
    Сообщение отредактировано: TViT -
      Или я ничего не понял, или все работает.
      Что ожидается уяснить/рассмотреть в ходе обсуждения?
        Цитата simsergey @
        Или я ничего не понял, или все работает.
        Что ожидается уяснить/рассмотреть в ходе обсуждения?

        Написано же на пульте с RC6 от Philips не работает.
        Что непонятного? Нужен простенький алгоритм сжатия или кодировки типа CRC8 чтобы на выходе было уникальное число желательно 8бит в котором зашифрована команда. Поскольку существующий вариант не сильно быстрый и стабильный. Для 32 импульсов ИК команды с пульта требуется 32бит переменная и сколько команд столько же таких переменных. А чтобы точнее определять команды с пульта Philips потребуется более точное слежение за изменениями импульсов и пауз между ними что потребует 65бит. 32импульса + 32 паузы. Вот и все.

        Поэтому и нужен алгоритм закодировать практически любую последовательность в небольшую переменную-число 8-16бит. Более менее уникальное, чтобы на одном пульте не было совпадений...
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0189 ]   [ 15 queries used ]   [ Generated: 28.03.24, 20:41 GMT ]