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

приветствую всех. извиняюсь за долгое отсутствие не было инета. Свой вариант приема постораюсь опубликовать на следующей недели.

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


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

Это запись одной команды с пульта управления ТВ. Кто может сказать где какой бит? Вроде должен быть RC5, но по моему что-то здесь не так...

 

http://rem-blog.net/tmp/rc5.gif

 

Если все еще интересно то это код 011000010000

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


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

Если все еще интересно то это код 011000010000

 

Возможно. Т.е. короткий импульс = 0, длинный = 1. Просто и не хуже Манчестера.

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


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

 

Если все еще интересно то это код 011000010000

 

Возможно. Т.е. короткий импульс = 0, длинный = 1. Просто и не хуже Манчестера.

ну во первых не возможно, а так оно и есть если у Вас таки SONY

1T отрицательный импульс = 0

2T отрицательный импульс = 1

3T отрицательный импульс = стартовый бит (насчет точно 3T не могу сейчас сказать точно)

T=550мкс кажись

повтор при нажатой кнопке кажеться через 20-30 мс

 

Ну или опишите поподробнее в чем конкретно Ваша задача и тогда можно

будет рассчитывать на более точный ответ

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


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

 

Если все еще интересно то это код 011000010000

 

Возможно. Т.е. короткий импульс = 0, длинный = 1. Просто и не хуже Манчестера.

 

Для передачи 2-х байт на прямой видимости по IR, возможно и проще. А для передачи 120 байт по RF не покатит однозначно.

 

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

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


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

Для передачи 2-х байт на прямой видимости по IR, возможно и проще. А для передачи 120 байт по RF не покатит однозначно.

 

Можно узнать почему?

Я нашел один пульт, который передает точно RC5. Для экпериментов сойдет. Все же цель у меня перадать не меньше 32 байт по радио каналу (433 Mhz).

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

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


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

Для передачи 2-х байт на прямой видимости по IR, возможно и проще. А для передачи 120 байт по RF не покатит однозначно.

Можно узнать почему?

Я нашел один пульт, который передает точно RC5. Для экпериментов сойдет. Все же цель у меня перадать не меньше 32 байт по радио каналу (433 Mhz).

Потому что уровень помех в RF (особенно 433 Mhz) очень высокий.

Передать то 32 байта вы сможете без проблем, а вот с получением этих 32-х байт придется

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

c точностью примерно 0,2%. Ну или (что вероятно проще в данном случае, учитывая

длинну передачи ) некий адаптивный контроль длительности каждого бита с

например 10% точностью.

 

ЗЫ. Подключите модуль приемника и посмотрите на осциле что у него творится на выходе.

Многое сразу же станет понятно.

 

ЗЫЫ. RC5 вполне подходит для передачи по RF.

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


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

Для передачи 2-х байт на прямой видимости по IR, возможно и проще. А для передачи 120 байт по RF не покатит однозначно.

Можно узнать почему?

Я нашел один пульт, который передает точно RC5. Для экпериментов сойдет. Все же цель у меня перадать не меньше 32 байт по радио каналу (433 Mhz).

Потому что уровень помех в RF (особенно 433 Mhz) очень высокий.

Передать то 32 байта вы сможете без проблем, а вот с получением этих 32-х байт придется

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

c точностью примерно 0,2%. Ну или (что вероятно проще в данном случае, учитывая

длинну передачи ) некий адаптивный контроль длительности каждого бита с

например 10% точностью.

 

ЗЫ. Подключите модуль приемника и посмотрите на осциле что у него творится на выходе.

Многое сразу же станет понятно.

 

ЗЫЫ. RC5 вполне подходит для передачи по RF.

При передаче по радиоканалу возникают такие специфические импульсные помехи, как врезки(иголки) и вырезки, которые возникают вследствие работы ару/ограничителей. Борьба с ними достаточно проста, до определенного предела, разумеется. Ставите на выходе радиоканала счетчик на 16-32-64...с залипанием на макс/мин, сигнал подаете на D-вход, на счетный вход подаете меандр с периодом в 16-32-64 больше периода сигнала, выход используете, как обычно. Схема хорошо подавляет именно импульсные помехи меньшие половины периода сигнала. При желании счетчик можно легко реализовать программно.

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


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

Давно, года 4 назад, покупал для клиентов пульт ДУ ИК+RF433 и приемник к нему. в приемнике 433 превращалось в ИК и подавалось на светодиод. Пульт был многосистемный программируемый. Покупалось все это в www.conrad.spb.ru, на сайте я сейчас этого пульта не нашел, но он был в бумажном каталоге на немецком языке.

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


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

Передать то 32 байта вы сможете без проблем, а вот с получением этих 32-х байт придется

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

c точностью примерно 0,2%. Ну или (что вероятно проще в данном случае, учитывая

длинну передачи ) некий адаптивный контроль длительности каждого бита с

например 10% точностью.

 

ЗЫ. Подключите модуль приемника и посмотрите на осциле что у него творится на выходе.

Многое сразу же станет понятно.

 

ЗЫЫ. RC5 вполне подходит для передачи по RF.

 

Я попробовал так:

 

имеем внешнее прерывание по любому изменению

в прерывании смотрим чего насчитал таймер...

и обнуляем счетчик таймера для след изменеия по входу ExtINT

(получается типа ICP только захват счетчика таймера по любому изменению уровня)

Определяем минимальную длит импульса =Tmin.

;----

далее, с каждым прерыванием по Ext INT, смотрим что натикало (пусть будет T)и сверяемся с таблицой истинности:

1) T=2Tmin & __--- => bit=1

2) T=2Tmin & --__ => bit=0

3) T=Tmin & --__ & lastbit=1 => skip

4) T=Tmin & --__ & lastbit=0 => bit=0

5) T=Tmin & __-- & lastbit=0 => skip

6) T=Tmin & __-- & lastbit=1 => bit=1

;----

 

В Proteus все работает без проблем. Но реально неработает. Кстати, впервые неработает то, что работает в Proteus. :)

Сделал чтобы можно было видеть длительность импульсов в LCD. Оказалось, что насчитывает бред какой то. В чем причина пока не понял. :(

Что творится на выходе модуля приемника я смотрел. Когда передатчик ничего не передает - ужас. :biggrin: Но когда передает - все очень четко.

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


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

Я попробовал так:

 

имеем внешнее прерывание по любому изменению

в прерывании смотрим чего насчитал таймер...

Пока ловим стартовый бит настраиваем внешнее прерывание только на переход 0->1

 

запускаем таймер с прерыванием на время 3/8 длинны стартового бита

если раньше произошло новое внешнее прерывание то сбрасываем таймер и

продолжаем считать

 

если оказались в прерывании таймера,

перестраиваем внешнее прерывание на ловлю любого перехода,

перестраиваем прерывание таймера на 1/4 длительности бита (не выключая таймер)

 

при первом переходе 1->0 после срабатывания прерывания таймера запоминаем значение

длительности стартовой единички T=3/8(базовой длинны бита)+TCNT

сбрасываем TCNT

перестраиваем таймер на 5/8T

 

далее просто ловим переходы, при каждом переходе считываем значение TCNT

сравниваем с 3/8 необходимой длительности бита

если TCNT < 3/8 , ошибка, начинаем все с начала

если оказались в прерывании таймера то проверяем на соответствие RC5 (четный нечетный бит)

если ошибка начинаем все с начала

если все в порядке перестраиваем таймер на 1/2 бита

если все в порядке, сбрасываем TCNT и продолжаем ловить новые битики

 

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

 

P.S. Может чего и накосячил но вроде примерно так

ЗЫЫ 3/8 и 5/8 желательно брать не точные значения а что-то типа 3/8+20тактов ЦП и

5/8- 20 тактов

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


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

Все же не могу разобраться почему в Proteus работает а реально нет.

 

Упрощенный код:

 

interrupt [TIM1_CAPT] void timer1_capt_isr(void)

{

tmp=ICR1;

 

if (CAPTURE_FRONT) {

TCCR1B = 0b10000101; //switch to falling edge

CAPTURE_FRONT = 0;

} //if

 

else {

TCCR1B = 0b11000101; //switch to rising edge

CAPTURE_FRONT = 1;

} // else

 

При каждом прерываний смотрю чему равно tmp. Proteus показывает, что увеличиваеться на ~1800 (самый короткий импульс в RC5). Посмотрел что насчитывает реально. Оказываеться, что увеличиваеться только на 7. Тактовая частота 8 MHz.

В чем может быть дело?

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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