Перейти к содержанию
    

Уже почти год мучаю эти модули. Задача сводилась к тому, чтобы гарантированно передать пакет на другой модуль. Дело в том, что я обратил внимание на не 100% приеме-передачу. В чем дело разобрался - во время передачи на приемной стороне прерывания по nIRQ не возникали вообще - т.е. не проходила 0x2D,0xD4. Поскольку аппаратного интерфейса и модулей нет и готового решения тоже небыло то пришлось писать самому. Намучал интерфейс типа такого: передача пакета->ожидание ответа->если ответ за некоторый интервал времени не приходил то отсылает пакет из очереди заново, в противном случае очередь сдвигаем и высылаем следующий пакет в очереди (если такой имеется). Вобщем организовал FIFO по радиоканалу. Организацию очереди сделал дубовой и не слишком оптимальной. Потом переделаю под кольцевой буфер (с указателями head и teil) чтобы небыло всяких там memmove();

В будущем хотелось бы использовать мощный радиомодуль с большим буфером, нежели у RF12. Такой есть - RF22/23 - там фифо 64 байта. Мне хватило бы. Проблема лишь в том, что готового мощного радиомодуля на этом чипе - НЕТ!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

День добрый, колеги.

Неделю уже воюю с двумя RFM12, чтоб подружить их,. Никак не получается.

Конфигурация STM32F103+RFM12 (в обоих случаях: 1-й передатчик, - 2-й приемник).

Использую апаратный SPI, примеры от Hope RF.

Передатчик вроде как запустился, признаки такие: при вкл/выкл передамчика ток меняется 21мА/2мА.

Нога IRQ дергается, длительность передачи соответствует времени 1/скорость * количество передаваемых байт.

Сейчас для теста он 1 раз в секунду отправляется пакет данных из примера Hope RF.

Второй екземпляр на таком же железе, рядом на столе.

Oшибку из документа rfm12b_and_avr__quick_start.pdf исправил.

Приемник похоже тоже включается, ток потребления меняется с 3 на 8,8 мА.

Статус считывается 0x01A0;

Не могу понять, что с ним такое?

Помогите советом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В будущем хотелось бы использовать мощный радиомодуль с большим буфером, нежели у RF12. Такой есть - RF22/23 - там фифо 64 байта. Мне хватило бы. Проблема лишь в том, что готового мощного радиомодуля на этом чипе - НЕТ!

почему есть RFM 12 c 0.5W на выходе...

Изменено пользователем rezident
Нарушение п.3.4 Правил форума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По RF12 и TRC101 вот здесь dlehard.narod.ru сложено все, что в свое время смог нарыть, плюс к этому и примеры PCB антен с расчетами для этих трансиверов. Мне в свое время очень помогло. Может кому тоже пригодиться.

Изменено пользователем D H

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как бы сейчас более актуальны другие модули из этой серии RFM22,23 RFM31,42,43, c ними можно добиться более впечатляющих результатов....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подниму темку вверх :)

Я вот мучаю модули rfm12b. Вообще делаю передачу звука. Добился того что передаются отрывистые куски речи, но постоянно слышимый голос не получается сделать. Вообщем инициализирую трансиверы. посылаю три пакета преамбулы AA, синхро 2DD4 и далее шлю поток аудио на 100 кбит\сек при настроенных трансиверах на 115200. получается лишних 15200 бит, вот в них с переменным успехом я втыкаю пакеты синхронизации 2DD4, т.е шлю по счетчику их. Например прерывистых звуков я добился если посылаю пакеты синхронизации через каждые 250 пакетов аудио. По идее имея лишние 15200 бит\сек я могу передавать синхропакеты на порядок чаще, но тогда получается каша. На приемнике тоже через каждые 250 пакетов сбарсываю фифо и жду синхропакетов. Короче игры с подгоном оптимального времени синхронизации трансиверов не привели к успеху. Ввиде теста сделал отправку и прием пакетов длиной по 250 байт, т.е посылаю преамбулу, синхропакеты и далее 250 байт, и на приемнике все приходит без единой ошибки. Решил раз такое счастье, то сделаю отправку на 2х буферах. Жду заполнения одного буфера и как только оно наступило, высылаю пакет, и параллельно наполняю второй буфер данными для отправки. Короч не пошла идея, врод все правильно, а не фурычит. Вернулся к варианту с прерывистым голосом, ну который непрерывно шлет. И так и сяк, а стабилной передачи аудио не получаю. Может кто подскажет правильный алгоритм непрерывной передачи на данных модулях, хоть на пальцах?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

решил траблу, видимо в трансмитерах дело, толи статики хватанули, толи заводское, хз вобщем. Всегда гнал поток от одного модуля к другому и получалось не очень, а тут вообще чет перестало принимать. решил гнать поток в обратку и все ок. речь слышу, правда хуже чем по проводам, но это проблемы эфира уже, нужно программный фильтр\кодек варганить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужна помощь, коллеги !

 

Уже месяц не могу наладить связь между двумя RF12B на 868 МГц.

Примеры, взятые с сайта Hope RF не заработали, советы и рекомендации, предложенные на форуме также не помоги :(

 

Пара контроллеров – MBED и STM32, SPI – программный, как и в примерах.

 

Поскольку перепрошивать помногу раз контроллеры с разными вариантами прошивки дело утомительное, решил написать программку на PC, которая по COM-порту передает и возвращает значение от RF. На контроллерах сделано только преобразование «COM to SPI».

 

То, что SPI модулей работает, говорит следующее:

1. При включении питания (при первом чтении статуса cmd = 0x0000) флаг POR установлен у обоих модулей;

2. В режиме передачи (cmd = 0x8239) модуль потребляет около 40 мА, а в режиме приема (cmd = 0x8299) модуль потребляет около 20 мА.

 

Выход nIRQ при чтении статуса (cmd = 0x0000) переходит с «0» в «1» и так в нем и остается, поэтому строчку «WAIT_NIRQ_LOW()» приходиться комментировать, чтобы избежать зависание программы.

(вместо нее ставил задержку – не помогло)

Прерывание от nIRQ также не возникает.

 

При передачи пакетов ни разу не получилось так, чтобы старший бит регистра статуса (FFIT) был установлен у приемника :( Хотя несущую приемник фиксирует, можно передавать азбуку Морзе :)

 

 

0_3e3b1_8de14df2_L.jpg

 

Рис.1 – Передатчик

(в поле данных пакета Data при передаче добавляется префикс 0xB800, т.е. для «0123…» будет отправлено «0xB830 0xB831 0xB832 0xB833…»)

 

 

0_3e3b2_e577e7b1_XL.jpg

 

Рис.2 – Статус передатчика (cmd = 0x0000)

 

0_3e3b3_78f32af9_L.jpg

 

Рис.3 – Приемник

 

0_3e3b4_dceb5d74_XL.jpg

 

Рис.4 – Статус приемника (cmd = 0x0000)

Изменено пользователем ArtemDement

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При передачи пакетов ни разу не получилось так, чтобы старший бит регистра статуса (FFIT) был установлен у приемника :) Хотя несущую приемник фиксирует, можно передавать азбуку Морзе :)

 

Если бит не устанавливается и прерывание не происходит то приемник вообще ничего не принимает, а на скриншоте у вас в статусбаре видно кол-во принятых пакетов.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если бит не устанавливается и прерывание не происходит то приемник вообще ничего не принимает, а на скриншоте у вас в статусбаре видно кол-во принятых пакетов.

 

Количество пакетов имеется ввиду - преобразований "COM to SPI", а количество ошибок - по COMу послал пакет а ответный не пришел (пришел искаженный)

Изменено пользователем ArtemDement

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас скорее всего неправильно сконфигурены модули, тоже была такая ерунда, порылся в инициализации модулей и все наладилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас скорее всего неправильно сконфигурены модули, тоже была такая ерунда, порылся в инициализации модулей и все наладилось.

 

 

Вы не могли бы показать пример правильной конфигурации ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте так:

 

 

void rfm12b_Init() {
  spisend(0x0000);
  spisend(RF_SLEEP);
  spisend(RF_TXREG_WRITE);
  while(PINB.1 == 0) { spisend(0x0000); } //Ждем nIRQ
  
  spisend(0x80E7); //EL,EF,868band,12.0pF
  spisend(0x8239); //!er,!ebb,ET,ES,EX,!eb,!ew,DC
  spisend(0xA640); //freq select
  spisend(0xC606); ///49.2kbps///0xC647; - 4.8kbps
  //spisend(0x94A2); //VDI,FAST,134kHz,0dBm,-91dBm ----//9620
  spisend(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
  spisend(0xC2AC); //AL,!ml,DIG,DQD4 ----//c26c
  spisend(0xCA83); //FIFO8,SYNC,ff,DR----
  //spisend(0xCA81); //FIFO8,SYNC,!ff,DR----
  spisend(0xCEAB); //SYNC=2DAB;
  spisend(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN------//c493//c4a3
  spisend(0x9850); //!mp,90kHz,MAX OUT----//98b5
  //spisend(0xCC17); //!OB1,!OB0, LPX,!ddy,DDIT,BW0 /// SPI 5 or 10 MHz
  spisend(0xCC77); // OB1,OB0, LPX,!ddy,DDIT,BW0    /// SPI < 2.5 MHZ
  spisend(0xE000); //NOT USE
  spisend(0xC800); //NOT USE
  spisend(0xC040); //1.66MHz,2.2V 
}

 

Вообще можете посмотреть мой проектик на этих модулях, там все работает.

Изменено пользователем jekler

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Dear friends, подскажите кто знает.

 

В даташите на RF12B (http://www.hoperf.com/upfile/RF12B.pdf) говорится, что вывод «DATA» (он же «FSK» и «nFFS») при использование FIFO должен быть подключен к нулю:

 

0_4092a_ca4c6d0f_XXL.jpg

 

 

А в примерах со схемами (например, http://dlehard.narod.ru/quick_start.pdf), этот вывод подтянут к питанию через резистор 10KОм:

 

0_4092b_6557d30f_XXL.jpg

 

 

Кому верить?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...