Halfback 0 1 ноября, 2009 Опубликовано 1 ноября, 2009 · Жалоба Уже почти год мучаю эти модули. Задача сводилась к тому, чтобы гарантированно передать пакет на другой модуль. Дело в том, что я обратил внимание на не 100% приеме-передачу. В чем дело разобрался - во время передачи на приемной стороне прерывания по nIRQ не возникали вообще - т.е. не проходила 0x2D,0xD4. Поскольку аппаратного интерфейса и модулей нет и готового решения тоже небыло то пришлось писать самому. Намучал интерфейс типа такого: передача пакета->ожидание ответа->если ответ за некоторый интервал времени не приходил то отсылает пакет из очереди заново, в противном случае очередь сдвигаем и высылаем следующий пакет в очереди (если такой имеется). Вобщем организовал FIFO по радиоканалу. Организацию очереди сделал дубовой и не слишком оптимальной. Потом переделаю под кольцевой буфер (с указателями head и teil) чтобы небыло всяких там memmove(); В будущем хотелось бы использовать мощный радиомодуль с большим буфером, нежели у RF12. Такой есть - RF22/23 - там фифо 64 байта. Мне хватило бы. Проблема лишь в том, что готового мощного радиомодуля на этом чипе - НЕТ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pan_oleg 0 13 января, 2010 Опубликовано 13 января, 2010 · Жалоба День добрый, колеги. Неделю уже воюю с двумя 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; Не могу понять, что с ним такое? Помогите советом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
proxi 0 13 января, 2010 Опубликовано 13 января, 2010 (изменено) · Жалоба В будущем хотелось бы использовать мощный радиомодуль с большим буфером, нежели у RF12. Такой есть - RF22/23 - там фифо 64 байта. Мне хватило бы. Проблема лишь в том, что готового мощного радиомодуля на этом чипе - НЕТ! почему есть RFM 12 c 0.5W на выходе... Изменено 14 января, 2010 пользователем rezident Нарушение п.3.4 Правил форума. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
diehard 0 17 января, 2010 Опубликовано 17 января, 2010 (изменено) · Жалоба По RF12 и TRC101 вот здесь dlehard.narod.ru сложено все, что в свое время смог нарыть, плюс к этому и примеры PCB антен с расчетами для этих трансиверов. Мне в свое время очень помогло. Может кому тоже пригодиться. Изменено 17 января, 2010 пользователем D H Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
proxi 0 17 января, 2010 Опубликовано 17 января, 2010 · Жалоба как бы сейчас более актуальны другие модули из этой серии RFM22,23 RFM31,42,43, c ними можно добиться более впечатляющих результатов.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jekler 0 25 июня, 2010 Опубликовано 25 июня, 2010 · Жалоба Подниму темку вверх :) Я вот мучаю модули rfm12b. Вообще делаю передачу звука. Добился того что передаются отрывистые куски речи, но постоянно слышимый голос не получается сделать. Вообщем инициализирую трансиверы. посылаю три пакета преамбулы AA, синхро 2DD4 и далее шлю поток аудио на 100 кбит\сек при настроенных трансиверах на 115200. получается лишних 15200 бит, вот в них с переменным успехом я втыкаю пакеты синхронизации 2DD4, т.е шлю по счетчику их. Например прерывистых звуков я добился если посылаю пакеты синхронизации через каждые 250 пакетов аудио. По идее имея лишние 15200 бит\сек я могу передавать синхропакеты на порядок чаще, но тогда получается каша. На приемнике тоже через каждые 250 пакетов сбарсываю фифо и жду синхропакетов. Короче игры с подгоном оптимального времени синхронизации трансиверов не привели к успеху. Ввиде теста сделал отправку и прием пакетов длиной по 250 байт, т.е посылаю преамбулу, синхропакеты и далее 250 байт, и на приемнике все приходит без единой ошибки. Решил раз такое счастье, то сделаю отправку на 2х буферах. Жду заполнения одного буфера и как только оно наступило, высылаю пакет, и параллельно наполняю второй буфер данными для отправки. Короч не пошла идея, врод все правильно, а не фурычит. Вернулся к варианту с прерывистым голосом, ну который непрерывно шлет. И так и сяк, а стабилной передачи аудио не получаю. Может кто подскажет правильный алгоритм непрерывной передачи на данных модулях, хоть на пальцах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jekler 0 26 июня, 2010 Опубликовано 26 июня, 2010 · Жалоба решил траблу, видимо в трансмитерах дело, толи статики хватанули, толи заводское, хз вобщем. Всегда гнал поток от одного модуля к другому и получалось не очень, а тут вообще чет перестало принимать. решил гнать поток в обратку и все ок. речь слышу, правда хуже чем по проводам, но это проблемы эфира уже, нужно программный фильтр\кодек варганить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ArtemDement 0 7 января, 2011 Опубликовано 7 января, 2011 (изменено) · Жалоба Нужна помощь, коллеги ! Уже месяц не могу наладить связь между двумя 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) был установлен у приемника :( Хотя несущую приемник фиксирует, можно передавать азбуку Морзе :) Рис.1 – Передатчик (в поле данных пакета Data при передаче добавляется префикс 0xB800, т.е. для «0123…» будет отправлено «0xB830 0xB831 0xB832 0xB833…») Рис.2 – Статус передатчика (cmd = 0x0000) Рис.3 – Приемник Рис.4 – Статус приемника (cmd = 0x0000) Изменено 8 января, 2011 пользователем ArtemDement Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fry__ 0 7 января, 2011 Опубликовано 7 января, 2011 · Жалоба При передачи пакетов ни разу не получилось так, чтобы старший бит регистра статуса (FFIT) был установлен у приемника :) Хотя несущую приемник фиксирует, можно передавать азбуку Морзе :) Если бит не устанавливается и прерывание не происходит то приемник вообще ничего не принимает, а на скриншоте у вас в статусбаре видно кол-во принятых пакетов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ArtemDement 0 8 января, 2011 Опубликовано 8 января, 2011 (изменено) · Жалоба Если бит не устанавливается и прерывание не происходит то приемник вообще ничего не принимает, а на скриншоте у вас в статусбаре видно кол-во принятых пакетов. Количество пакетов имеется ввиду - преобразований "COM to SPI", а количество ошибок - по COMу послал пакет а ответный не пришел (пришел искаженный) Изменено 8 января, 2011 пользователем ArtemDement Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jekler 0 13 января, 2011 Опубликовано 13 января, 2011 · Жалоба У вас скорее всего неправильно сконфигурены модули, тоже была такая ерунда, порылся в инициализации модулей и все наладилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ArtemDement 0 13 января, 2011 Опубликовано 13 января, 2011 · Жалоба У вас скорее всего неправильно сконфигурены модули, тоже была такая ерунда, порылся в инициализации модулей и все наладилось. Вы не могли бы показать пример правильной конфигурации ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jekler 0 15 января, 2011 Опубликовано 15 января, 2011 (изменено) · Жалоба Попробуйте так: 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 } Вообще можете посмотреть мой проектик на этих модулях, там все работает. Изменено 15 января, 2011 пользователем jekler Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ArtemDement 0 29 января, 2011 Опубликовано 29 января, 2011 · Жалоба Dear friends, подскажите кто знает. В даташите на RF12B (http://www.hoperf.com/upfile/RF12B.pdf) говорится, что вывод «DATA» (он же «FSK» и «nFFS») при использование FIFO должен быть подключен к нулю: А в примерах со схемами (например, http://dlehard.narod.ru/quick_start.pdf), этот вывод подтянут к питанию через резистор 10KОм: Кому верить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jekler 0 31 января, 2011 Опубликовано 31 января, 2011 · Жалоба Если вы используете фифо, то нужно подтянуть. смотрим Configuration Setting Command. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться