HOPERF RFM70, особенности работы
-
asylumist
- Первый раз сказал Мяу!
- Сообщения: 34
- Зарегистрирован: Сб май 03, 2014 23:34:28
- Откуда: Украина, Херсон
Re: HOPERF RFM70, особенности работы
похоже, нашел. в передатчике и в приемнике должна быть одинаковая строчка. в первом банке.
попробуйте.
{ (0x20|0x06), 0x0F }, //air data rate-2M,out power 5dbm,setup LNA gain high (0dBM)
попробуйте.
{ (0x20|0x06), 0x0F }, //air data rate-2M,out power 5dbm,setup LNA gain high (0dBM)
Re: HOPERF RFM70, особенности работы
Это я пробовал, смотри мои сообщения выше. Сейчас модули работают при параметре 0x07 если ставлю 0x0F нет связи. Что самое смешное заменил RFM73 на RFM70 и соответственно сделал
{ (0x20|0x06), 0x3F }, //air data rate-2M,out power 5dbm,setup LNA gain high (0dBM)
а они не работают, а работали.
У меня проект ранее был на Atmel Studio 6.1, попробую откатиться.
P.S. Пока на этом остановлюсь, что-то меня эти модули стали "напрягать", попробую NRF24L01
прикрутить, есть что по ним у тебя? Можно в личку.
{ (0x20|0x06), 0x3F }, //air data rate-2M,out power 5dbm,setup LNA gain high (0dBM)
а они не работают, а работали.
У меня проект ранее был на Atmel Studio 6.1, попробую откатиться.
P.S. Пока на этом остановлюсь, что-то меня эти модули стали "напрягать", попробую NRF24L01
прикрутить, есть что по ним у тебя? Можно в личку.
-
asylumist
- Первый раз сказал Мяу!
- Сообщения: 34
- Зарегистрирован: Сб май 03, 2014 23:34:28
- Откуда: Украина, Херсон
Re: HOPERF RFM70, особенности работы
странно. с параметрами как у вас, у меня действительно модули связывались плохо. не 5 метров, но хуже, чем у меня было. а с предложенными изменениями стало лучше.
а насчет NRF24L01 только читал, что rfm70/73 - это китайская копия с NRF24L01. но у нас он чуть-ли не в два раза дороже.
а насчет NRF24L01 только читал, что rfm70/73 - это китайская копия с NRF24L01. но у нас он чуть-ли не в два раза дороже.
- 4eef
- Родился
- Сообщения: 4
- Зарегистрирован: Пт фев 27, 2009 20:31:34
- Откуда: Харьков
- Контактная информация:
Re: HOPERF RFM70, особенности работы
Доброго времени суток уважаемой общественности.
Давненько игрался с данными радиомодулями. Причем, вполне успешно: были и приём, и передача, и с конфигами всё, тьфу-тьфу, на месте. После защиты диплома естественным образом захотелось продолжить изготовление проектов, которые затевал. Открыл старый код, и, мягко говоря, охренел. Короче, пришлось всё переписывать по-новой. Но, не в этом суть.
Сейчас у меня нет передачи. Вот нет и всё, хоть ты тресни. Я даже переписал программу на старый лад. Хрена с два! Не помогает и тут. Конфигурируется сабж должным образом. Отследить ситуацию с работой SPI я могу с переходником UART-SPI-UART, реализованным на ATTiny2313A. Сабж позволяет полноценно общаться с радиомодулем с консоли, посредством FT232RL. При этом, я получаю адекватные ответы - то, что должно быть по плану. Соответственно, проблем на стороне SPI нет.
Сразу хотелось бы сказать, что тему я не перечитывал. Обратил внимание, что тут, в основном, юзают C, а я его не приемлю. Если найдутся ассемблерщики - буду очень и очень рад.
Приёмник реализован на стороне переходника UART-SPI-UART. Передатчик - на ATTiny85 (маячок, по прерываниям от WDT раз в секунду шлётся 0xAA). Сейчас я нуждаюсь в помощи человека, успешно реализовавшего передачу. Прилагаю файло с кодом. Буду рад, если кто-то поможет разобраться, в чем проблема. Если кому-то код покажется сильно лохматым, но желание разобраться не пропадёт - поясню неясные моменты.
На комментарии в некоторых местах, откровенно говоря, опираться не стоит. Код редактировался не смотря на них. В некоторых местах может быть несуразица вроде копирования статусного регистра в r15, а по факту - в r0. И так далее...
Давненько игрался с данными радиомодулями. Причем, вполне успешно: были и приём, и передача, и с конфигами всё, тьфу-тьфу, на месте. После защиты диплома естественным образом захотелось продолжить изготовление проектов, которые затевал. Открыл старый код, и, мягко говоря, охренел. Короче, пришлось всё переписывать по-новой. Но, не в этом суть.
Сейчас у меня нет передачи. Вот нет и всё, хоть ты тресни. Я даже переписал программу на старый лад. Хрена с два! Не помогает и тут. Конфигурируется сабж должным образом. Отследить ситуацию с работой SPI я могу с переходником UART-SPI-UART, реализованным на ATTiny2313A. Сабж позволяет полноценно общаться с радиомодулем с консоли, посредством FT232RL. При этом, я получаю адекватные ответы - то, что должно быть по плану. Соответственно, проблем на стороне SPI нет.
Сразу хотелось бы сказать, что тему я не перечитывал. Обратил внимание, что тут, в основном, юзают C, а я его не приемлю. Если найдутся ассемблерщики - буду очень и очень рад.
Приёмник реализован на стороне переходника UART-SPI-UART. Передатчик - на ATTiny85 (маячок, по прерываниям от WDT раз в секунду шлётся 0xAA). Сейчас я нуждаюсь в помощи человека, успешно реализовавшего передачу. Прилагаю файло с кодом. Буду рад, если кто-то поможет разобраться, в чем проблема. Если кому-то код покажется сильно лохматым, но желание разобраться не пропадёт - поясню неясные моменты.
На комментарии в некоторых местах, откровенно говоря, опираться не стоит. Код редактировался не смотря на них. В некоторых местах может быть несуразица вроде копирования статусного регистра в r15, а по факту - в r0. И так далее...
- Вложения
-
- rfm_test_t85.rar
- Передатчик
- (1.59 КБ) 283 скачивания
-
- Chrono_debugger.rar
- Переходник (приёмник)
- (4.96 КБ) 260 скачиваний
ЙА дезинтегратор ©
- Rinon Ninqueon
- Говорящий с текстолитом
- Сообщения: 1562
- Зарегистрирован: Ср июн 30, 2010 18:54:47
- Откуда: NO14MU
- Контактная информация:
Re: HOPERF RFM70, особенности работы
Кто пробовал с этого сайта библиотеки?
http://www.voti.nl/rfm73/index.html
Тыркаюсь с адруиной.
Передача идёт, а приёма нет.
В основе - пример от этой библиотеки.
Два модуля присоединены к одному МК.
//----------.----------
Не видят друг друга.
Выводит:
Код:
Тыкал анализатором - все команды правильные, ответ адекватный.
http://www.voti.nl/rfm73/index.html
Тыркаюсь с адруиной.
Передача идёт, а приёма нет.
В основе - пример от этой библиотеки.
Два модуля присоединены к одному МК.
Спойлер
Код: Выделить всё
#include "Arduino.h"
#include <rfm73.h>
pins::uc_pin ce( 8 ), csn( 10 ), mosi( 11 ), miso( 12 ), sck( 13 ), ce1( 7 ), csn1( 9 );
pins::uc_pin led_tx( 5 ), led_rx( 6 );
rfm73 radio( sck, mosi, miso, csn, ce );
rfm73 radio1( sck, mosi, miso, csn1, ce1 );
unsigned char receive_led = 0, reg_st = 0;
const unsigned char tx_buf[17]={
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x78};
void setup()
{
pinMode(3, INPUT);
digitalWrite(3, HIGH);
Serial.begin(9600);
attachInterrupt(1, blink2, CHANGE);
}
void blink2()
{
receive_led = 60;
reg_st = radio1.register_read(RFM73_REG_CONFIG);
radio1.register_write(RFM73_REG_CONFIG, reg_st);
Serial.print("Interrupt 1 \r\n");
}
void loop() {
led_tx.direction_set_output();
led_rx.direction_set_output();
radio.init(); radio1.init();
radio.channel( 10 ); radio1.channel( 10 );
if(!radio.is_present() || !radio1.is_present())
{
for(;;)
{
delay( 300 );
led_rx.set( 0 );
led_tx.set( 1 );
delay( 300 );
led_rx.set( 1 );
led_tx.set( 0 );
}
}
unsigned char len, i, chksum, n = 0;
unsigned char rx_buf[ RFM73_MAX_PACKET_LEN ];
unsigned char transmit_led = 0;
for(;;)
{
delay( 4 );
led_tx.set( transmit_led > 0 );
if( transmit_led > 0 )
{
transmit_led--;
}
led_rx.set(receive_led > 0);
if( receive_led > 0 )
{
receive_led--;
}
if( ++n > 250 )
{
radio.mode_transmit();
radio1.mode_receive();
transmit_led = 20;
radio.buffer_write( RFM73_CMD_W_TX_PAYLOAD_NOACK, tx_buf, 17 );
delay( 1 );
n = 0;
}
if( ! radio1.receive_fifo_empty() )
{
Serial.print("FIFO is not empty\r\n");
len = radio1.register_read( RFM73_CMD_R_RX_PL_WID );
if( len <= RFM73_MAX_PACKET_LEN )
{
Serial.print("Normal length\r\n");
radio1.buffer_read( RFM73_CMD_R_RX_PAYLOAD, rx_buf, len);
chksum = 0;
for(i = 0; i < 16; i++)
{
chksum += rx_buf[i];
}
if (chksum == rx_buf[16] && rx_buf[0] == 0x30)
{
receive_led = 20;
Serial.print("Checksumm\r\n");
}
}
radio1.register_write( RFM73_CMD_FLUSH_RX,0 );
}
}
}
//----------.----------
Не видят друг друга.
Выводит:
Спойлер
Код: Выделить всё
RFM73 testing
Init module 1
Init module 2
Module 1 is present
Module 2 is present
Packages lost: 0
Packages retransmit: 0
Sending
Packages lost: 1
Packages retransmit: 15
Sending
Packages lost: 2
Packages retransmit: 15
Sending
Packages lost: 3
Packages retransmit: 15
Sending
Packages lost: 4
Packages retransmit: 15
Sending
Packages lost: 5
Packages retransmit: 15
Sending
Packages lost: 6
Packages retransmit: 15
Sending
Packages lost: 7
Packages retransmit: 15
Sending
Packages lost: 8
Packages retransmit: 15
Sending
Packages lost: 9
Packages retransmit: 15
Sending
Packages lost: 10
Packages retransmit: 15
Sending
Packages lost: 11
Packages retransmit: 15
Sending
Packages lost: 12
Packages retransmit: 15
Sending
Packages lost: 13
Packages retransmit: 15
Sending
Packages lost: 14
Packages retransmit: 15
Sending
Packages lost: 15
Packages retransmit: 15
И т.д.
Код:
Спойлер
Код: Выделить всё
#include "Arduino.h"
#include <rfm73.h>
pins::uc_pin ce( 8 ), csn( 10 ), mosi( 11 ), miso( 12 ), sck( 13 ), ce1( 7 ), csn1( 9 );
pins::uc_pin led_tx( 5 ), led_rx( 6 );
rfm73 radio( sck, mosi, miso, csn, ce );
rfm73 radio1( sck, mosi, miso, csn1, ce1 );
unsigned char receive_led = 0, reg_st = 0;
const unsigned char Address[]={ 0x11, 0x19, 0x19, 0x12, 0x17 };
const unsigned char tx_buf[17]={
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x78};
void setup()
{
Serial.begin(9600);
Serial.print("RFM73 testing\r\n");
}
void loop() {
led_tx.direction_set_output();
led_rx.direction_set_output();
Serial.print("Init module 1\r\n");
radio.init();
radio.channel( 19 );
radio.pipe_enable(0, true);
radio.pipe_enable(1, false);
radio.receive_address_p0(Address);
radio.transmit_address(Address);
radio.pipe_autoack(0, true);
radio.mode_receive();
delay( 2 );
Serial.print("Init module 2\r\n");
delay( 4 );
radio1.init();
radio1.channel( 19 );
radio1.pipe_enable(0, true);
radio1.pipe_enable(1, false);
radio1.receive_address_p0(Address);
radio1.transmit_address(Address);
radio.pipe_autoack(1, true);
radio1.mode_transmit();
delay( 4 );
if(!radio.is_present())
{
for(;;)
{
delay( 300 );
led_rx.set( 0 );
led_tx.set( 1 );
delay( 300 );
led_rx.set( 1 );
led_tx.set( 0 );
}
}
delay( 2 );
Serial.print("Module 1 is present\r\n");
delay( 2 );
if(!radio1.is_present())
{
for(;;)
{
delay( 300 );
led_rx.set( 0 );
led_tx.set( 1 );
delay( 300 );
led_rx.set( 1 );
led_tx.set( 0 );
}
}
delay( 2 );
Serial.print("Module 2 is present\r\n");
delay( 2 );
unsigned char len, i, chksum, n = 0;
unsigned char rx_buf[ RFM73_MAX_PACKET_LEN ];
unsigned char transmit_led = 0;
delay( 10 );
for(;;)
{
delay( 4 );
led_tx.set( transmit_led > 0 );
if( transmit_led > 0 )
{
transmit_led--;
}
led_rx.set(receive_led > 0);
if( receive_led > 0 )
{
receive_led--;
}
if( ++n > 250 )
{
Serial.print("Packages lost: ");
Serial.print(radio1.lost_packets_count());
Serial.print("\r\n");
Serial.print("Packages retransmit: ");
Serial.print(radio1.retransmit_count());
Serial.print("\r\n");
radio1.mode_transmit();
delay(1);
transmit_led = 20;
ce1.set(0);
delay(1);
Serial.print("Sending\r\n");
// radio1.buffer_write( RFM73_CMD_W_TX_PAYLOAD, tx_buf, 17 );
radio1.transmit_message(tx_buf, 17);
delay(1);
ce1.set(1);
delay( 1 );
// clear interrupt status
reg_st = radio1.register_read( RFM73_REG_STATUS );
radio1.register_write( RFM73_REG_STATUS ,reg_st );
ce1.set(0);
// radio1.mode_receive();
n = 0;
}
if( ! radio.receive_fifo_empty() )
{
Serial.print("FIFO is not empty\r\n");
len = radio.register_read( RFM73_CMD_R_RX_PL_WID );
if( len <= RFM73_MAX_PACKET_LEN )
{
Serial.print("Normal length\r\n");
radio.buffer_read( RFM73_CMD_R_RX_PAYLOAD, rx_buf, len);
chksum = 0;
for(i = 0; i < 16; i++)
{
chksum += rx_buf[i];
}
if (chksum == rx_buf[16] && rx_buf[0] == 0x30)
{
receive_led = 20;
Serial.print("Checksumm\r\n");
}
}
radio.register_write(RFM73_CMD_FLUSH_RX, 0);
}
}
}
Тыкал анализатором - все команды правильные, ответ адекватный.
- 4eef
- Родился
- Сообщения: 4
- Зарегистрирован: Пт фев 27, 2009 20:31:34
- Откуда: Харьков
- Контактная информация:
Re: HOPERF RFM70, особенности работы
Дополнение к предыдущему моему посту, если вдруг кто заинтересуется.
Ошибка заключалась в последовательности записи регистров первого банка. Там, где надо было писать младший байт первым, я писал старший, и наоборот. По исправлению бага была произведена передача.
Ошибка заключалась в последовательности записи регистров первого банка. Там, где надо было писать младший байт первым, я писал старший, и наоборот. По исправлению бага была произведена передача.
ЙА дезинтегратор ©
Re: HOPERF RFM70, особенности работы
Привет всем. пробую данные модули для сети типа звезда. Пока есть 1 базовая станция которая на одном канале по разным адресам рассылает запросы и есть 2 модуля которые отвечают на запросы БС. Все это с автоподтверждением и ретрансляцией. Прием пакетов отслеживаю по прерыванию из RFM70.
Проблема в том, что модули принимают все, что шлет базовая станция, тоесть принимают пакеты не на свой адрес. Кто стыкался?как лечить?
Проблема в том, что модули принимают все, что шлет базовая станция, тоесть принимают пакеты не на свой адрес. Кто стыкался?как лечить?
Re: HOPERF RFM70, особенности работы
Попробуй откл. на приемниках не свой канал
- Вложения
-
- 1.jpg
- (204.23 КБ) 709 скачиваний
Re: HOPERF RFM70, особенности работы
Это уже сделано. Моя либа на основе VOTI.
Левые пакеты принимаются на пайп1, который запрограммирован на прием по конкретному адресу.
Делал по даташиту.
В Пайп0 записал адрес передающего канала для приема пакета подтверждения приема БС, пайп 1 - на прием обычных пакетов.
Левые пакеты принимаются на пайп1, который запрограммирован на прием по конкретному адресу.
Делал по даташиту.
В Пайп0 записал адрес передающего канала для приема пакета подтверждения приема БС, пайп 1 - на прием обычных пакетов.
Код: Выделить всё
rfm70_address_length(5);
rfm70_transmit_address(sdata.local_addr); //Адрес даного модуля.
rfm70_receive_address_p0(sdata.local_addr); //сюда приходят подтверждения от БС
//REG_EN_AA
rfm70_pipe_autoack(1, 1);
rfm70_receive_address_p1(sdata.remote_addr);//сюда приходят данные от БС.
//EN_RXADDR
rfm70_pipe_enable(0, 1);
rfm70_pipe_enable(1, 1);
rfm70_pipe_enable(2, 0);
rfm70_pipe_enable(3, 0);
rfm70_pipe_enable(4, 0);
rfm70_pipe_enable(5, 0);
Re: HOPERF RFM70, особенности работы
Все мозг закипел
И так имеем 2-е NRF 24L01+ , которые устанавливают связь между собой , в режиме DPL, помоему и без вкл. питания.
Есть 2-е RFM73 , которые с тем же кодом + банк1 устанавливают связь между собой , но при этом приемник не понимает сколько байт ему прислали- значение возвращает 0х00, и выводит всякую дребедень на экран. Передатчик ACK не получает.
Ставлю NRF - как приемник, RFM передатчик - с приемником все хорошо , выводит как все положено , АСК - нет
Ставлю NRF - передатчик , RFM приемник - https://www.youtube.com/watch?v=swYwns_JFJI
Можно бы плюнуть на RFM - " Но за державу обидно!"
Инит банков для обоих микрух . В бубен бью.
И так имеем 2-е NRF 24L01+ , которые устанавливают связь между собой , в режиме DPL, помоему и без вкл. питания.
Есть 2-е RFM73 , которые с тем же кодом + банк1 устанавливают связь между собой , но при этом приемник не понимает сколько байт ему прислали- значение возвращает 0х00, и выводит всякую дребедень на экран. Передатчик ACK не получает.
Ставлю NRF - как приемник, RFM передатчик - с приемником все хорошо , выводит как все положено , АСК - нет
Ставлю NRF - передатчик , RFM приемник - https://www.youtube.com/watch?v=swYwns_JFJI
Можно бы плюнуть на RFM - " Но за державу обидно!"
Инит банков для обоих микрух . В бубен бью.
Код: Выделить всё
DATA_INIT_BANK0:
.db Com_WrReg+EN_AA,0x01,Com_WrReg+EN_RXADDR,0x01,Com_WrReg+SETUP_AW,0x03,Com_WrReg+SETUP_RETR,0xFF
.db Com_WrReg+RF_CH,28,Com_WrReg+RF_SETUP,0x07,Com_WrReg+DYNPD,0x01,Com_WrReg+FEATURE,0x07
.db Com_WrReg+RX_ADDR_P2,0xC3,Com_WrReg+RX_ADDR_P3,0xC4,Com_WrReg+RX_ADDR_P4,0xC5,Com_WrReg+RX_ADDR_P5,0xC6
.db Com_WrReg+RX_PW_P0,0x20,Com_WrReg+RX_PW_P1,0x21,Com_WrReg+RX_PW_P2,0x21,Com_WrReg+RX_PW_P3,0x21
.db Com_WrReg+RX_PW_P4,0x21,Com_WrReg+RX_PW_P5,0x21,Com_WrReg+CONFIG,0x0F
//0 Config - reflect RX_DR\TX_DS\MAX_RT,Enable CRC ,2byte,POWER UP,PRX
//1 EN_AA - Enable auto acknowledgement data pipe 0
//2 EN_RXADDR - Enable RX Addresses pipe 0
//3 SETUP_AW - RX/TX address field width 5byte
//4 SETUP_RETR - Auto retransmission delay (4000us),auto retransmission count(15)
//5 RF_CH - channel
//6 RF_SETUP - Air data rate-1M,out power 0dbm,setup LNA gain \bit4 must set up to 0
//7 DYNPD - Enable dynamic payload length
//8 FEATURE - Enables Dynamic Payload Length,Enables Payload with ACK
;|*************************************************
ADDRESS_PRX_PTX:
.db Com_WrReg+RX_ADDR_P0,0xCE,0xCD,0xC0,0xCB,0xD3,Com_WrReg+RX_ADDR_P1,0xDF
.db 0xDC,0xCB,0xC8,0xC2,Com_WrReg+TX_ADDR,0xCE,0xCD,0xC0,0xCB,0xD3
;|*************************************************
DATA_INIT_BANK1:
.db 0x20,0x40,0x4B,0x01,0x2E,0x21,0xC0,0x4B
.db 0x00,0x00,0x22,0xD0,0xFC,0x8C,0x02,0x23
.db 0x99,0x00,0x39,0x41,0x24,0xD9,0x96,0x82
.db 0x1B,0x25,0x24,0x06,0x7F,0xA6,0x26,0x00
.db 0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x00
.db 0x29,0x00,0x00,0x00,0x00,0x2A,0x00,0x00
.db 0x00,0x00,0x2B,0x00,0x00,0x00,0x00,0x2C
.db 0x00,0x12,0x73,0x00,0x2D,0x36,0xB4,0x80
.db 0x00,0x2E,0x41,0x20,0x08,0x04,0x81,0x20
.db 0xCF,0xF7,0xFE,0xFF,0xFF,0
Toggle_REG4:
.db 0x24,0xDF,0x96,0x82,0x1B,0x24,0xD9,0x96
.db 0x82,0x1BRe: HOPERF RFM70, особенности работы
Всем привет.
Есть пару вопросов по модулям нигде не мог найти эту инфу
1. настройка SPI контроллера с какими параметрами необходимо делать (частота, фазы и т.д.)
2. CRC для SPI в модуле нигде не описан. Или он один для радио и проводного. Как вы настраиваете?
Есть пару вопросов по модулям нигде не мог найти эту инфу
1. настройка SPI контроллера с какими параметрами необходимо делать (частота, фазы и т.д.)
2. CRC для SPI в модуле нигде не описан. Или он один для радио и проводного. Как вы настраиваете?
Re: HOPERF RFM70, особенности работы
Хе хе, все на морях что ли, чего тихе в этой ветке?
SPI работает, в регистрах вроде все что нужно, но тварюки не видят друг друга
То же мозг вскипел (((
SPI работает, в регистрах вроде все что нужно, но тварюки не видят друг друга
То же мозг вскипел (((

