Зарегистрирован: Чт мар 21, 2013 16:22:09 Сообщений: 27
Рейтинг сообщения:0
Почти разобрался с вашим алгоритмом, передача и прием уже получаются. Вопрос в следующем, void TransmitByte (char byte) когда сюда попадает код команды, например 3, в переменной byte она будет выглядеть 00000011 так, или 11 так? и незначащие нули передаются тоже? И если по идее это байт, то я могу могу в 1 устройстве закодировать 256 приемников и 256 команд?
А на счет незначащих нулей и представления числа внутри функции?
В функцию передается байт (т.е. 8 бит), эти 8 бит все по очереди передаются, не важно какие именно это биты. На счет представления числа внутри функции - не понял вопроса.....
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Зарегистрирован: Чт мар 21, 2013 16:22:09 Сообщений: 27
Рейтинг сообщения:0
Представление числа... Ну вот в функцию мы передадим к примеру 4, (от балды пишу) peredacha(4), внутри функции идет обработка уже побитово, т.е. на приемник мы передаем 00000100. Вот я и спрашивал в функцию записываем число в десятичной системе, а внутри мы работаем с ним уже как с двоичным, передаем от старших разрядов, т.е. сначала, в данном примере, я передам длинный сигнал возбуждения, потом 0 потом еще 4 раза 0 потом 1 и 2 раза 0. В принципе из прошлого ответа я уже все понял. А вообще спасибо, вы мне очень и очень помогли и косвенно не только в этом вопросе.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Зарегистрирован: Сб мар 29, 2014 18:04:50 Сообщений: 27
Рейтинг сообщения:0
Приходит "1" или "0" вместо здорового числа (4 байта - адрес, инв адрес, команда, инв. команда), то есть "1" или "0" мы не получим (адрес - 1, команда - 1; получим - 00000001 11111110 00000001 11111110 - то есть далеко не 1)
Приходит "1" или "0" вместо здорового числа (4 байта - адрес, инв адрес, команда, инв. команда), то есть "1" или "0" мы не получим (адрес - 1, команда - 1; получим - 00000001 11111110 00000001 11111110 - то есть далеко не 1)
Зарегистрирован: Сб мар 29, 2014 18:04:50 Сообщений: 27
Рейтинг сообщения:0
Уважаемый(ая) shads, сейчас попытаюсь объяснить
1) На сколько я понял в NEC`e "1" от "0" отличает временной интервал, поэтому в обработчике внешнего прерывания засекаем время (больше 2 мс - значит "1", меньше "0") 2) Записываем в переменную "_data" 2a) Сдвигаем всё на знак влево, если это не 32 знак (8*4) 3) Выводим все 32 бита по UART
Цитата:
Приходит "1" или "0" вместо здорового числа (4 байта - адрес, инв адрес, команда, инв. команда; то есть "1" или "0" мы не получим в любом случае. Пример: адрес - 0х01, команда - 0х01; получим - 00000001 11111110 00000001 11111110 = 33423870, а это есть далеко не 1)
Это я к тому, что из-за инверсии адреса и команды мы не можем получить "1" или "0"
Это я к тому, что из-за инверсии адреса и команды мы не можем получить "1" или "0"
Дело в том, что инверсные значения данных и адреса, необходимы только для контроля достоверности принятых данных... После проверки их нужно отбросить... Когда нам нужен адрес, просто из 4-х принятых байт достаем первый... это и будет принятый адрес... (0-255) Когда нам нужна команда, просто из 4-х принятых байт достаем третий... это и будет принятая команда... (0-255) Т.е. все 32 принятых бита никто в итоге как одно целое не рассматривает.....
Если нужно получить общее значение адреса и команды в диапазоне 0-65535, то наверное как то так...
Код:
uint32_t InputData; //принятые 32 бита IR данных uint16_t OutData; //конвертируем в 16 бит
OutData = (uint16_t)(InputData >> 8UL) & 0x00ff; //скопировали значение данных OutData |= (uint16_t)(InputData >> 16UL) & 0xff00; //добавили значение адреса
Теперь в OutData будет 16 битное значение (с возможностью передачи значения в диапазоне 0 - 65535) Правда.. я не проверял... может чего то и криво написано...
В не зависимости от кнопки или пулта приходит или 0х0000 или 0х0001.
Ну наконец то по русски объяснили .....
А почему бы вам не заюзать мой вариант, который тут обсуждался?... ..
Нашел попроще код http://geektimes.ru/post/255542/ но чего то не фурычит. Пытаюсь высветить на индикаторе что пришло, тишина. Может кто подскажет в чем дело..
Ну вот, домучил, обработку IR NEC, вот что получилось: Спойлер
Код:
//*************************************************************************************************************************** //БИБЛИОТЕКА ОБРАБОТКИ СИГНАЛА ИК ПУЛЬТА ДИСТАНЦИОННОГО УПРАВЛЕНИЯ СТАНДАРТА NEC //
Пока что для одной частоты (8000000) и константы заданы жестко. Потом надо будет докумекать автоматический рассчет для разных частот.
Не работает, блин, однако. У кого получилось?
Вложения:
Комментарий к файлу: Делал на Атмеге168Р, соответственно указал нужное для INT1 и частоту 8МГц IR_nec.txt [7.04 KiB]
Скачиваний: 356
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения