Стандартная версия RFM69HW полностью несовместима с RFM22/23B по ножкам. Совместимая версия RFM69HCW – может быть установлена вместо RFM22/23B-S1/S2 со следующими изменениями:
Вывод NIRQ (прерывание 22-й) попадает на ножку Reset 69 й. Эту цепь нужно разорвать подать на RESET соответствующий сигнал.
На выход прерывания подключить ножку DIO0 (GPIO0 по нумерации RFM22).
Программирование
Назначение и состав регистров полностью несовместимы. Детали функционирования также отличаются очень сильно. Ниже рассмотрены особенности применительно к протоколу LRS Expert.
Частота полностью задается регистрами 7-9 (3 байта). Понятий базы и канала прыжка здесь нет. Самая главная константа Fstep - вес бита в этих регистрах равна 61.03515625 Гц и отбрасывать дробную часть не рекомендуется. Частота приема/передачи F=Fstep*R7R8R9.
Девиация задается регистрами 5-6 и равна Fstep*R5R6. Для экспертовского протокола это будет 17500 Гц или константа 0x11f.
Бодовая скорость задается регистрами R3,R4 и равна 32000000/R3R4. При включенном манчестере она удваивается, поэтому исходные 7400 превращаются в 14800 бод или константу 0x0872.
Режим работы выбираем GFSK c BT=0.5, поэтому R2=0x02.
Так как манчестер 69-й отличается от манчестера 22/23, тем что охватывает только payload и CRC (а не весь пакет), мы ставим количество байт преамбулы 4 (R0x2C=0, R0x2d=3), и количество синхрослов =4 (R0x2E=98).
Синхрослова 0x2d и 0xd4 от RFM2x, превращаются на приемной стороне в 4 слова: 0x59, 0xa6, 0xa6, 0x65, коие мы и грузим в регистры 0x2f - 0x32.
Полосу пропускания выбираем в 32 кГц, константой 0x44 в регистр 0x19. Если планируется использовать AFC, для этого режима полоса определяется регистром 0x1A. Как правило она немного уже, например 20 кГц = 0x54.
AFC использовать не рекомендуется – этот механизм работает очень странно и нестабильно (возможно я не разобрался, но и другие пока тоже). Вместо него используем FEI (замер погрешности частоты, без автоподстройки), запуская его по прерыванию от приема последнего синхрослова. Для этого начальное значение регистра 0х1E будет 2, а после приема синхрослова 0х22. Значение поправки FEI вычитываем по прерыванию от приема пакета из регистров 0x21,0x22. Поправку усредняем и добавляем к общей частоте в регистрах 7-9.
AGC используем автоматическое, записав 0x00 в регистр 0х18. Старший бит этого регистра также выбирает 50 Ом на антенном входе.
Режим пакета задаем в регистре 0х37 значением 0х28. Это манчестер, без байта длинны, адреса и без CRC. К сожалению CRC RFM69 оказалось несовместимой с RFM22/23. Видимо при одинаковом полиноме X16+X12+X5+1 они используют разные начальные значения, поэтому CRC придется проверять программно. FRM23 начинает с 0.
Важный регистр 0x29 – это порог чувствительности. RFM69 не начнет ничего принимать, пока уровень сигнал не превысит это значение. Вес бита в регистре 0х29, как в регистрах RSSI равен 0.5 дБ (как и у RFM22). Но значение дается наоборот, 0 – это минимальная чувствительность, 255 – максимальная. Я заношу в этот регистр константу 222, что немного ниже реально достижимой чувствительности.
Прерывания настраиваются через регистр 0х25. Если мы выбираем DIO0 в качестве линии прерывания, то для Rx режима туда нужно положить сначала 0х80 (прерывание по приему преамбулы и последнего синхрослова), а затем 0x40 (прерывание по payload), а для передачи 00 (packet sent).
Режим работы переключается регистром 1. Помните, что перед изменением частоты, нужно перевести модуль в режим Standby.
Данные кладутся и вычитываются из FIFO через регистр 0. Сброс FIFO через регистр 0x28.
Простейший алгоритм подсчета CRC16:
unsigned short CaleCRC16(const unsigned char *DataBlock, unsigned DataBlockLen )
{
unsigned short crc = 0x0000;
С такой платкой я дела не имел. Надо смотреть даташит…
Есть там ножки, которые Вы оставили в воздухе? Типа SDN (его надо на землю)?
Можете еще спростиь в rcopen.com/forum/f90/topic302333, там вроде ктото игрался с подобным…
даташит один к одному с модулем rfm22b
sdn на землю припаян
не припаяны остались gpio0 gpio1 gpio2
даташит один к одному с модулем rfm22b
sdn на землю припаян
не припаяны остались gpio0 gpio1 gpio2
Ваш модуль называется DRF4432F20www.electrodragon.com/w/images/…/DRF4432F20.pdf.
Цоколевка отличается от RFM22/23. Набор ножек похож, но переключение антенны похоже уже привязано к GPIO 0/1.
Других отличий не вижу. Должна работать. Проверьте монтаж еще раз.
Какую прошивку использовали? Если мою, посмотрите, что пишет через UART…
Ваш модуль называется DRF4432F20www.electrodragon.com/w/images/…/DRF4432F20.pdf.
Цоколевка отличается от RFM22/23. Набор ножек похож, но переключение антенны похоже уже привязано к GPIO 0/1.
Других отличий не вижу. Должна работать. Проверьте монтаж еще раз.
Какую прошивку использовали? Если мою, посмотрите, что пишет через UART…
шил openlrsng через gui , режиме анализатора спектора ничего не кажет
думаю еще мегу другую впаять попробовать она у меня почемуто через isp не читается
Я с таким игрался. У меня всё работало. Правда, это был модем, а не передатчик р/у - но основа у них одинаковая (OpenLRS)
Что скажете по поводу использования rfm69 для тактирования микроконтроллера? Рег.0х26 после сброса отключает выход генератора, если я правильно понял. Как же тогда без него стартовать МК? Еще один баг разработчиков?
Что скажете по поводу использования rfm69 для тактирования микроконтроллера? Рег.0х26 после сброса отключает выход генератора, если я правильно понял. Как же тогда без него стартовать МК? Еще один баг разработчиков?
По даташиту после ресета там 5, то есть FXOSC / 32.
Вы проверяли, как на самом деле?
А насчет тактирования - я предпочитаю максимальную независимость контроллера от модуля, что-бы всегда можно было диагностировать последний.
Померил, действительно есть 1 Мгц
Я с таким игрался. У меня всё работало. Правда, это был модем, а не передатчик р/у - но основа у них одинаковая (OpenLRS)
так и у меня работало в самодельном приемнике, а вот впаянное в готовый приемник вместо rfm22 не заработало
Померил, действительно есть 1 Мгц
Ясно. Спасибо.
так и у меня работало в самодельном приемнике, а вот впаянное в готовый приемник вместо rfm22 не заработало
Ищите ошибку в монтаже.
Как вариант - грузите мою прошивку OpenLRS и смотрите, что она пишет через UART.
Вы починили загрузку программ?
Не забывайте, что на Оранджевых приемниках неправильно выставленны фьзы порога притания в Меге и прошивка или настройки могут слетать…
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"48f982623df955007777670c":{"_id":"48f982623df955007777670c","hid":39565,"name":"baychi","nick":"baychi","avatar_id":null,"css":""},"497ec4283df9550077772a70":{"_id":"497ec4283df9550077772a70","hid":43414,"name":"gorbln","nick":"gorbln","avatar_id":null,"css":""},"49e190b03df955007776f61f":{"_id":"49e190b03df955007776f61f","hid":46729,"name":"Карабас","nick":"Карабас","avatar_id":null,"css":""},"5144bc7d3df9550077738bc6":{"_id":"5144bc7d3df9550077738bc6","hid":142658,"name":"P_L_Z","nick":"P_L_Z","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"52e6268c997073007710e5bb","hid":18257,"title":"Отличия RFM69 от RFM22/23B","html":"<p>Отличия RFM69 от RFM22/23B</p>\n<ol>\n<li>Аппаратура</li>\n</ol>\n<p>Стандартная версия RFM69HW полностью несовместима с RFM22/23B по ножкам. Совместимая версия RFM69HCW – может быть установлена вместо RFM22/23B-S1/S2 со следующими изменениями:<br>\nВывод NIRQ (прерывание 22-й) попадает на ножку Reset 69 й. Эту цепь нужно разорвать подать на RESET соответствующий сигнал.<br>\nНа выход прерывания подключить ножку DIO0 (GPIO0 по нумерации RFM22).</p>\n<ol start=\"2\">\n<li>Программирование</li>\n</ol>\n<!--cut-->\n<p>Назначение и состав регистров полностью несовместимы. Детали функционирования также отличаются очень сильно. Ниже рассмотрены особенности применительно к протоколу LRS Expert.</p>\n<ol>\n<li>Частота полностью задается регистрами 7-9 (3 байта). Понятий базы и канала прыжка здесь нет. Самая главная константа Fstep - вес бита в этих регистрах равна 61.03515625 Гц и отбрасывать дробную часть не рекомендуется. Частота приема/передачи F=Fstep*R7R8R9.</li>\n<li>Девиация задается регистрами 5-6 и равна Fstep*R5R6. Для экспертовского протокола это будет 17500 Гц или константа 0x11f.</li>\n<li>Бодовая скорость задается регистрами R3,R4 и равна 32000000/R3R4. При включенном манчестере она удваивается, поэтому исходные 7400 превращаются в 14800 бод или константу 0x0872.</li>\n<li>Режим работы выбираем GFSK c BT=0.5, поэтому R2=0x02.</li>\n<li>Так как манчестер 69-й отличается от манчестера 22/23, тем что охватывает только payload и CRC (а не весь пакет), мы ставим количество байт преамбулы 4 (R0x2C=0, R0x2d=3), и количество синхрослов =4 (R0x2E=98).</li>\n<li>Синхрослова 0x2d и 0xd4 от RFM2x, превращаются на приемной стороне в 4 слова: 0x59, 0xa6, 0xa6, 0x65, коие мы и грузим в регистры 0x2f - 0x32.</li>\n<li>Полосу пропускания выбираем в 32 кГц, константой 0x44 в регистр 0x19. Если планируется использовать AFC, для этого режима полоса определяется регистром 0x1A. Как правило она немного уже, например 20 кГц = 0x54.</li>\n<li>AFC использовать не рекомендуется – этот механизм работает очень странно и нестабильно (возможно я не разобрался, но и другие пока тоже). Вместо него используем FEI (замер погрешности частоты, без автоподстройки), запуская его по прерыванию от приема последнего синхрослова. Для этого начальное значение регистра 0х1E будет 2, а после приема синхрослова 0х22. Значение поправки FEI вычитываем по прерыванию от приема пакета из регистров 0x21,0x22. Поправку усредняем и добавляем к общей частоте в регистрах 7-9.</li>\n<li>AGC используем автоматическое, записав 0x00 в регистр 0х18. Старший бит этого регистра также выбирает 50 Ом на антенном входе.</li>\n<li>Режим пакета задаем в регистре 0х37 значением 0х28. Это манчестер, без байта длинны, адреса и без CRC. К сожалению CRC RFM69 оказалось несовместимой с RFM22/23. Видимо при одинаковом полиноме X16+X12+X5+1 они используют разные начальные значения, поэтому CRC придется проверять программно. FRM23 начинает с 0.</li>\n<li>Размер пакета выбираем 18 байт: 16 байт протокола плюс байта CRC.</li>\n<li>Важный регистр 0x29 – это порог чувствительности. RFM69 не начнет ничего принимать, пока уровень сигнал не превысит это значение. Вес бита в регистре 0х29, как в регистрах RSSI равен 0.5 дБ (как и у RFM22). Но значение дается наоборот, 0 – это минимальная чувствительность, 255 – максимальная. Я заношу в этот регистр константу 222, что немного ниже реально достижимой чувствительности.</li>\n<li>Прерывания настраиваются через регистр 0х25. Если мы выбираем DIO0 в качестве линии прерывания, то для Rx режима туда нужно положить сначала 0х80 (прерывание по приему преамбулы и последнего синхрослова), а затем 0x40 (прерывание по payload), а для передачи 00 (packet sent).</li>\n<li>Режим работы переключается регистром 1. Помните, что перед изменением частоты, нужно перевести модуль в режим Standby.</li>\n<li>Данные кладутся и вычитываются из FIFO через регистр 0. Сброс FIFO через регистр 0x28.</li>\n</ol>\n<p>Простейший алгоритм подсчета CRC16:<br>\nunsigned short CaleCRC16(const unsigned char *DataBlock, unsigned DataBlockLen )<br>\n{<br>\nunsigned short crc = 0x0000;</p>\n<p>while(DataBlockLen–) {<br>\ncrc ^= *DataBlock++ << 8;<br>\nfor (unsigned char i = 0; i < 8; i++)<br>\ncrc = crc & 0x8000 ? ( crc << 1 ) ^ 0x1021 : crc << 1;<br>\n}<br>\nreturn crc;<br>\n};</p>\n","user":"48f982623df955007777670c","ts":"2014-01-27T09:27:40.000Z","st":1,"cache":{"comment_count":14,"last_comment":"52e8b5ac997073007713a08d","last_comment_hid":14,"last_ts":"2014-01-29T08:02:52.000Z","last_user":"48f982623df955007777670c"},"views":7910,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}