Среда, 14.11.2018, 06:27
| RSS
Главная | Радиомодуль - Страница 37 - Форум
Защита, контроль, управление
Форма входа
Логин:
Пароль:
[ Новые сообщения · Участники · Правила форума · Поиск · RSS · Чат ]
Модератор форума: Zoolu  
Форум » ФОРУМ » Домашняя автоматизация на Raspberry Pi » Радиомодуль
Радиомодуль


AlexAWДата: Понедельник, 09.04.2018, 10:22 | Сообщение # 361
Группа: Участники
Сообщений: 245
Статус: Offline
Разные кодировки получились скорее всего из за выбранного направления кода в посылке у меня записываются и передаются, считая от преамбулы   от младшего байта к старшему, старшим битом вперед. Правильно было бы наверно  младшим битом вперед. Но я  обнаружил это когда процедуру приема уже написал. Подумал, что кодировка носит абсолютно условный характер, главное что бы приемник и передатчик ее одинаково понимали.

Что касается приема датчиков протечки и окна.
Из опытов Дениса  (deniss1900) мы определили, что датчики протечки не пишутся из за посылки всего одного пакета, а в даттчике окна передается пачка из 5 кодовых посылок, но назвать их пакетом не совсем верно. Так как кодовые посылки не содержат преамбулу и период их следования не соответствует длительности посылки преамбулы, а составляет 100 мс.
Алгоритм приема моей прошивки считает за правильно принятый пакет, две одинаковых кодовых последовательности. Поэтому без передачи пачки кодовых посылок приема и распознания не получится. Что касается наличия преамбулы, по алгоритму получается, что МК ждет паузу размером больше чем максимальная длительность бита те 2мс. и если до паузы шла правильная модуляция и потом после паузы снова пошла модуляция он считает это наличием преамбулы и началом последовательности. Так что по сути на правильность длительности сигнала преамбулы проверни не проходит,  если пауза между посылками меньше 512 мс. алгоритм может понять это как пачку кодовых посылок и будет сравнивать одну с другой. После совпадения ждет окончания передачи т.е. паузы больше 512 мс или нарушения периода модуляции  (пришел шум).. Есть правда некоторое Но! При приеме от датчика окна в момент паузы в 100 мс. может приемник выйти из режима шумоподавления и тогда между посылками вставится импульсы помех. Эти импульсы воспринимаются алгоритмом как нарушение периода модуляции и соответственно конец приема посылки.
Еще датчик окна может не приняться радиомодулем если скорость передачи ниже 2 мс на бит.
Я для Дениса поправил прошивки обоих радиодатчиков.  Он прошивку  датчика протечки протестировал- принимается успешно.
Исходники с поправками отправил на почту. В них я вставил преамбулу с правильным периодом следования, и немного увеличил скорость до 1.8 мс. на бит. Думаю что эта версия прошивки будет одинаково хорошо ловиться и обеими версиями радиомодуля, и приемниками "китайского SC1527 PT2264" кода от других производителей.


Сообщение отредактировал AlexAW - Понедельник, 09.04.2018, 12:58
 
AdminДата: Понедельник, 09.04.2018, 18:53 | Сообщение # 362
Admin
Группа: Администраторы
Сообщений: 4001
Статус: Offline
Итак, закономерность отличия кодов проверил, как и говорил Александр, причина в записи старшим битом вперед. Сравним коды, записаные с одной и той же кнопки брелка:

АА АА 30 хх = 10101010 10101010 00110000 хх - мой код

xx 55 55 С0 = хх 01010101 01010101 11000000 - код Александра

Единственный момент, это байты хх. У меня этот байт идет последним и назывался "номером зоны" - по нему происходила дополнительная идентификация сработавшего датчика. В новой прошивке при считывании кода брелка он записался первым в последовательности и равен 0F. Похоже, здесь он вообще не используется?

И еще вопросы:
1. В какой ячейке расположен адрес контроллера? В последней (адрес 30)?
2. Для передатчика коды тоже нужно инвертировать?
3. EEPROM разбита на области для принимаемых и передаваемых кодов? Если да, то в каких пределах?
4. В прошивке применяется принцип формирования кодов "опорный код+N"

Александр, я понимаю, что ответы на все эти вопросы могу найти в исходнике, но лучше получить информацию из первоисточника  biggrin
 
AlexAWДата: Вторник, 10.04.2018, 05:23 | Сообщение # 363
Группа: Участники
Сообщений: 245
Статус: Offline
Что касается кода XX - четвертый байт, точнее младший полубайт радиомодуль использует для хранения кода частоты несущей см. таблицу пересчета кода в  период. Приемником этот код никак не используется, только при записи кода команды в память он записывается в младший полубайт четвертого байта. Далее он  используется для передатчика при передаче этой команды, он передается с той скоростью с которой он был когда то принят и записан с точностью 100 мкс. (это было сделано для "имитирования" всего зоопарка китайских радиоустройств в диапазоне периодов модуляции от 500 до 2000 мкс на бит) Старший полубайт четвертого байта в радиомодуле никак не используется, но через 485 сеть  в этот байт можно прописать все что нужно и использовать по своему усмотрению. Например можно определить 16 различных зон. в  которые можно включить любые из 31 записанных датчиков. Но  по моему если каждый датчик может иметь сой адрес, можно в системе обозначить более точно место и событие....
далее по пунктам
1 в последней ячейке EEPROM с адресом 7F
2 Код одинаковокак пишется так и читается (что увиде в режиме снифера то и прописал) или просто прописал в режиме программирования и все...
3 EEPROM разбита по 4 ячейки на один код, начиная с нулевого адреса. Коды при записи нумеруются от 1 до 31 включительно. Код 0 признак конца принятых кодов в буфере. Все записанные коды могут передаваться по команде модбас. притом можно с большой скоростью накидать в буфер передачи до 15 команд и они будут последовательно все передаваться пачками по 15 посылок каждая команда  потом разрыв и следующая пока все не передадутся.
4 опорный код  в прошивки не применяется. Мой алгоритм радиомодуля больше похож на "попугая" повторяет что научили помнить.
Ваще более подробно я прописал в файле редми и как всегда в табличках команд 485 протокола и таблице пересчета.


Сообщение отредактировал AlexAW - Вторник, 10.04.2018, 05:34
 
AdminДата: Вторник, 10.04.2018, 06:59 | Сообщение # 364
Admin
Группа: Администраторы
Сообщений: 4001
Статус: Offline
Цитата AlexAW ()
3 EEPROM разбита по 4 ячейки на один код, начиная с нулевого адреса. Коды при записи нумеруются от 1 до 31 включительно. Код 0 признак конца принятых кодов в буфере. Все записанные коды могут передаваться по команде модбас. притом можно с большой скоростью накидать в буфер передачи до 15 команд и они будут последовательно все передаваться пачками по 15 посылок каждая команда  потом разрыв и следующая пока все не передадутся.

Т.е. весь массив сохраненных в памяти адресов (31 адрес) доступен как для чтения (принимаемые коды), так и для передачи (передаваемые коды)?

Заметил один нюанс - после принятого кода, как и положено, зажигается соответствующий светодиод. Через некоторое время (строго периода нет, может и 30 секунд, а может и полчаса) он выключается. Я так предполагаю, происходит сброс МК, возможно по WDT. К сожалению, при старте МК нет тестового мигания индикаторов, что бы точно понять, что пошла перезагрузка.
 


AlexAWДата: Вторник, 10.04.2018, 11:34 | Сообщение # 365
Группа: Участники
Сообщений: 245
Статус: Offline
Цитата
Т.е. весь массив сохраненных в памяти адресов (31 адрес) доступен
Да все что модулем запомнено им же может быть и передано, я таким образом записал в память команды пультов своих люстр и теперь через модбас могу люстрами управлять.
Цитата Admin ()
Заметил один нюанс
Радиомодуль отображает светодиодами номер последней принятой и известной ему команды. А если он принял команду но ее не нашел он соответственно не знает какой номер отобразить. (так что думаю, что радиомодуль где то соседа подслушал))))

В прошивку добавлено управление еще одним светодиодом на 13 выводе МК  этот светодиод отображает прием пакета, включая его проверку на валидность.  По этому светодиоду удобно отслеживать принял команду радиомодуль или нет (не важно есть она в памяти или нет) кроме того что вспыхнет светодиод в снифере отобразится код этой команды и период модуляции. период отображаемый в старшем байте слова  соответствует средне измеренному периоду деленному на  8 в микросекундах

 На фото скриншот приема команды и работы снифера.
В первом окне код принятой команды, во втором старший полубайт значение периода модуляции деленое на 8 в младшем первый байт кода команды, в третьем окне второй и третий байт кода команды.
Прикрепления: 8850329.png(78.4 Kb)


Сообщение отредактировал AlexAW - Вторник, 10.04.2018, 18:20
 
AdminДата: Вторник, 10.04.2018, 14:29 | Сообщение # 366
Admin
Группа: Администраторы
Сообщений: 4001
Статус: Offline
Цитата AlexAW ()
Да все что модулем запомнено им же может быть и передано, я таким образом записал в память команды пультов своих люстр и теперь через модбас могу люстрами управлять.

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

Цитата AlexAW ()
Что касается кода XX - четвертый байт, точнее младший полубайт радиомодуль использует для хранения кода частоты несущей см. таблицу пересчета кода в  период.

А почему четвертый? У меня он пишется в первую порядковую ячейку - xx 55 55 С0
 
AlexAWДата: Вторник, 10.04.2018, 18:12 | Сообщение # 367
Группа: Участники
Сообщений: 245
Статус: Offline
Цитата Admin ()
А почему четвертый? У меня он пишется в первую порядковую ячейку - xx 55 55 С0
Да верно! первым идет байт с кодом частоты модуляции потом три байта кода команды. я уже начинаю забывать чего там нагородил. )))
Еще про старший полубайт - в него во время записи кода команды  через процедуру программирования записывается 0 потом можно в этот полубайт записать свое значение либо программатором, либо путем команд модбас -считывания и записи ячеек EEPROM. 
В файле README вроде про это тоже написано...
 
AdminДата: Среда, 11.04.2018, 07:32 | Сообщение # 368
Admin
Группа: Администраторы
Сообщений: 4001
Статус: Offline
Цитата AlexAW ()
В файле README вроде про это тоже написано...

Александр, извини, проглядел я, что в архиве есть файл подсказки sad
 
AdminДата: Среда, 02.05.2018, 08:44 | Сообщение # 369
Admin
Группа: Администраторы
Сообщений: 4001
Статус: Offline
По возможности занимаюсь разработкой интерфейса для радиоконтроллера Александра. Получается, что в форме нужно разместить 31 кнопку управления и 31 контроль состояния (принятый код). Думаю, состояния выводить постоянно, а управление спрятать под спойлер. Также планируется добавить переключение сетевого адреса, что бы работать с разными радиомодулями с одной формы (аналогично как для релейного модуля)
Может, будут еще предложения?
 
AlexAWДата: Среда, 02.05.2018, 11:38 | Сообщение # 370
Группа: Участники
Сообщений: 245
Статус: Offline
Цитата Admin ()
Может, будут еще предложения?
А имеет ли смысл делать все 31 кнопки, и индикаторы. Ведь част кодов может быть использована только для приема например команд с датчиков, а часть кодов, только для передачи, (например управление радиореле) или перехвата люстры.
Может определить несколько кнопок несколько индикаторов и несколько кнопок с индикаторами, только с возможностью привязки определенного номера команды к соответствующей кнопке (индикатору) а за одно  можно было бы и действие прикрутить к получаемым командам, а передаваемые команды , как действие применить и на других страницах -
например температура достигла определенного уровня выбираем действие передать команду привязанную к радио кнопке 1
Или при получении радиосигнала с датчика протечки подать команду на включение реле ХХ,
Или при получении команды от датчика протечки о снижении питания послать СМС сообщение №1
ну итд итп


Сообщение отредактировал AlexAW - Среда, 02.05.2018, 11:39
 
Форум » ФОРУМ » Домашняя автоматизация на Raspberry Pi » Радиомодуль
Поиск:



T2M © 2018
Сайт управляется системой uCoz