В данной статье хочу поделиться опытом наладки модуля от HopeRF RFM23B. Если вы спросите почему именно этот модуль, то ответ будет простой, он дешевый всего около 10$, это за RFM22B 20dBm передача, и простотой в использовании. RFM22 - трансивер, RFM23 - трансивер, RFM42 - передатчик, RFM31 - приемник, Данная статья относится ко всем этим модулям и примеры должны будут работать на всех выше перечисленных. С этими модулями мне пришлось еще работать с AVR, и с тех пор я использую только их. Мы будем работать вот с этим модулем Собственно вот схема подключения Порты для подключения были выбраны под SPI2, nIRQ был подключен к порту C Пин 7, если подключать к другому то нужно поменять в Header-е и в функции void nIRQ_Pin_init(void) SDN посажен на землю, что обозначает, что модуль постоянно включен. В Header-е можно и даже нужно выставить размер FIFO буфера для передачи, для корректной работы, иначе, если он не заполнится до конца перед передачей, то передача не удастся.Так же возможна ручная регулировка выходной мощности.
/*****************************************************************************************************************************/ #define TX_FIFO_BUFF 13 //Выьираем размер FIFO бцфера для передачи от 1 до 64 //(передавать нужно имеено столько же байт иначе не заработает) #define OUTPUT_POWER 7 //Выбираем мощность передатчика от 0 до 7 (см. таблицы в datasheet) #define Event_RFM (GPIOC->IDR & GPIO_IDR_IDR7) //nIRQ с RFM, если менять вывод, то еще и в void nIRQ_Pin_init(void) /*****************************************************************************************************************************/ Настрой частоты настраивается в функции void RFM_init (void), настраивается в диапазоне от 240 МГц до 960 МГц, то что написано на модулях это не показатель, по крайней мере модуль на 868 МГц легко заводил на 434 МГц. настраивается здесь: spi_send(0x75, 0x53); // !!!в этих трех байтах настраивается частота модуля spi_send(0x76, 0x64); // !!!сейчас она настроена на 434 МГц spi_send(0x77, 0x00); // !!!(что бы изменить смотрите datasheet ст.21) но для этого надо будет посмотреть в Datasheet на 21 странице.
Вот примерчик для организации приема char LCDBUF[50]; RFM_init(); //инициализируем модуль
RX_ON(); //включаем модуль на прием, там же и сбрасываются прерывания по приему while (Event_RFM); //Ждем прерывания по приему пакета RX_FIFO_BUFF=received_packed(); //присваиваем RX_FIFO_BUFF количество принятых байт for(a=0;a<RX_FIFO_BUFF;a++) // { sprintf(LCDBUF,"%X",RX_packed[a]); //выводим пакет из принятых байт LCD_PUT(LCDBUF); //на экран } } вот что получилось: Передатчиком служил пульт от "Шара", который передает один байт, который соответствует нажатой кнопке Схему и проект на пульт, можно найти здесьКак мы видим на экране высветились последовательно цифры 4080, что соответствует нажатой кнопке влево (4), Затем отсутствие нажатых кнопок (0), затем нажатой кнопке вправо (8), и опять отсутствие нажатых кнопок. Использовал пульт так как ничего больше готового под рукой не было. А теперь рассмотрим пример: 1. Сначала инициализировали RFM_init(); 2. Затем перевели в режим приема RX_ON(); 3. Дождались прерывания от модуля while (Event_RFM); 4. получили количество байт и одновременно прочитали пакет из модуля RX_FIFO_BUFF=received_packed(); записав в массив RX_packed[] принятый пакет 5. затем мы просто выводим весь пакет на экран 6. не забываем что затем надо сбросить прерывания, так как у нас зациклено, прерывание сбрасывается в RX_ON(); ну вот собственно что касается приема.
Теперь что касается передачи: RFM_init(); //инициализируем модуль TX_packed[0]='H'; // TX_packed[1]='e'; //Заполняем TX_packed[2]='l'; // TX_packed[3]='l'; //Массив TX_packed[4]='o'; // TX_packed[5]=' '; //TX_packed[] TX_packed[6]='W'; // TX_packed[7]='o'; // TX_packed[8]='r'; // TX_packed[9]='l'; // TX_packed[10]='d'; // TX_packed[11]=13; //перевод строки TX_packed[12]=10; //возврат каретки
TX_ON(); //включаем модуль на передачу, там же и сбрасываются прерывания по передачи send_packed(); //передаем пакет TX_packed[] delay_ms(1000); //делаем задержку }
Вот что у нас получилось: Прием осуществлялся следующий аппаратурой: Рассмотрим пример передачи, хотя здесь вроде все понятно:) 1. Заполнили массив, в конце спец символы для перевода строчки 2. Настроили на передачу и сбросили прерывания 3. Передали пакет А теперь что это за аппаратура такая:) Платка слева, это такая хороша и удобная штучка как адаптер USB-UART куплен здесьПлатка справа тоже хорошая штучка:) Адаптер RFM31-UART сделанная самим проект здесьРадиомодули покупал здесьДа и чуть не забыл выложить сами библиотеки, они вот здесь, так же не забываем про Delay и LCDНу вот собственно и все.
|