OrangeRx Open LRS 433MHz TX Module

baychi
Mark_Kharkov:

Вы как-то дизассэмблируете код?

Да, любым дизассемблером для Atmeg.

gorbln

@baychi, Expert
Господа знающие! Подскажите, пожалуйста, каким образом делается Hopping? То есть, не принципиально (прибавлением номераканала*шаг к основной несущей) - а в общем алгоритме? Как приёмник и передатчик синхронизируют свои переключения частот? Я так понимаю, сетка прыжков заливается в них ещё при программировании. Допустим, передатчик передаёт пакеты по очереди на каждом канале. Если приёмник не синхронно будет прыгать по каналам - он ничего не словит… Или приёмник ждёт пакета на 0 канале (на несущей), и после прихода первого начинает прыгать дальше? Как тогда рассинхрон по времени убрать? Иначе ведь может ошибка накопиться, или можно пакет не с начала начать ловить, а с середины?

baychi
gorbln:

Допустим, передатчик передаёт пакеты по очереди на каждом канале. Если приёмник не синхронно будет прыгать по каналам - он ничего не словит…

Вот именно поэтому он переключает частоты синхронно. Ему ведь тоже известна последовательность прыжков.

gorbln:

Или приёмник ждёт пакета на 0 канале (на несущей), и после прихода первого начинает прыгать дальше? Как тогда рассинхрон по времени убрать? Иначе ведь может ошибка накопиться, или можно пакет не с начала начать ловить, а с середины?

Перед началом связи приемник переключает каналы медленно, примерно 1 раз за цикл из 8 каналов. Как только первый пакет пойман, начинается синхронное переключение каналов. Даже если часть пакетов теряется, синхронизацию можно удерживать десятки секунд и даже минуты - ведь расхождение частот кварцев не превышает десятков PPM, а с учетом подстройки чатоты - оно еще меньше.
Но обычно через несколько секунд после потери связи, приемник вновь переводят в медленный режим поиска пакетов.

gorbln
baychi:

Даже если часть пакетов теряется, синхронизацию можно удерживать десятки секунд и даже минуты - ведь расхождение частот кварцев не превышает десятков PPM

То есть, прыжки делаются не по факту выполнения передачи пакета, а по времени? Ну, тогда с синхрой вроде бы проще. Хотя всё равно не совсем понятен механизм. По логике, передатчик должен иметь довольно широкий кадр, в середине которого находится собственно пакет. Чтобы приёмник успел переключиться и словить пакет не с середины, а с начала?
Хочу впилить hopping в проект OpenBee, а то он там заявлен, но походу не сделан.

baychi
gorbln:

По логике, передатчик должен иметь довольно широкий кадр, в середине которого находится собственно пакет.

Данных 16 байт (у LRS Expert). Всего 22 байта. Приемник сначала ловит преамбулу (2 байта), затем проверяет синхрослова (еще 2) и уже потом начинает принимать данные. В конце идет CRC16, так что целостность пакета известна. Даже если приемник случайно словит середину кадра, CRC не сойдется и пакет будет отброшен. Так как поток данных не сплошной - между пакетами есть паузы, рано или поздно прием состоится.

Mark_Kharkov
gorbln:

Господа знающие! Подскажите, пожалуйста, каким образом делается Hopping? То есть, не принципиально (прибавлением номераканала*шаг к основной несущей) - а в общем алгоритме? Как приёмник и передатчик синхронизируют свои переключения частот? Я так понимаю, сетка прыжков заливается в них ещё при программировании. Допустим, передатчик передаёт пакеты по очереди на каждом канале. Если приёмник не синхронно будет прыгать по каналам - он ничего не словит… Или приёмник ждёт пакета на 0 канале (на несущей), и после прихода первого начинает прыгать дальше? Как тогда рассинхрон по времени убрать? Иначе ведь может ошибка накопиться, или можно пакет не с начала начать ловить, а с середины?

Отвечу по прошивке KHA, т.к. с ней разбирался:

  1. базовая частота и номера каналов прыжков заливаются в приемник при бинде. Если изменить настройки каналов передатчика, а потом снова забиндить - то все будет ловить.
  2. Само собой, что если не синхронно - то ничего не словит. Но приемник будет ждать на одной из частот, пока не прийдет пакет. Пришел - и дальше по очереди.
  3. Пакет не с начала, а с середины приемник принять в принципе не может, сам радиомодуль RFM22B так работает, что сначала он ищет преамбулу (серию 0101…0101), потом синхрослово (специальные несколько байт) и только после этого уже идут данные, в конце - контрольная сумма. Если или в преамбуле помеха, или в синхрослове - за пакет это не будет воспринято, и прием данных НЕ начнется. Если прием данных произошел, но контрольная сумма не совпадет (для этого достаточно что бы 1н бит был “не такой”) - пакет будет воспринят как неверный и он также не повлиляет ни на что.
    Так работает сам чип, вне зависимости от прошивки, хоть от Александра, хоть Эксперта, хоть KHA и т.д. У него есть и другие режимы работы (Direct Mode), но железо приемника сабжевой железки его не поддерживает, только передатчик.
Shuricus
Mark_Kharkov:

Но приемник будет ждать на одной из частот,

На какой из?

Mark_Kharkov
baychi:

Приемник сначала ловит преамбулу (2 байта),

Александр, а у Эксперта 2 байта??? Ппц… Дык тогда понятно, почему нету AFC… Она просто не заработает с преамбулой 2 байта… Гляньте даташит, раздел по AFC. Без антенна диверсити и с AFC преамбула (на сколько я помню) должна быть минимум 28 бит (или что-то такое, но явно не 2 байта). Сейчас даташита нет под рукой, я с медленного инета. Проверьте. На сколько я помню - то так.

baychi:

Даже если приемник случайно словит середину кадра, CRC не сойдется и пакет будет отброшен.

Шанс что в давнных окажется хотя бы 16 бит 0101…0101, а потом сразу нужное синхрослово - мизерный. Практически нулевой. А без этого чип выставит неверную преамбулу, и перейдет в режим поиска преамбулы, в соотв с его алгоритмом работы. Я бы сказал, что шанс этого чуть-чуть больше шанса встретить на улице динозавра 😃))

baychi
Mark_Kharkov:

Ппц… Дык тогда понятно, почему нету AFC… Она просто не заработает с преамбулой 2 байта… Гляньте даташит, раздел по AFC

Ошибаетесь, AFC достаточно 2 байт.

"When selecting the preamble length, the length needs to be long enough to settle the AFC. In general two bytes of preamble is sufficient to settle the AFC. "

Mark_Kharkov:

Без антенна диверсити и с AFC преамбула (на сколько я помню) должна быть минимум 28 бит (или что-то такое, но явно не 2 байта).

Наоборот. Это для диверсити требуется более длинная преамбула. Почему Эксперт и не хочет вводить диверсити.

Mark_Kharkov:

Шанс что в давнных окажется хотя бы 16 бит 0101…0101, а потом сразу нужное синхрослово - мизерный.

В пакете могут встретися любые комбинации данных, в том числе и вышеуказанные. Само по сбе это не редкость. Другое дело, что одновременное сочетание фиктивной преамбулы, синхрослова и случайное совпадения CRC16 - практичести невозможно. Хотя теория передачи информации рассматривает и такой случай. Например в телемеханике есть требования к вероятности приема ложного пакета, как своего, и они лежат на уровне 10^-9 … 10^-12, а это круче, чем 2^32. 😃

Expert
baychi:

Почему Эксперт и не хочет вводить диверсити.

А кто вас сделал мои личным пресс атташе?
Никакого отношения дивесити к преамбуле не имеет вААпще.
Может хватит уже этот бред нести?

baychi
Expert:

Никакого отношения дивесити к преамбуле не имеет вААпще.

"When antenna diversity is enabled, it is

advised to use a 20 bit preamble detection threshold. When the receiver is synchronously enabled just before the
start of the packet, then a shorter preamble detection threshold might be chosen (e.g., 8 bit).
The required preamble length is determined from the sum of the receiver settling time and the preamble detection

threshold. "

Expert:

Может хватит уже этот бред нести?

Тогда будем разбирать баги в Вашем протоколе. 😃 Наример Ваша дополнительная CRC8 для контроля пакета не защищает байт старших бит канальных импульсов и управляющий байт. Почему?

Expert

и чё? ну я же не по этому дивесити не делаю - что я байт один поправить не в силах.

baychi
Expert:

что я байт один поправить не в силах.

Это требует изменения протокола, то есть ведет к неполной совместимости.
И про удилнение преамбулы Вы сами неоднократно писали. Хотите процитирую? 😃

Expert
baychi:

Почему?

“Почему?” ну плохо сдираете! раз такие вопросы задаёте.

baychi:

Это требует изменения протокола

протокол за час меняется+ еще пол часа портировать на тини и оранж

baychi

Добавил статисткику в проект Open Tiny RX.
Пишу по циклу до 35 записей в EEPROM с интервалом 1 минута (можно меньше). Писать во FLASH так просто не выйдет, нужно свой загрузчик лепить, да и запрет прерываний на 10 мс трудно увязвть с общей работой. Поэтому пока EEPROM, ИМХО полчаса для эксприментов с антеннами вполне достаточно.

Для вывода статистики нужно войти в меню и вместо номера регистра ввести s.
Формат вывода (лучше сразу писать в файл) такой:

Last statisics: 902
FN cnt FSn InFS Drops:1 2 3 4 5 6 7 8 RSSI:1 2 3 4 5 6 7 8 Noise:1 2 3 4 5 6 7 8
2 1 0 0 100 99 99 99 99 99 99 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 2 0 0 0 0 0 0 1 0 0 1 121 122 121 122 119 121 121 119 27 29 28 32 30 28 28 29
2 3 0 0 0 1 0 0 0 0 0 0 120 118 118 118 118 118 118 116 29 29 29 33 30 28 28 29
2 4 0 0 0 0 0 0 0 0 0 0 119 116 118 115 115 115 116 115 28 29 29 32 29 29 28 30
2 5 0 0 0 0 0 0 0 0 0 0 120 117 118 116 115 115 116 114 28 29 29 33 30 29 28 30
2 6 1 1 71 71 70 70 70 71 70 70 119 115 119 116 116 113 116 113 27 29 29 33 29 28 28 30
2 7 0 1 18 18 18 18 18 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 8 0 1 18 18 18 18 18 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 9 0 1 18 18 18 18 18 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 10 0 1 18 18 18 18 18 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 11 0 1 18 18 18 18 18 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 12 0 0 10 10 11 11 11 11 10 11 125 121 122 120 121 119 121 118 28 29 28 33 29 28 28 29
2 13 1 1 58 58 57 57 57 58 57 57 126 123 125 122 124 120 124 119 27 29 28 32 29 28 28 29
2 14 0 1 22 22 23 23 23 23 23 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 15 0 1 18 18 18 18 18 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 16 0 1 18 18 18 18 18 18 18 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 1 0 0 6 5 5 5 5 5 5 5 119 119 119 119 120 117 119 117 25 26 25 29 26 25 25 27
3 2 0 0 0 0 0 1 0 0 0 0 118 116 118 114 117 114 117 113 25 26 25 28 25 25 25 26
3 3 0 0 0 0 0 1 0 0 0 1 132 131 131 130 131 129 131 129 25 26 26 29 26 26 25 26

Номер полета (1-99), номер записи полета (1-35), кол-во FS за минуту, флаг нахождения в FS при формированиии записи. Затем 8 счетчиков потерь по каналам прыжков. Затем 8 средних уровней RSSI и 8 средних уровней шумов.

Команда ‘se’ позволяет очистить статистику в EEPROM (рекомендуется сделать разок).

Прошивку с исходниками (версия 3) положил сюда: files.mail.ru/41FEDA32FCDD4B26AA268214645FF1FD

Mark_Kharkov
Expert:

Никакого отношения дивесити к преамбуле не имеет вААпще.

Да неужели? В даташите другое написано…

baychi
Expert:

раз такие вопросы задаёте.

Это я просто подкалываю. 😃 Уверен, что правды от Вас все равно не услышу. Как всегда… 😦

Mark_Kharkov
baychi:

Ошибаетесь, AFC достаточно 2 байт.

Да вроде как нет…
Даташит, страница 47 (chapter 6.7. Preamble Length, таблица 14):

(G)FSK AFC Enabled
Approximate Receiver Settling Time: 2 byte
Recommended Preamble Length with 8-Bit Detection Threshold: 28 bits
Recommended Preamble Length with 20-Bit Detection Threshold: 40 bits

Итого, если у Эксперта преамбула детектится по 1му байту, то рекомендуется 28 бит длинна. Если по 2,5 байтам, то рекомендуется 5 байт длинна. 2 байта преамбула это минимальная возможная длинна, если преамбула будет детектироваться по 1 нибблу (4 битам). С antenna diversity преамбула еще более длинной должна быть.
Что у Эксперта пишется в регистр 0х35h? Какое значение?

baychi
Mark_Kharkov:

Что у Эксперта пишется в регистр 0х35h? Какое значение?

0x22.
AFC работает нормально, это видно по выдаваемой статистике.

PS: Я Вам тоже даташит цитировал, только минимальное значение преамбулы, а не рекомендуемое.

Mark_Kharkov
baychi:

0x22. AFC работает нормально, это видно по выдаваемой статистике. PS: Я Вам тоже даташит цитировал, только минимальное значение преамбулы, а не рекомендуемое.

2ва байта детектирование преамбулы… И при этом еще работает… Гмм… Передатчик точно 2ва байта преамбулу шлет, не больше? Не должно так оно работать, исходя из описания в самом даташите. После детектирования преамбулы чип переключается в более точный по jitter режим, и начинает настраиваться на синхронизацию с передатчиком. Это так называемое receiver settling time. Происходит это после того, как преамбула детектирована, т.е. если передатчик шлет только 2 байта преамбулы, и приемник детектирует 2 байта, то ему не остается время подстроиться, не говоря уже про AFC.
Что в передатчике у Эксперта по длинне преамбулы?

baychi

Вы забываете, что там Манчестер.

Mark_Kharkov:

Что в передатчике у Эксперта по длинне преамбулы?

То-же 0x22 в 35 и 4 в 34о-м.