Инициализация 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); })>
01
#include <SPI.h>
02
#include <Mirf.h>
03
#include <MirfHardwareSpiDriver.h>
04
#include <MirfSpiDriver.h>
05
#include <nRF24L01.h>
06
07
08
void
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, ®,
sizeof
(reg) );
36
Serial
.print(
"CONFIG = "
);
37
Serial
.println(reg,BIN);
38
Mirf.readRegister( SETUP_RETR, ®,
sizeof
(reg) );
39
Serial
.print(
"SETUP_RETR = "
);
40
Serial
.println(reg,BIN);
41
Mirf.readRegister( SETUP_AW, ®,
sizeof
(reg) );
42
Serial
.print(
"SETUP_AW = "
);
43
Serial
.println(reg,BIN);
44
Mirf.readRegister( RF_CH, ®,
sizeof
(reg) );
45
Serial
.print(
"RF_CH = "
);
46
Serial
.println(reg,DEC);
47
Mirf.readRegister( RF_SETUP, ®,
sizeof
(reg) );
48
Serial
.print(
"RF_SETUP = "
);
49
Serial
.println(reg,BIN);
50
Mirf.readRegister( RX_PW_P0, ®,
sizeof
(reg) );
51
Serial
.print(
"RX_PW_P0 = "
);
52
Serial
.println(reg,BIN);
53
54
}
55
56
void
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
}
Примеры из этой библиотеки пробовали?
Я использую rf24 от maniacbug. Проблем нет.
Примеры из этой библиотеки пробовали?
Я использую rf24 от maniacbug. Проблем нет.
Запустил самый первый пример:
Вообщем припаял конденсатор к питанию, все заработало!