Нужна помощь по протоколу RС5 в CVAVR

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
akulov
Открыл глаза
Сообщения: 42
Зарегистрирован: Пн июн 06, 2011 13:18:00

Нужна помощь по протоколу RС5 в CVAVR

Сообщение akulov »

Пытаюсь освоить протокол RC5. Пересмотрел кучу примеров на форумах, все они до записи кода в буфер. А в исходниках к программам так и не смог выделить чисто протокол управления, для меня это слишком сложно. Так и не понял, как отличить одиночное нажатие кнопки пульта от длительного удержания?
Знаю, что за это отвечает 3-й бит (toggle), но как его практически применить? Код:

Код: Выделить всё

startbit1 = RC5_buffer [0]; //первый стартовый бит 
startbit2 = RC5_buffer [1]; //второй стартовый бит
toggle = RC5_buffer [2];         //триггер-бит
                                         //формируем переменные адреса и команды
device = (RC5_buffer [3] << 4)|(RC5_buffer [4] << 3)|(RC5_buffer [5] << 2)|.......;      //формируем адрес ПДУ                   
command = (RC5_buffer [8] << 5)|(RC5_buffer [9] << 4)|.................; //формируем команду
                         
if(command==16) {Dump++;LCD();}
if(command==17) {Dump--;LCD();}
                                 
rc5_cl_buf();    //очищаем буфферGIFR=0x40;               // сбрасываем флаг прерывания по входу INT0
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение pyzhman »

Пока удерживается кнопка, третий бит не меняет своего состояния, посылки бьют постоянно. При следующем нажатии кнопки этот бит отсылается инвертированным. Т.е. по состоянию этого бита можно определить отпускалась кнопка или нет. А длительность нажатия - никоим образом.
Docendo discimus
akulov
Открыл глаза
Сообщения: 42
Зарегистрирован: Пн июн 06, 2011 13:18:00

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение akulov »

pyzhman писал(а): Т.е. по состоянию этого бита можно определить отпускалась кнопка или нет.
Это я знаю, а как практически его применить?
А длительность нажатия - никоим образом.
Это я не так выразился. Как програмно отследить этот бит?
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение Goodefine »

Заведите переменную счетчик и при приеме новой команды сравнивайте бит триггера с предыдущим его состояния (еще одна переменная будет, хранящая пред. состояние), если не изменился (удержание) инкрементируйте. Если изменился сбрасывайте в ноль. По величине счетчика можно определить время удержания, поскольку посылки следуют примерно через одинаковые промежутки времени.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
Batanik
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вс авг 31, 2008 19:02:43
Откуда: Нижний Тагил

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение Batanik »

Делал так: сохранял принятую команду и toggle bit, при принятии новой посылки сравнивал их, если совпали - выполняем действие удержания кнопки, если не совпали - действие нового нажатия. При ошибке приёма сбрасывал сохранённое значение.
akulov
Открыл глаза
Сообщения: 42
Зарегистрирован: Пн июн 06, 2011 13:18:00

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение akulov »

Ребята, а пример кода можно? Хотя бы за что-то зацепиться. Только познаю азы программирования.
Аватара пользователя
Batanik
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вс авг 31, 2008 19:02:43
Откуда: Нижний Тагил

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение Batanik »

Сам делал на примере отсюда - http://radiokot.ru/articles/16/
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение Леонид Иванович »

Приведу свой пример декодера RC-5:
Вложения
RC5.c
(6.78 КБ) 420 скачиваний
Gosha_006
Родился
Сообщения: 8
Зарегистрирован: Чт окт 25, 2012 12:58:39

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение Gosha_006 »

Леонид Иванович писал(а):Приведу свой пример декодера RC-5:

А можно это в Ассемблер перевести?, пож.
Аватара пользователя
Batanik
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вс авг 31, 2008 19:02:43
Откуда: Нижний Тагил

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение Batanik »

Мой код на Asm..

Задействованы прерывания INT0 и Переполнения таймера 0. Остальное относится к функционалу проекта viewtopic.php?p=1609060#p1609060, вырезать уж очень муторно.
Вложения
avr_lamp.asm
(20.09 КБ) 399 скачиваний
akulov
Открыл глаза
Сообщения: 42
Зарегистрирован: Пн июн 06, 2011 13:18:00

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение akulov »

Леонид Иванович писал(а):Приведу свой пример декодера RC-5:
Интересный код. Но, чтобы мне его применить, есть несколько вопросов:
- какой тип МК применен?
- какая тактовая частота ЦПУ?
- где Вы вызываете функции char RC5_GetSys(void) и char RC5_GetCom(void), в цикле while(1)?
Просто, если я выполняю команду в этом цикле, то очень быстрая реакция на нажатие кнопок. Как сделать, чтобы реакция кнопок была помедленнее?
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение Леонид Иванович »

Gosha_006 писал(а):А можно это в Ассемблер перевести?, пож.


Когда-то писал это и на ассемблере, но за давностью лет потерялось.

akulov писал(а):- какой тип МК применен?


На разных AVR использовал этот модуль, например, ATmega8, ATtiny2313. Лишь бы был таймер 0 и INT0, а это есть почти у всех AVR.

akulov писал(а):- какая тактовая частота ЦПУ?


Задается константой F_CLK.

akulov писал(а):- где Вы вызываете функции


Это к декодеру не относится. В зависимости от структуры приложения вызываю по-разному. Присоединил архив с полным описанием проекта тестера RC-5.
Вложения
Files.zip
(264.63 КБ) 270 скачиваний
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение shads »

Спасибо за проектик.....
Заодно поучимся красиво работы оформлять (правильная разметка Си, комменты, и т.д.).....

О-о.... у вас 2000-е сообщение.....
akulov
Открыл глаза
Сообщения: 42
Зарегистрирован: Пн июн 06, 2011 13:18:00

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение akulov »

С протоколом разобрался, испробовал различные варианты обработки команд. Всем большое спасибо за помощь!
hfelyx
Встал на лапы
Сообщения: 102
Зарегистрирован: Вт дек 28, 2010 18:25:31

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение hfelyx »

Всем привет!Подскажите,пожалуйста,как лучше организовать запись/чтение и сравнение в eeprom принятого кода rc-5.То есть организовать программирование определенных кнопок пульта???
Спасибо.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение pyzhman »

Очевидно, объявить переменные в ЕЕПРОМ и записывать/считывать/сравнивать с ними то, что приняли.
Docendo discimus
hfelyx
Встал на лапы
Сообщения: 102
Зарегистрирован: Вт дек 28, 2010 18:25:31

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение hfelyx »

Собрал схемку отсюда(заработала после плясок с :
//Временные пределы
#define Tmin 40 //длинный промежуток
#define Tmax 68
#define TminK 12 //короткий промежуток
#define TmaxK 38)
То есть на дисплее отображаються цыфры ,но что они означают - не понял(много повторений и на одной кнопке несколько разных кодов)
Но суть не этом.Хочу научить ATtyny2313 запомнить принятый код и в дальнейшем ,если снова приходит этот код ,включать отключать нагрузку...
Для начала хочу понять сколько бит нужно запомнить,чтоб не было ложных срабатываний от других пультов или кнопок???
Я Новичек в этом деле поэтому не пинайте строго.
Спасибо.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Нужна помощь по протоколу RС5 в CVAVR

Сообщение pyzhman »

Согласно протоколу.
Docendo discimus
Ответить

Вернуться в «Периферия»