Страница 1 из 1
Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Пн мар 11, 2013 12:41:48
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
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Пн мар 11, 2013 16:42:41
pyzhman
Пока удерживается кнопка, третий бит не меняет своего состояния, посылки бьют постоянно. При следующем нажатии кнопки этот бит отсылается инвертированным. Т.е. по состоянию этого бита можно определить отпускалась кнопка или нет. А длительность нажатия - никоим образом.
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Пн мар 11, 2013 17:57:26
akulov
pyzhman писал(а): Т.е. по состоянию этого бита можно определить отпускалась кнопка или нет.
Это я знаю, а как практически его применить?
А длительность нажатия - никоим образом.
Это я не так выразился. Как програмно отследить этот бит?
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Пн мар 11, 2013 18:23:46
Goodefine
Заведите переменную счетчик и при приеме новой команды сравнивайте бит триггера с предыдущим его состояния (еще одна переменная будет, хранящая пред. состояние), если не изменился (удержание) инкрементируйте. Если изменился сбрасывайте в ноль. По величине счетчика можно определить время удержания, поскольку посылки следуют примерно через одинаковые промежутки времени.
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Пн мар 11, 2013 23:06:59
Batanik
Делал так: сохранял принятую команду и toggle bit, при принятии новой посылки сравнивал их, если совпали - выполняем действие удержания кнопки, если не совпали - действие нового нажатия. При ошибке приёма сбрасывал сохранённое значение.
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Пн мар 11, 2013 23:20:22
akulov
Ребята, а пример кода можно? Хотя бы за что-то зацепиться. Только познаю азы программирования.
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Ср мар 13, 2013 18:19:51
Batanik
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Ср мар 13, 2013 18:31:37
Леонид Иванович
Приведу свой пример декодера RC-5:
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Ср мар 13, 2013 21:55:07
Gosha_006
Леонид Иванович писал(а):Приведу свой пример декодера RC-5:
А можно это в Ассемблер перевести?, пож.
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Ср мар 13, 2013 22:50:46
Batanik
Мой код на Asm..
Задействованы прерывания INT0 и Переполнения таймера 0. Остальное относится к функционалу проекта
http://radiokot.ru/forum/viewtopic.php? ... 0#p1609060, вырезать уж очень муторно.
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Чт мар 14, 2013 14:25:27
akulov
Леонид Иванович писал(а):Приведу свой пример декодера RC-5:
Интересный код. Но, чтобы мне его применить, есть несколько вопросов:
- какой тип МК применен?
- какая тактовая частота ЦПУ?
- где Вы вызываете функции
char RC5_GetSys(void) и
char RC5_GetCom(void), в цикле
while(1)?
Просто, если я выполняю команду в этом цикле, то очень быстрая реакция на нажатие кнопок. Как сделать, чтобы реакция кнопок была помедленнее?
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Сб мар 16, 2013 15:53:18
Леонид Иванович
Gosha_006 писал(а):А можно это в Ассемблер перевести?, пож.
Когда-то писал это и на ассемблере, но за давностью лет потерялось.
akulov писал(а):- какой тип МК применен?
На разных AVR использовал этот модуль, например, ATmega8, ATtiny2313. Лишь бы был таймер 0 и INT0, а это есть почти у всех AVR.
akulov писал(а):- какая тактовая частота ЦПУ?
Задается константой F_CLK.
akulov писал(а):- где Вы вызываете функции
Это к декодеру не относится. В зависимости от структуры приложения вызываю по-разному. Присоединил архив с полным описанием проекта тестера RC-5.
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Сб мар 16, 2013 16:25:38
shads
Спасибо за проектик.....
Заодно поучимся красиво работы оформлять (правильная разметка Си, комменты, и т.д.).....
О-о.... у вас 2000-е сообщение.....
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Сб мар 16, 2013 22:36:20
akulov
С протоколом разобрался, испробовал различные варианты обработки команд. Всем большое спасибо за помощь!
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Вт дек 17, 2013 23:54:07
hfelyx
Всем привет!Подскажите,пожалуйста,как лучше организовать запись/чтение и сравнение в eeprom принятого кода rc-5.То есть организовать программирование определенных кнопок пульта???
Спасибо.
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Ср дек 18, 2013 08:43:58
pyzhman
Очевидно, объявить переменные в ЕЕПРОМ и записывать/считывать/сравнивать с ними то, что приняли.
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Чт дек 19, 2013 16:55:36
hfelyx
Собрал схемку отсюда(заработала после плясок с :
//Временные пределы
#define Tmin 40 //длинный промежуток
#define Tmax 68
#define TminK 12 //короткий промежуток
#define TmaxK 38)
То есть на дисплее отображаються цыфры ,но что они означают - не понял(много повторений и на одной кнопке несколько разных кодов)
Но суть не этом.Хочу научить ATtyny2313 запомнить принятый код и в дальнейшем ,если снова приходит этот код ,включать отключать нагрузку...
Для начала хочу понять сколько бит нужно запомнить,чтоб не было ложных срабатываний от других пультов или кнопок???
Я Новичек в этом деле поэтому не пинайте строго.
Спасибо.
Re: Нужна помощь по протоколу RС5 в CVAVR
Добавлено: Чт дек 19, 2013 18:17:11
pyzhman
Согласно протоколу.