Перейти к содержанию

Распознование Команд С Ик Пульта


Nex

Рекомендуемые сообщения

Имеется такая вот необходимость распознавать команды кнопок пульта. Протокол пульта RC-5. Подскажите, у кого какие идеи? Или где можно подробно узнать о протоколах ИК ПДУ? Еще вопрос, программа SlyControl определяет код кнопки,например такой Code: 01140000000927C9. Можно ли как нибудь от этого оттолкнуться и что он обозначает? Заранее спасибо!!!

#icq 321-504-779

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 59
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Был у Филипса аппаратный SAA3049. Сейчас, к сожалению, не выпускается.

Но можно собрать на PICе или AVR-ке. Кодовые слова для гугля "RC5 decoder"

---

Ну и, как обычно, круче всех эту тему "разжевал" Леонид Иванович :) -

http://www.telesys.ru/electronics/projects.php?do=p036

Изменено пользователем AlenB
Ссылка на комментарий
Поделиться на другие сайты

Недавно написал такой декодер. Программа реально работала - отправлял коды устройства и команд по UART - гипертерминал все прекрасно принимал, даже Винампом рулил отлично (дополнительную примочку написал для него)... Если интересует код для меги 16 компилятора CVAVR - выложу...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Недавно написал такой декодер. Программа реально работала - отправлял коды устройства и команд по UART - гипертерминал все прекрасно принимал, даже Винампом рулил отлично (дополнительную примочку написал для него)... Если интересует код для меги 16 компилятора CVAVR - выложу...

Конечно интересует!! Выложи пожалуйста!! Я как раз в пишу на си для меги 16 =) заранее огромное спасибо!!

#icq 321-504-779

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Код в файле (надо изменить расширение на .с). Используется прерывание по изменению состояния входа INTO. Комментарии есть, так что должно быть понятно... Будут вопросы - постараюсь ответить. Оптимизацией алгоритма и кода не заморачивался - заработало и хорошо... Хотя есть пространство для маневров.

А вот так это выглядит на форме гипертерминала:

rc5.txt

post-20311-1195196026_thumb.jpg

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

  • 2 месяца спустя...

Goodefine

Я собрался написать прошивку (на Си) для устройства из этой темы:

http://forum.cxem.net/index.php?showtopic=22012&st=0

Потому как есть проблемы работоспособностью пульта в системе (№16/предусилитель/замкнуты выводы 5 и 17 SAA3010T). Вот хочу теперь разобраться как в принципе разрабатывать код для поставленной задачи (управлять выводами МК с помошью пульта RC5).

Может подскажете с чего начать? Что почитать может или какую готовую библиотеку подключить? Как составить блок схему программы?

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

PS МК ATtiny2313, компилятор/прошиватель CVAVR, личный опыт - есть опыт программирования на Си, сам сделал бегущий огонек ;)

Заранее благодарен!

Ссылка на комментарий
Поделиться на другие сайты

Статьи Ридико мне хватило. Блок-схему, если появится время, составлю. А по коду конкретные вопросы есть?...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Статьи Ридико мне хватило. Блок-схему, если появится время, составлю.

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

А по коду конкретные вопросы есть?...

Как я понимаю нужно как-то синхронизировать принимаемый сигнал с тактовой частотой МК...

У Вас в коде два промежутка времени, длинный и короткий. Для чего не понял... Еще и нигде, кроме как в определении этих констант (...#define TmaxK 17...) больше нигде они не встречаются.

И определение центра, попадание в промежуток... Это для определения спадов и нарастаний напряжения (логическ 0 и логич 1)?

В общем я полагаю, что алгоритм должен быть примерно такой:

1. Нужно определить начало передачи сигнала

2. Запустить счетчик времени

3. По истечении времени = 1,778 мс определить изменился ли уровень сигнала

- если сигнал увеличился на величину Х, => записываем "1"

- если сигнал уменьшился на величину Х, => записываем "0"

- отсчитываем еще 1,778 мс, и снова проверяем 0 или 1. Так все 14 бит сигнала.

4. Записываем все эти 14 значений в массив

5. Сравниваем массив с ранее заданными, если с каким-то совпадает, то выполняется ссответствующая функция...

- Если код не совпадает ни с одним из заданных, переходим к пункту 1.

6. задержка 0,5 сек (чтобы не выполнялось несколько раз подряд одна и таже команда)

7. goto 1.

Ход мысле правильный?

Изменено пользователем audio-meloman
Ссылка на комментарий
Поделиться на другие сайты

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

Разбирая вашу программу понял, что:

interrupt [EXT_INT0] void ext_int0_isr(void) // Распознает посылаемую последовательность сигналов, записывает ее в массив RC5_buffer [14] и отправляет эти данные в комп.

interrupt [TIM0_OVF] void timer0_ovf_isr(void) не понял что делает... понял лишь что это связано с внутренней функцией МК "таймер_0"

void main(void) главная функция:

- PORTA=0x00; DDRA=0x00; задает работу портов (входы/выходы) и присваивает им значения

- TCCR0=0x00; TCNT0=0x00; OCR0=0x00; задает работу таймера 0 (я еще с ним плохо разобрался). У ATtyny2313 их почему-то два :huh: TCCR0А, TCCR0В?

- TCCR1A=0x00; TCCR1B=0x00; тут вообще ничего не понимаю, еще не разобрался зачем А и В таймеры...

- ASSR=0x00; TCCR2=0x00; понимаю еще хуже предыдущего пункта :(

- GICR|=0x40; MCUCR=0x01; MCUCSR=0x00; GIFR=0x40; также как и предыдущий пункт...

- дальше включая #asm("sei") не понимаю.

На сколько я понял, вашу программу вполне можно использовать для устройства, которое я приводил в ссылке выше. Только нужно переопределить порты для ATtiny2313 и вместо отправки кода в РС сравнить его с заданным и выполнить соответствующую функцию.

Ссылка на комментарий
Поделиться на другие сайты

Задача декодирования бифазного кода сводится к оценке временных интервалов о оценке предыдущего состояния.

interrupt [EXT_INT0] void ext_int0_isr(void) // Распознает посылаемую последовательность сигналов, записывает ее в массив RC5_buffer [14] и отправляет эти данные в комп.

Эта функция (обработчик прерывания) вызывается каждый раз, при изменении логического состояния на входе INT0.

nterrupt [TIM0_OVF] void timer0_ovf_isr(void) не понял что делает... понял лишь что это связано с внутренней функцией МК "таймер_0"

Обработчик прерывания по переполнению таймера То. Возникает если не был остановлен таймер (т.е. кодовая посылка не была распознана до конца).

Останавливаем таймер

Обнуляем таймер

Обнулям счетчик бит

Очищаем буфер

Разрешаем прерывания по INT0

Сбрасываем флаг прерывания по INT0 (на всякий случай, если оно произошло...)

- TCCR0=0x00; TCNT0=0x00; OCR0=0x00; задает работу таймера 0...

Ага...

- TCCR1A=0x00; TCCR1B=0x00; тут вообще ничего не понимаю, еще не разобрался зачем А и В таймеры...

- ASSR=0x00; TCCR2=0x00; понимаю еще хуже предыдущего пункта

Просто инициализация таймеров 1 и 2. В данной программе они отключены и не работают нигде.

- GICR|=0x40; MCUCR=0x01; MCUCSR=0x00; GIFR=0x40; также как и предыдущий пункт...

Инициализация прерываний. Там же написано:

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Filing //Только не "Filing"  а "Any change"
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x01;
MCUCSR=0x00;
GIFR=0x40;

- дальше включая #asm("sei") не понимаю.

Глобальное разрешение прерываний. Далее крутится бесконечный цикл динамической индикации (у меня). Индикация, в отличие от цикла, необязательна - так для себя. В приведенном файле не описана, поскольку привязана к железу. Библиотека ind.h, фун-ии decbin(); и vivod(); нужны только для нее.

На сколько я понял, вашу программу вполне можно использовать для устройства...

Можно (прерывания по изменению уровня вроде поддерживает). В алгоритме я нарисовал примерно где...

Предвижу много вопросов по регистрам, таймерам, прерываниям и т.д. - хочу посоветовать хорошую книгу:

А. В. Евстифеев Микроконтроллеры AVR семейств Tiny и Mega фирмы «ATMEL» 2004 ...

RC5.rar

Изменено пользователем Goodefine

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Спасибо огромное!

С регистрами разобрался, с таймерами почти, с прерываниями - нет. Книжку сейчас поищу в нете.

Вот мне еще посоветовали в BASCOM-AVR научиться работать. Вроде как для RC5 даже библиотека есть встроенная. Скачал посмотрю и то и то. Главное добиться конечной цели! Лежать на диване и крутить ручку усилителя с пульта :D

Ссылка на комментарий
Поделиться на другие сайты

Вот мне еще посоветовали в BASCOM-AVR научиться работать. Вроде как для RC5 даже библиотека есть встроенная...

Не знаю... По мне так Си могуч... В одном Бейсик-компиляторе (не помню в каком - может даже в этом) алгоритм встроенной библиотеки RC5 не возвращает значение триггер-бита. Вместо этого значение кода устройства или команды (не помню точно) возвращается то истинным, то увеличенным на 0x40. Эти программные грабли конечно можно обойти, но...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Про RC5 давно известно

AVR410 : RC5 IR Remote Control Receiver

AVR415 : RC5 IR Remote Control Transmitter

http://www.atmel.com/dyn/resources/prod_do...nts/doc1473.pdf

http://www.gaw.ru/pdf/Atmel/app/avr/AVR415.pdf

Кодировку можно посмотреть железом из

http://swordgreenline.narod.ru/IgorRele.html

Оно самообучающееся.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Сделал я регулятор громкости, получилось научить его понимать команды RC5 (Большое СПАСИБО! Goodefine!) и маленького пульта-карточки от мультимедийных колонок

http://www.topdevice.ru/catalogue/zoom.jsp?id=209

в нем в отличии от филипсовского не используется манчестерский код.

Но вот решил не останавливаться на достигнутом и сделать управление всей моей системой с одного универсального пульта телевизора Филипс, но у него система команд, я так понимаю RC6... во вложении картинка с формой сигнала и измеренными (не очень точно) временами. Два сигнала изображенные на картинке это два последовательных нажатия на кнопку "0".

Код очень похож на манчестерский, но в начале он смешан с какими-то длинными временными сигналами не понятного назначения...

Попробовал поставить временную задержку в 4,5мс, а потом читать просто манчестерский код, как это делал Goodefine, но что-то не получилось... :(

Может дадите дельный совет как мне разобраться с этим кодом? Что-то мыслей у меня толковых нет :(

И что это за кодировка такая, это RC6 или еще что-то?

post-47701-1215369591_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Доброе время суток!

Скажу сразу что в МК я полный Ламер.

Решил я значи написать прогамму декодера RC5 для своего пкд вега, полазил по гуглю, нашол кучу инфи, но ни в одной из найденых програм не смог разобратся и было решино написать свою.

поседев пару деньков, в рультате я получил во ету прогу (прилож. документ), меня интересует будетли работать мой метод декодирования который заключается в том что востановление кода идет при помощи 2-х векторов прерывания. 1-ки записываем при внешнем прерывании, 0-ки при при совпадении таймера (по истечению 1,85мс после предыдущего прерывания) таймер запускается после первого внешнеге прерывания. Для выделения бит сисемы я использовал 8-ми розрядный регистр, при каждом прерывании я сдвигал 1-ку в лево, после вознекновения флага переноса запускается подпрограмма проверки системы, если принятые биты системы совпадают с заданными, то регистр счета принятых бит сисемы обнуляется и продолжаем прием бит, если принятая сисема не соответсвует заданной то включается задержка, после чего все обнуляется и идет возврат к основному цыклу. а от с подщетом общих принятых бит возникли проблемы (нужно для того чтобы знать когда проверять принятые биты комманды), по началу я хотел воспользоватся методом описаным выше, но при етом использовать одну из регистровых пар, но как с ими работать я так и не понял (как сделать сдвиг в лево содержимое 16-ти розрядной рег.пари и как туда записать число? к примеру 0х0004?)

скажите естьли хоть какойто шанс что ета прогамма заработает? написана она для тини2313, правда она до конца не дописано но основная часть есть.

заранее огромное спасибо!

RC5_decoder_for_CD_player_Vega_122c.txt

Изменено пользователем Vetal_krot

Нашедшего выход затоптывают первым

Ссылка на комментарий
Поделиться на другие сайты

Вот последняя версия моей прогаммы (проект в AVRStudio).

добавил сторожевой таймер который должен сбрасывать МК после 0,125мс если тот завис, но в симуляторе почемуто етот таймер ничего не сбрасывал, может я не правильно его инициализировал?

Хотелосьбы узнать мнение спецов, будетли работать данная программа в собраном железе?

decoder.rar

Нашедшего выход затоптывают первым

Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...

У кого есть код декодера RC5 для Тини2313 желательно под Code Vision AVR?! Поделитесь плиз. Вот под Мега8515 получилось, а под Тини 2313 не хочет.

to Goodefine если не сложно, обясни как твой код перестроить под Тини2313 и частоту 8мгц, от внутреннего RC генератора.

За ранние спасибо!

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

Ссылка на комментарий
Поделиться на другие сайты

Сделал я регулятор громкости, получилось научить его понимать команды RC5 (Большое СПАСИБО! Goodefine!) и маленького пульта-карточки от мультимедийных колонок

http://www.topdevice.ru/catalogue/zoom.jsp?id=209

в нем в отличии от филипсовского не используется манчестерский код.

Но вот решил не останавливаться на достигнутом и сделать управление всей моей системой с одного универсального пульта телевизора Филипс, но у него система команд, я так понимаю RC6... во вложении картинка с формой сигнала и измеренными (не очень точно) временами. Два сигнала изображенные на картинке это два последовательных нажатия на кнопку "0".

Код очень похож на манчестерский, но в начале он смешан с какими-то длинными временными сигналами не понятного назначения...

Попробовал поставить временную задержку в 4,5мс, а потом читать просто манчестерский код, как это делал Goodefine, но что-то не получилось... :(

Может дадите дельный совет как мне разобраться с этим кодом? Что-то мыслей у меня толковых нет :(

И что это за кодировка такая, это RC6 или еще что-то?

Как успехи с RC6? Вы случайно документации по этому протоколу не нашли? Картинка во вложении, это вы осцелографом меряли?

Ссылка на комментарий
Поделиться на другие сайты

to Goodefine если не сложно, обясни как твой код перестроить под Тини2313 и частоту 8мгц, от внутреннего RC генератора.

Перестроить несложно. Сейчас под рукой кода нет. Вечером покажу...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Что-то не работает, пишет какуето ерунду по RS232. После нажатия на кнопку на пульте приходит мусор и больше МК не реагирует. У меня Code Vision ругается на Data Stack Size, типа надо увеличить с 32 до 36. Из-за этого может неработать?

Изменено пользователем Krik99

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

Ссылка на комментарий
Поделиться на другие сайты

...У меня Code Vision ругается на Data Stack Size, типа надо увеличить с 32 до 36. Из-за этого может неработать?...

Естественно надо увеличить. Project->Configure->C Compiler->блок SRAM->Data Stack Size... Поставьте 64...

Посмотрите еще настройки порта - 9600 бод, 8 Data, 1 Stop, No Parity

Какова тактовая частота МК?

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

To Goodefine Огромное спасибо, после того как увеличил Data Stack Size до 64 всё заработало. ^_^

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Привет.  Хочу попробовать поработать с фоторезистом. Есть пару десятков ультрафиолетовых светодиодов, общей мощностью 4 вата. Хватит ли этой мощности для обработки платок размером 10 на 10 см или надо искать что-то дополнительно? 
    • Чтобы меньше было излучения, нужно мотать тороидальную. Возможно для повышения добротности по омическому сопротивлению лучше этот ТОР мотать в пару слоев. Если ее намотать на шило, то она вряд ли будет вообще работать как катушка.   Индуктивность прямо пропорциональна площади сечения, которая в свою очередь прямо пропорциональна квадрату диаметра. К тому же индуктивность в обратной пропорции с длиной намотки.
    • Я в ходе отладки выяснил, что сбоит в функции:  void w25qWritingByUSB(uint32_t dpagenum, uint8_t *bufByUSB) При чем поведение очень странное. Отладочные сообщения даже не выводятся в начале функции. В ходе экспериментов понял что связано это с объявлением массивов и решил объявить большие буферы которые на 4КБ и 0.25КБ: uint8_t current_sector_buf[4096]; uint8_t buf[256]; глобально. В оригинале, буферы объявлялись локально в функции. После изменения буквально двух строчек кода, все заработало. Также, в оригинальном проекте было сильно напутано из функциями. Я решил функции выкинуть из main.c и вставить в w25q.c Эти функции: void w25qEraseSector(uint16_t sector) void w25qWritingByUSB(uint32_t dpagenum, uint8_t *bufByUSB) Поиск данной проблемы реально отобрало кучу времени. На будущее буду знать что и такое бывает...
    • есть готовый  драйвер BTS7960 до 43А (долговременно до 10) с шим и все, что нужно и стоит недорого. И не надо изобретать  велосипед. Даже с учетом завышения параметров  уж 5А свободно.
    • А есть внятное описание этого M18? По моему он не очень "интегирируется" с микроконтроллером, да и нужно ли? По схеме выше - подключить его к U1C, выход U1C кинуть на +С12, U1D вообще выкинуть вместе с D1,D2 и R13.
    • Прежде чем сломя голову что-либо менять, следует задуматься о причинах выхода этого "чего-либо" из строя. В противном случае замененное отправится протоптанной тропой своих предшественников. Защитной лампой пользоваться умеете? Вот на нее и заменяйте для начала.
    • Это обрывные резисторы в роли предохранителей. Номинал на последнем фото похож на 470 Ом (желтый-фиолетовый-коричневый-золотой, если цвета правильно разглядел), но это многовато, вот 47 Ом - похоже на правду. Можно ставить в достаточно широком диапазоне, другое дело, что горят они не просто так. Скорее всего дальше где-то косяк. А мультиметром измеряли сопротивление? Что показывает?
×
×
  • Создать...