| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Алгоритм захвата команд ДУ https://radiokot.ru/forum/viewtopic.php?f=2&t=95736 |
Страница 1 из 1 |
| Автор: | Artos [ Вс окт 20, 2013 17:16:15 ] |
| Заголовок сообщения: | Алгоритм захвата команд ДУ |
Добрый вечер уважаемые! Есть у меня один метод захвата кодовых посылок ДУ, можно сказать классический. Но он не оптимальный если используется для универсального декодера. Работает он на основе замера длительности импульса и длительности паузы. Замеряется тремя фиксированными интервалами как длительности так и паузы, в итоге для хранения команды , отведено 24 байта. Недавно пришла в голову мысль попробовать алгоритм дискретных отсчетов : _-_-_-_ | | | | | Вертикальные линии - это чтение состояния вывода. Как думаете, стоит попробовать такой метод? С ув. Артем |
|
| Автор: | Alter Ego [ Вс окт 20, 2013 19:28:10 ] |
| Заголовок сообщения: | Re: Алгоритм захвата команд ДУ |
Зачем? Вполне достаточно измерять итервал между фронтами. Если результат укладывается в определенный диапазон - значит, принят "0", в другой диапазон - принята "1", не укладывается - принята помеха, переходим к ожиданию стартового импульса. |
|
| Автор: | Artos [ Пн окт 21, 2013 00:05:15 ] |
| Заголовок сообщения: | Re: Алгоритм захвата команд ДУ |
Я нашел идеальный метод кодирования/декодирования команд. Уже пишу для будущего "мини-умного дома" Девайсина будет обучаться любым радио брелкам , которые совпадают по несущей частоте. Метод основан на подсчете длительности каждого импульса , длительность которых в виде байтового числа сохраняется в ОЗУ , после я пакую в еепром 24с08. Метод очень прожорливый , 1 команда занимает 100байт памяти. Но зато такой метод, теоретически , работает с любым пультом Код: void decode_ir_data() { tim_system_rc=0x04; if(start) // если установлен старт бит - начинаем измерять импульсы { data_ir[a] = timer_ir; a++; timer_ir=0; // обнуляем счетчик if(a>99) { start=0; // сбрасываем старт бит a=0; // сбрасываем счетчик данных массива tim_system_rc=0; // сбрасываем системный таймер tim_stop=1; } } if(start==0) // старт бит установлен? нет! { start=0x01; // да! timer_ir=0; } timer_vol=0; } void timer_stop() { start=0; tim_system_rc=0; tim_stop=1; timer_vol=1; a=0; } код выполняется в обработчике прерывания ИНТ Код: for(d=0; d<100; d++) { if (data_ir_eep0[d] > 2) { if (((data_ir_eep0[d]+2) > data_ir[d]) && ((data_ir_eep0[d]-2) < data_ir[d])) // команда Вкл.Откл. питание {} else cmd_ok=0; } timer_led_shou=0; data_ir[d]=0; // стираем буффер } Проверка принятой команды |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


