Инициализация NRF24L01+ 2.4Ghz
- Войдите на сайт для отправки комментариев
Доброго времени суток! Подскажите кто сталкивался со следующей проблемой: При инициализации модуля через библиотеку 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, ®, sizeof(reg) ); Serial.print( "CONFIG = " ); Serial.println(reg,BIN); Mirf.readRegister( SETUP_RETR, ®, sizeof(reg) ); Serial.print( "SETUP_RETR = " ); Serial.println(reg,BIN); Mirf.readRegister( SETUP_AW, ®, sizeof(reg) ); Serial.print( "SETUP_AW = " ); Serial.println(reg,BIN); Mirf.readRegister( RF_CH, ®, sizeof(reg) ); Serial.print( "RF_CH = " ); Serial.println(reg,DEC); Mirf.readRegister( RF_SETUP, ®, sizeof(reg) ); Serial.print( "RF_SETUP = " ); Serial.println(reg,BIN); Mirf.readRegister( RX_PW_P0, ®, 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); })>
Примеры из этой библиотеки пробовали?
Я использую rf24 от maniacbug. Проблем нет.
Примеры из этой библиотеки пробовали?
Я использую rf24 от maniacbug. Проблем нет.
Запустил самый первый пример:
Вообщем припаял конденсатор к питанию, все заработало!