Инициализация NRF24L01+ 2.4Ghz

mixir
Offline
Зарегистрирован: 23.11.2013

Доброго времени суток! Подскажите кто сталкивался со следующей проблемой: При инициализации модуля через библиотеку Mirf сбрасываются все регистры на другие значения. Выставляю конфигурацию, в том числе канал 50 и тп. И после того как вызываю Mirf.config(); все мои настройки сбрасываются, из регистров читается какая то чушь: CONFIG = 1000 SETUP_RETR = 11 SETUP_AW = 11 RF_CH = 2 RF_SETUP = 1111 RX_PW_P0 = 0 Копаясь в библиотеке выяснил что на это влияет бит перехода в режим приема(PRIM_RX) а именно в строчке (Mirf.cpp:268) configRegister(CONFIG, mirf_CONFIG | ( (1<
#include <SPI.h> #include <Mirf.h> #include <MirfHardwareSpiDriver.h> #include <MirfSpiDriver.h> #include <nRF24L01.h> void setup(){ byte addr[] = {0,0,0,0,0}; Serial.begin(9600); Mirf.spi = &MirfHardwareSpi; delay(150); Mirf.csnPin = 5; Mirf.cePin = 6; Mirf.init(); delay(150); Mirf.setTADDR(addr); Mirf.setRADDR(addr); Mirf.configRegister(RF_SETUP,0x06); // 1MHz rate Mirf.configRegister(EN_AA, 0x00); Mirf.configRegister(SETUP_RETR, 0x00); Mirf.configRegister(SETUP_AW, 0x01); Mirf.payload = 13; Mirf.channel = 50; Mirf.config(); // delay(200); byte reg = 0; Mirf.readRegister( CONFIG, &reg, sizeof(reg) ); Serial.print( "CONFIG = " ); Serial.println(reg,BIN); Mirf.readRegister( SETUP_RETR, &reg, sizeof(reg) ); Serial.print( "SETUP_RETR = " ); Serial.println(reg,BIN); Mirf.readRegister( SETUP_AW, &reg, sizeof(reg) ); Serial.print( "SETUP_AW = " ); Serial.println(reg,BIN); Mirf.readRegister( RF_CH, &reg, sizeof(reg) ); Serial.print( "RF_CH = " ); Serial.println(reg,DEC); Mirf.readRegister( RF_SETUP, &reg, sizeof(reg) ); Serial.print( "RF_SETUP = " ); Serial.println(reg,BIN); Mirf.readRegister( RX_PW_P0, &reg, sizeof(reg) ); Serial.print( "RX_PW_P0 = " ); Serial.println(reg,BIN); } void loop(){ int i; char buff[13]; //receiving bool packet_ok = false; if(Mirf.dataReady()) { Mirf.getData((uint8_t *)buff); for(i=0;i<13;i++) if (buff[i]!=0) packet_ok = true; //if (packet_ok){ Serial.print("> ["); Serial.print(Mirf.getStatus(),DEC); Serial.print("]: "); for(i=0;i<13;i++) Serial.print(buff[i],HEX); Serial.println(); //} } delay(100); })>

 

 

mixir
Offline
Зарегистрирован: 23.11.2013
Как-то коряво запостилось все:
 
Подскажите кто сталкивался со следующей проблемой:
 
При инициализации модуля через библиотеку Mirf сбрасываются все регистры на другие значения.
 
Выставляю конфигурацию, в том числе канал 50 и тп.
И после того как вызываю Mirf.config(); все мои настройки сбрасываются, из регистров читается какая то чушь:
 
CONFIG = 1000
SETUP_RETR = 11
SETUP_AW = 11
RF_CH = 2
RF_SETUP = 1111
RX_PW_P0 = 0
 
Копаясь в библиотеке выяснил что на это влияет бит перехода в режим приема(PRIM_RX)
а именно в строчке (Mirf.cpp:268)
configRegister(CONFIG, mirf_CONFIG | ( (1< Если его убрать то считываются регистры что я установил, но прием не происходит.
 
Вопрос, как заставить все это работать и не сбрасывать мои настройки регистров?
И вообще почему меняются регистры?
 
Пины подключал: CE-6, CSN-5
Плата: MEGA 2560
 
Сам код(должен принимать пакетыот RC пульта):
 
01#include <SPI.h>
02#include <Mirf.h>
03#include <MirfHardwareSpiDriver.h>
04#include <MirfSpiDriver.h>
05#include <nRF24L01.h>
06 
07 
08void setup(){
09   
10  byte addr[] = {0,0,0,0,0};
11   
12  Serial.begin(9600);
13  Mirf.spi = &MirfHardwareSpi;
14  delay(150);
15  Mirf.csnPin = 5; 
16  Mirf.cePin = 6;
17  Mirf.init();
18  delay(150);
19   
20  Mirf.setTADDR(addr);
21  Mirf.setRADDR(addr);
22   
23  Mirf.configRegister(RF_SETUP,0x06);  // 1MHz rate
24  Mirf.configRegister(EN_AA, 0x00);
25  Mirf.configRegister(SETUP_RETR, 0x00);
26  Mirf.configRegister(SETUP_AW, 0x01);
27   
28  Mirf.payload = 13;
29  Mirf.channel = 50; 
30  Mirf.config();
31 
32  delay(200);
33   
34  byte reg = 0;
35  Mirf.readRegister( CONFIG, &reg, sizeof(reg) );
36  Serial.print( "CONFIG = " );
37  Serial.println(reg,BIN);
38  Mirf.readRegister( SETUP_RETR, &reg, sizeof(reg) );
39  Serial.print( "SETUP_RETR  = " );
40  Serial.println(reg,BIN);
41  Mirf.readRegister( SETUP_AW, &reg, sizeof(reg) );
42  Serial.print( "SETUP_AW  = " );
43  Serial.println(reg,BIN);
44  Mirf.readRegister( RF_CH, &reg, sizeof(reg) );
45  Serial.print( "RF_CH  = " );
46  Serial.println(reg,DEC);
47  Mirf.readRegister( RF_SETUP, &reg, sizeof(reg) );
48  Serial.print( "RF_SETUP  = " );
49  Serial.println(reg,BIN);
50  Mirf.readRegister( RX_PW_P0, &reg, sizeof(reg) );
51  Serial.print( "RX_PW_P0  = " );
52  Serial.println(reg,BIN);
53   
54}
55 
56void loop(){
57   
58   
59  int i;
60  char buff[13];
61 
62  //receiving 
63  bool packet_ok = false;
64  if(Mirf.dataReady()) {
65    Mirf.getData((uint8_t *)buff);
66 
67    for(i=0;i<13;i++) if (buff[i]!=0) packet_ok = true;
68 
69    //if (packet_ok){
70    Serial.print("> [");
71    Serial.print(Mirf.getStatus(),DEC);
72    Serial.print("]: ");
73    for(i=0;i<13;i++) Serial.print(buff[i],HEX);
74    Serial.println();
75    //}
76  }
77     
78  delay(100);
79 
80}

 

 

toc
Offline
Зарегистрирован: 09.02.2013

Примеры из этой библиотеки пробовали?
Я использую rf24 от maniacbug. Проблем нет.

mixir
Offline
Зарегистрирован: 23.11.2013

toc пишет:

Примеры из этой библиотеки пробовали?
Я использую rf24 от maniacbug. Проблем нет.

 

Запустил самый первый пример:

 
RF_CH опять 2! Мысль есть что при влючении идет проседание по питанию такое что все флаги сбрасываются в дефолтовые..
mixir
Offline
Зарегистрирован: 23.11.2013

Вообщем припаял конденсатор к питанию, все заработало!