Инициализация 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 пульта):
 

#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);

}

 

 

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

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

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

toc пишет:

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

 

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

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

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