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

КАК реализовать пульт ду ?

Задача состоит в том что бы сделать пульт. Интересует исключительно принимающая сторона. Контроллер используется x51, фотоприёиник TSOP1736, кодирование в RC-5, но это не важно, важно понять сам способ передачи! Ознакомился со статьёй Леонид Иванович Ридико "Применение кода RC-5" Да только вот не очень то она мне помогла! Сам принцип передачи вроде бы понял, но вот как тактировать? Как узнать в какой момент началась передача?

Вобщем рад буду любой информации. Но хотелось бы увидеть блок-схему алгоритма работы данной системы!

Поделиться сообщением


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

В свое время я начинал использовать RC5 с помощью демонстрационной программы, что в приложении. Используются специфические для архитектуры ATMega устройства (таймер, контроллер прерываний). Разобраться поможет.

Поделиться сообщением


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

Интересует исключительно принимающая сторона.

А это как понимать, если проектируется ПУЛЬТ?

Поделиться сообщением


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

Genadi Zawidowski

Это на с++ что ли?

 

DpInRock

Пульт будкт использоваться готовый. Да и вобщем вопросов не вызывает, SAA3010, что тут ещё придумаешь...

Под словом пульт имеется ввиду процес приёмо-передатчи в ик диапазоне.

 

Писать буду на ассемблере.

Поделиться сообщением


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

Тогда нет такой у вас задачи - "сделать пульт".

 

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

Тогда что имеется ввиду под этими словами?

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

И кого тактировать?

Поделиться сообщением


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

Genadi Zawidowski

Это на с++ что ли?

 

Если бы Вы заглянули в файл, то заметили бы, что там C++ и не пахнет.

 

Писать буду на ассемблере.

 

Ясно, сроки решения задачи не стоят.

Сопровождение проекта так же исчезает в тумане.

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

Поделиться сообщением


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

DpInRock

Верно, проектируется не пульт а как раз таки противоположная, принимающая сторона. Под словом пульт я подразумевал систему передачи по ик, причём к передатчику (т.е. к пульту) вопросов нет.(Вы правильно заметили, я приёмник назвал пультом)

 

DpInRock

В файл конкчно заглянул, только мало чего понял. Занимаюсь програмированием месяц, поэтому ни чему не удивляйтесь. Кроме как про ассемблер, ничего не слышал, на ассемблер вроде не похож, слышал что есть ещё си++, паскаль и бейсик, предположил, видимо ошибочно, что это си. Вопрос о сроках не стоит.

 

Это статья про которую я говорил:

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

 

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

Правильно ли я понимаю что передача начинается с 2-х стартовых битов, далее следует упралящий бит, затем 5 бит адреса и 6 бит команды. После этого через промежуток времени равный 63 тактам посылки, посылка повторяется. Если кнопка на пульте продолжает быть нажата то управляющий бит инвертируется. ???

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

Поделиться сообщением


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

У Ридико описано все, кроме модуляции. Отсюда и недопонимание.

Вот описание протокола RC5 http://infrared.h1.ru/protocol.shtml

И вот описание http://fi-com.ru/mcu/rc5.htm

 

Общая идея такая, поскольку инфракрасный светодиод пульта выдает пачки посылок. В каждой пачке 32 периода тактовой 36КГц, затем пауза длиной в 32 периода, потом опять пачка, затем пауза. Вот когда идет пачка импульсов это у Ридико на рис.3 верхний уровень сигнала, а когда пауза, это нижний уровень. И лог."1" на осциллографе будет выглядеть как пауза длиной в 32 такта, а затем 32 импульса.

 

Для построения ответной части или "базы", алгоритм такой. Сначала приемник просто ловит перепады уровня. Если перепадов больше 8 подряд, и расстояние укладывается в 36кГц (при помощи таймера измерять расстояние между перепадами, для 36кГц оно будет 27мкс а для измерений использовать вилку от 24 до 32мкс.)

Если прошло на входе подряд 8 перепадов и расстояние между ними от 24..32мкс, то база делает вывод что пришла пачка от пульта ДУ.

Ждем окончания пачки, попутно считаем число перепадов, если их от 29 до 33 значит это пачка от пульта ДУ "верхний" уровень. Если пачка не прошла, отбрасываем ее и опять ждем валидную пачку. Дождались нормально пачки, записываем в память 1, затем ждем окончание паузы. Если пауза укладывается в размер протокола, примерно 900мкс, записываем в память 0 и продолжаем принимать, до тех пор, пока не попадется либо сбойная пачка, либо очень длинная пауза.

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

В памяти записана последовательность 10011010100101 где нули это нижний уровень, а единицы верхний уровень по рисунку 3 Ридико. По этому же рисунку переход 01 это лог.1,

а переход 10, это лог 0, и тогда последовательность означает "0"1"0"0"0"1"1" это уже биты посылки, которые означают адрес, код команды.

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

Поделиться сообщением


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

Для построения ответной части или "базы", алгоритм такой. Сначала приемник просто ловит перепады уровня. Если перепадов больше 8 подряд, и расстояние укладывается в 36кГц (при помощи таймера измерять расстояние между перепадами, для 36кГц оно будет 27мкс а для измерений использовать вилку от 24 до 32мкс.)
Перепадов не будет - у автора применен приемник со встроенным декодером на 36KHz. Так что на выходе будут сразу импульсы огибающей, заполнения в 36KHz не будет. Все остальное соотвествует истине :rolleyes:

Поделиться сообщением


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

Занимаюсь програмированием месяц

1. Научиться пользоваться осциллографом.

2. Начать с моргания светодиодом.

 

С выхода приемника идет демодулированный сигнал передатчика.

Вам остается только замерять, например, длительности высокого уровня и низкого.

Если высокий уровень держиться достаточно долго (например 100 мс), то принимать решение о завершении передачи.

О начале передачи свилдетельствует перепад в иное состояние чем обычно выхода приемника.

 

В итоге у вас после завершения передачи появится массив длительностей в неких ваших собственных единицах. Далее - прост декодируем все это и превращаем в команду. А МОЖЕМ и не декодировать. Для каждой команды такая последователдьность будет уникальной.

 

Можете просто отметить разницу между командами и таким образом принимать решение.

 

Но это все требует умения обращаться с осциллографом и понимания, как моргать светодтодом и принимать нажатие кнопки. Без этого - вообще нет смысла разговаривать.

Поделиться сообщением


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

Заводите выход Tsop на внешнее прерывание. При появлении внешнего прерыванию (по фронту) запускаете таймер t0/t1/t2 на время расстояния м/у импульсами и запрещаете внешнее прерывание. По прерыванию таймера считываете состояние порта int (данные идут в манчестере - удобно принять на удвоенной частоте и проверить правильность логики посылки), формируете принимаемые данные в слово (к примеру сдвигая через перенос в акк), одновременно отсчитывая время до окончания посылки. Окончанием приема можно считать завершение времени длительности всей посылки. Далее запрещаете прерывание таймера, разрешаете внешнее прерывание и взводите флаг готовности принятых данных к анализу. Анализируете принятые данные на соответствие манчестеру (можно искл или по соседним разрядам и тп) и декодируете код команды, выполняя требуемое действие в основной программе. А в это время по прерываниям идет прием второй посылки и тп. Вроде два раза такое делал - работало без проблемм.

 

Кратко теория по RC-5 http://www.sbprojects.com/knowledge/ir/rc5.htm

Поделиться сообщением


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

Задача состоит в том что бы сделать пульт. Интересует исключительно принимающая сторона.

Вобщем рад буду любой информации. Но хотелось бы увидеть блок-схему алгоритма работы данной системы!

 

Наверное, будет не лишним почитать статью Тимофея Носова "Программируемый приемник ИК-системы ДУ".

По сути - готовый проект.

Поделиться сообщением


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

На Атмеле в аппноутах по линку

 

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

 

лежит описание RC-5 ресивера, правда на AVR. Примеры процедур

приема кодовых посылок - на Ассемблере. Все с комментариями.

Работает прекрасно. Если Вам это поможет -

буду только рад!

Поделиться сообщением


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

×
×
  • Создать...