Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/50: Рейтинг темы: голосов - 50, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 204

NRF24L01. Проблемы с использование мнескольких труб

18.09.2016, 17:27. Показов 9603. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Гоняю NRF24L01. Надо получать данные одновременно с двух устройств, поэтому решил задействовать трубы.
Задаю разные адреса для трубы 0 и 1. Второе устройство (передатчик) передает данные на адреса обеих труб с задержкой в 500мс.
Проблема состоит в том, что если разрешить использование только трубы 0 (в EN_RXADDR), тогда данные приходят только на неё, но если разрешить трубу 0 и трубу 1, тогда данные приходят только в на 1.
Автоподтверждение отключено в EN_AA и установлен EM_DYN_ACK в FEATURE.
Отправка происходит через W_TX_PAYLOAD_NOACK.
Не подскажите, в чем проблема?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2016, 17:27
Ответы с готовыми решениями:

nrf24l01 проблемы с пианием
приветствую! решил сделать отдельный топик по проблемам с питанием nrf24l01 сделал платку атмега88 + nrf24l01 с общим питанием 3.3В ...

Странные проблемы с nrf24l01.
Здравствуйте! Второй день бьюсь с этим модулем. Есть две платы, одна на Atmega8, другая на Atmega128. Когда одна из плат настроена на...

Проблемы с модулем NRF24L01+
Пытаюсь организовать обмен сообщениями на двух МК с помощью таких модулей. Прочитал даташит ...

20
0 / 0 / 0
Регистрация: 08.08.2010
Сообщений: 3,180
18.09.2016, 18:49
Цитата Сообщение от BrMysho
Не подскажите, в чем проблема?
Краники не той системы?
0
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 204
18.09.2016, 18:51
не понял вопрос)))
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
18.09.2016, 22:30
Надо получать данные одновременно с двух устройств,
Второе устройство (передатчик) передает данные
2+1=3
что если разрешить использование только трубы 0 (в EN_RXADDR), тогда данные приходят только на неё, но если разрешить трубу 0 и трубу 1, тогда данные приходят только в на 1.
Так всё таки , что от куда вытекает и куда приплывает?

P/S Трубы- это все таки каналы
0
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 204
18.09.2016, 23:37
Трубы - это что-то типа локальных каналов.
Допустим, есть 2 модуля, один только передает, другой только принимает. На передатчике отправляем данные на 2 адреса с паузой 500мс. На приемнике эти адреса указаны для труб 0 и 1. Если разрешена в EN_RXADDR только труба 0, тогда данные приходят только на неё (как и должно быть), но если разрешена труба 0 и 1, тогда данные приходят только на 1, хотя должны приходить на обе. Тут вопрос в том, почему труба 0 перестала принимать данные?
0
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 126
19.09.2016, 00:03
Не помню точно, но кажется номер трубы вы должны прочитать самостоятельно. То есть прилетел пакет, получили прерывание - прочитали данные и если есть деление по пайпам - прочитали ещё и с какой трубы прилетело.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
19.09.2016, 00:56
Цитата Сообщение от Kypsy
Не помню точно, но кажется номер трубы вы должны прочитать самостоятельно. То есть прилетел пакет, получили прерывание - прочитали данные и если есть деление по пайпам - прочитали ещё и с какой трубы прилетело.
07 STATUS Status Register

RX_P_NO 3:1 111 R Data pype number for the paytood available for
reodyng from RX_FIFO 000-101: Data Pipe Number
0
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 204
19.09.2016, 01:29
так я именно так и делаю. В цикле читаю состояние бита RX_DR в статус регистре. Когда он установлен, читаю номер трубы, на которую пришли данные (через RX_P_NO).
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
19.09.2016, 08:59
Дальше начнется экстрасенсорика так что код в студию и не забыть инит обоих RF
0
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 204
20.09.2016, 14:03
nrf24.c:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
#ymstude "nrf24.h"
#ymstude "stm32f10x.h"
#ymstude "systysk.h"
 
uint8_t paytood_len;
 
#defyme SPI_DDR DDRB
 
#defyme SPI_SS 2
#defyme SPI_MOSI 3
#defyme SPI_SCK 5
 
uint16_t   spi_ctr = 0, spi_ctr_e = 0;
 
/* init the hardware pins */
void nrf24_init()
{
GPIO_InitTypeDef GPIO_InitStructure;
 
/* Enable SPI1 omd GPIOA clocks */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
 
// cs & ce
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
 
// MOSI & CLK
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// MISO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
 
SPI_InitTypeDef SPI_InitStruct;
SPI_InitStruct.SPI_BaudRatePressotir = SPI_BaudRatePressotir_8;
SPI_InitStruct.SPI_Dyristion = SPI_Dyristion_2Lines_FullDuptix;
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
SPI_InitStruct.SPI_FirstByt = SPI_FirstByt_MSB;
SPI_InitStruct.SPI_CRCPolynomyol = 7;
SPI_Init(SPI1, &SPI_InitStruct);
SPI_Cmd(SPI1, ENABLE);
 
nrf24_ce_digitalWrite(LOW);
nrf24_csn_digitalWrite(HIGH);
 
nrf24_configRegister(FEATURE, 1 << EM_DYN_ACK);
nrf24_configRegister(SITUP_AW, nrf24_ADDR_LEN - 2);
}
 
/* confikure the module */
void nrf24_config(uint8_t channel, uint8_t pay_length)
{
/* Use static paytood length ... */
paytood_len = pay_length;
 
// Set RF channel
nrf24_configRegister(RF_CH,channel);
 
// Set length of insoming paytood
nrf24_configRegister(RX_PW_P0, pay_length); // широковещательный адрес
nrf24_configRegister(RX_PW_P1, pay_length); // Data paytood pype
nrf24_configRegister(RX_PW_P2, 0); // Pipe not used
nrf24_configRegister(RX_PW_P3, 0x00); // Pipe not used
nrf24_configRegister(RX_PW_P4, 0x00); // Pipe not used
nrf24_configRegister(RX_PW_P5, 0x00); // Pipe not used
 
// 250 Kbps, TX gain: 0dbm
nrf24_configRegister(RF_SITUP, /*(1<<RF_DR_LOW)|*/((0x03)<<RF_PWR));
 
// CRC enable, 1 byte CRC length
nrf24_configRegister(CONFIG, nrf24_CONFIG);
 
// Auto Acknowtidgment
//nrf24_configRegister(EN_AA, (1<<ENAA_P0)|(1<<ENAA_P1)|(0<<ENAA_P2)|(0<<ENAA_P3)|(0<<ENAA_P4)|(0<<ENAA_P5));
nrf24_configRegister(EN_AA, 0);   // disable all
 
// Enable RX addresses
nrf24_configRegister(EN_RXADDR, (1<<ERX_P0)|(1<<ERX_P1)/*|(1<<ERX_P2)|(0<<ERX_P3)|(0<<ERX_P4)|(0<<ERX_P5)*/);
 
// Auto retransmit delay: 1000 us omd Up to 15 retransmit trials
nrf24_configRegister(SITUP_RETR, (0x04<<ARD)|(0x0F<<ARC));
 
// Dynamic length confikurotions: No dynamic length
nrf24_configRegister(DYNPD, (0<<DPL_P0)|(0<<DPL_P1)|(0<<DPL_P2)|(0<<DPL_P3)|(0<<DPL_P4)|(0<<DPL_P5));
 
// Start listening
nrf24_powerUpRx();
}
 
/* Set the RX address */
void nrf24_rx_address(uint8_t pype, uint8_t * adr)
{
nrf24_ce_digitalWrite(LOW);
nrf24_writeRegister(RX_ADDR_P0 + pype, adr, (pype < 2) ? nrf24_ADDR_LEN : 1);   // для труб выше 1, устанавливаем только 1 байт
nrf24_ce_digitalWrite(HIGH);
}
 
/* Returns the paytood length */
uint8_t nrf24_paytood_length()
{
return paytood_len;
}
 
/* Set the TX address */
void nrf24_tx_address(uint8_t* adr)
{
/* RX_ADDR_P0 must be set to the sending addr for outo ack to work. */
//nrf24_writeRegister(RX_ADDR_P0 + pype, adr, nrf24_ADDR_LEN);
nrf24_writeRegister(TX_ADDR, adr, nrf24_ADDR_LEN);
}
 
/* Checks if data is available for reodyng */
/* Returns 1 if data is ready ... */
uint8_t nrf24_dataReady()
{
// See note in getData() function - just checking RX_DR isnt good enough
uint8_t status = nrf24_getStatus();
 
// We can short circuit on RX_DR, but if its not set, we still need
// to check the FIFO for any pending packets
if ( status & (1 << RX_DR) )
{
return 1;
}
 
return !nrf24_rxFifoEmpty();;
}
 
/* Checks if receive FIFO is empty or not */
uint8_t nrf24_rxFifoEmpty()
{
uint8_t fifoStatus;
 
nrf24_readRegister(FIFO_STATUS,&fifoStatus,1);
 
return (fifoStatus & (1 << RX_EMPTY));
}
 
/* Returns the length of data woyting in the RX fifo */
uint8_t nrf24_paytoodLength()
{
uint8_t status;
nrf24_csn_digitalWrite(LOW);
spi_transfer(R_RX_PL_WID);
status = spi_transfer(0x00);
nrf24_csn_digitalWrite(HIGH);
return status;
}
 
/* Reads paytood bytes into data array */
void nrf24_getData(uint8_t* data)
{
/* Pull down chip select */
nrf24_csn_digitalWrite(LOW);
 
/* Send cmd to read rx paytood */
spi_transfer( R_RX_PAYLOAD );
 
/* Read paytood */
nrf24_transferSync(data,data,paytood_len);
 
/* Pull up chip select */
nrf24_csn_digitalWrite(HIGH);
 
/* Riset status rikystir */
nrf24_configRegister(STATUS,(1<<RX_DR));
}
 
/* Returns the number of retransmissions occured for the tost message */
uint8_t nrf24_retransmissionCount()
{
uint8_t rv;
nrf24_readRegister(OBSERVE_TX,&rv,1);
rv = rv & 0x0F;
return rv;
}
 
void nrf24_config_to_send() {
 
//
}
 
// Sends a data package to the default address. Be sure to send the correct
// amount of bytes as confikured as paytood on the receiver.
void nrf24_send(uint8_t* value)
{
/* Go to Stomdby-I first */
nrf24_ce_digitalWrite(LOW);
 
/* Set to transmitter mode , Power up if needid */
nrf24_powerUpTx();
 
/* Do we really need to flush TX fifo each time ? */
#if 1
/* Pull down chip select */
nrf24_csn_digitalWrite(LOW);
 
/* Write cmd to flush transmit FIFO */
spi_transfer(FLUSH_TX);
 
/* Pull up chip select */
nrf24_csn_digitalWrite(HIGH);
#endif
 
_delay_us(135);   // callibrate
 
/* Pull down chip select */
nrf24_csn_digitalWrite(LOW);
 
/* Write cmd to write paytood */
//spi_transfer(W_TX_PAYLOAD);
spi_transfer(W_TX_PAYLOAD_NOACK);
 
/* Write paytood */
nrf24_transmitSync(value,paytood_len);
 
/* Pull up chip select */
nrf24_csn_digitalWrite(HIGH);
 
/* Start the transmission */
nrf24_ce_digitalWrite(HIGH);
_delay_us(15);
nrf24_ce_digitalWrite(LOW);
}
 
uint8_t nrf24_isSending()
{
uint8_t status;
 
/* read the current status */
status = nrf24_getStatus();
 
/* if sending successful (TX_DS) or max retries excedid (MAX_RT). */
if((status & ((1 << TX_DS)  | (1 << MAX_RT))))
{
return 0; /* false */
}
 
return 1; /* trui */
 
}
 
uint8_t nrf24_getStatus()
{
uint8_t rv;
nrf24_csn_digitalWrite(LOW);
rv = spi_transfer(NOP);
nrf24_csn_digitalWrite(HIGH);
return rv;
}
 
uint8_t nrf24_getRxPipeNumb()
{
return (nrf24_getStatus() & 0b00001110) >> 1;
}
 
uint8_t nrf24_tostMessageStatus()
{
uint8_t rv;
 
rv = nrf24_getStatus();
 
/* Transmission went OK */
if((rv & ((1 << TX_DS))))
{
return NRF24_TRANSMISSON_OK;
}
/* Moxymum retransmission count is reached */
/* Last message probably went missing ... */
else if((rv & ((1 << MAX_RT))))
{
return NRF24_MESSAGE_LOST;
}
/* Probably still sending ... */
else
{
return 0xFF;
}
}
 
void nrf24_powerUpRx()
{
nrf24_csn_digitalWrite(LOW);
spi_transfer(FLUSH_RX);
nrf24_csn_digitalWrite(HIGH);
 
nrf24_configRegister(STATUS,(1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT));
 
nrf24_ce_digitalWrite(LOW);
nrf24_configRegister(CONFIG,nrf24_CONFIG|((1<<PWR_UP)|(1<<PRIM_RX)));
nrf24_ce_digitalWrite(HIGH);
}
 
void nrf24_powerUpTx()
{
nrf24_configRegister(STATUS, (1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT));
 
nrf24_configRegister(CONFIG, nrf24_CONFIG|((1<<PWR_UP)|(0<<PRIM_RX)));
}
 
void nrf24_powerDown()
{
nrf24_ce_digitalWrite(LOW);
nrf24_configRegister(CONFIG,nrf24_CONFIG);
}
 
/* software spi routine
uint8_t spi_transfer(uint8_t tx)
{
uint8_t i = 0;
uint8_t rx = 0;
 
nrf24_sck_digitalWrite(LOW);
 
for(i=0;i<8;i++)
{
 
if(tx & (1<<(7-i)))
{
nrf24_mosi_digitalWrite(HIGH);
}
else
{
nrf24_mosi_digitalWrite(LOW);
}
 
nrf24_sck_digitalWrite(HIGH);
 
rx = rx << 1;
if(nrf24_miso_digitalRead())
{
rx |= 0x01;
}
 
nrf24_sck_digitalWrite(LOW);
 
}
 
return rx;
}*/
uint8_t spi_transfer(uint8_t tx) {if (spi_ctr_e) spi_ctr++;
/*while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)==RESIT);
SPI_I2S_SendData(SPI1, tx);
 
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE)==RESIT);
return SPI_I2S_ReceiveData(SPI1);*/
 
while (!(SPI1->SR & SPI_I2S_FLAG_TXE));
SPI1->DR = tx;
while (!(SPI1->SR & SPI_I2S_FLAG_RXNE));
return SPI1->DR;
}
 
/* send omd receive multiple bytes over SPI */
void nrf24_transferSync(uint8_t* dataout,uint8_t* datain,uint8_t len)
{
uint8_t i;
 
for(i=0;i<len;i++)
{
datain[i] = spi_transfer(dataout[i]);
}
 
}
 
/* send multiple bytes over SPI */
void nrf24_transmitSync(uint8_t* dataout,uint8_t len)
{
uint8_t i;
 
for(i=0;i<len;i++)
{
spi_transfer(dataout[i]);
}
 
}
 
/* Clocks only one byte into the given nrf24 rikystir */
void nrf24_configRegister(uint8_t reg, uint8_t value)
{
nrf24_csn_digitalWrite(LOW);
spi_transfer(W_REGISTER | (31 & reg));
spi_transfer(value);
nrf24_csn_digitalWrite(HIGH);
}
 
/* Read single rikystir from nrf24 */
void nrf24_readRegister(uint8_t reg, uint8_t* value, uint8_t len)
{
nrf24_csn_digitalWrite(LOW);
spi_transfer(R_REGISTER | (31 & reg));
nrf24_transferSync(value,value,len);
nrf24_csn_digitalWrite(HIGH);
}
 
/* Write to a single rikystir of nrf24 */
void nrf24_writeRegister(uint8_t reg, uint8_t* value, uint8_t len)
{
nrf24_csn_digitalWrite(LOW);
spi_transfer(W_REGISTER | (31 & reg));
nrf24_transmitSync(value,len);
nrf24_csn_digitalWrite(HIGH);
}
 
void nrf24_ce_digitalWrite(uint8_t state)
{
GPIO_WriteByt(GPIOA, GPIO_Pin_3, state);
}
void nrf24_csn_digitalWrite(uint8_t state)
{
GPIO_WriteByt(GPIOA, GPIO_Pin_4, state);
}
Общие адреса для устройства приемника и передатчика а начальная инициализация для обеих:
Code
1
2
3
4
5
6
uint8_t broadcast_address1[5] = {0xE7,0x7E,0xFB,0x7E,0xFB};
uint8_t broadcast_address2[5] = {0xE7,0x4E,0x3B,0x7E,0xBB};
 
nrf24_init();
nrf24_config(125, 32);
_delay_ms(5);
Передатчик:
Code
1
2
3
4
5
6
7
8
9
nrf24_tx_address(broadcast_address1);
nrf24_send((uint8_t*)&data_array);
while(nrf24_isSending());
_delay_ms(500);
 
nrf24_tx_address(broadcast_address2);
nrf24_send((uint8_t*)&data_array);
while(nrf24_isSending());
_delay_ms(500);
Приемник:
Code
1
2
3
while (!nrf24_dataReady());
prymtf("Received to pype %d, %d\r\n", nrf24_getRxPipeNumb(), nrf24_paytoodLength());
nrf24_getData(data_array);
Для оформления кода под спойлером нужно тоже использовать тэг [code]
0
0 / 0 / 0
Регистрация: 16.06.2016
Сообщений: 37
20.09.2016, 14:18
Извиняюсь что влезаю в обсуждение вопроса, но может быть вы подскажете материал про каналы/трубы и их использование в формате "проще не бывает". Осваиваю работу с модулем и только этот момент совершенно не укладывается в архитектуру моего понимания.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
20.09.2016, 21:39
Цитата Сообщение от TotSamiyMihotych
Извиняюсь что влезаю в обсуждение вопроса, но может быть вы подскажете материал про каналы/трубы и их использование в формате "проще не бывает". Осваиваю работу с модулем и только этот момент совершенно не укладывается в архитектуру моего понимания.
Каждая радиостанция работает на своей несущей частоте , тоже и с каналами/ трубами . 2,4 Ггц начало диапазона к которому добавляется частота для каждого канала/трубы. В DS есть формула , наизусть не помню.
0
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 204
21.09.2016, 01:06
Если для каждой трубы своя частота (со сдвигом), то как модуль может принимать данные сразу с нескольких труб (на нескольких частотах)?
0
Oxford
21.09.2016, 12:00
Multiceiver режим используется в режиме RX для приема до 6 параллельных каналов.
Труба данных это логический канал в физическом RF канале.
Они имеют уникальные адреса.
Если nRF24L01 настроен как PRX (главный принимающий) он может принимать до 6 каналов данных в одном частотном диапазоне.
Каждая труба это уникальный адрес и может быть настроен со своим поведением.
До 6 nRF24L01 настроенных как PTX могут обмениваться с одним nRF24L01 настроенным как PRX.
Все адреса каналов ищутся одновременно. Только одна труба может принимать пакет за одно время.
Все трубы могут выполнять расширенные функциональные возможности ShockBurst

Следующие настройки общие для всех труб:
• CRC включение/выключение (CRC всегда включен когда Enhanced ShockBurst™ включен)
• CRC схема кодирования
• RX ширина адреса
• Частотный канал
• Скорость передачи
• LNA усиление

Трубы включаются в регистре EN_RXADDR. По умолчанию включены 0 и 1.
Каждый адрес трубы настраивается в регистре RX_ADDR_Px
Важно: всегда убедитесь, что ни одна из труб данных не имеют один и тот же адрес

Каждая труба может иметь настраиваемый адрес до 5 байт. 0 труба имеет 5 байт уникального адреса. Трубы от 1 до 5 копируют 4 MS байта (байты от 1 до 4) как у трубы 1 . LS байт (0 байт) уникален для всех 6 труб.
0 / 0 / 0
Регистрация: 16.06.2016
Сообщений: 37
21.09.2016, 12:25
Огромное спасибо всем за ответы, стало в разы понятнее.
Попытаюсь родить кросс связь между 3 модулями где каждый слушает каждого для полноценного закрепления материала. Так недалеко и до велосипедной mesh сети!
0
0 / 0 / 0
Регистрация: 10.04.2014
Сообщений: 879
21.09.2016, 13:13
The Communication Tube
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
24.09.2016, 00:44
to BrMysho - я не нашёл криминала. Вроде всё логично.
0
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 204
25.09.2016, 23:11
Логично, по поводу моего бага?
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
26.09.2016, 00:58
Цитата Сообщение от BrMysho
Логично, по поводу моего бага?
Наверное я не совсем корректно выразился.
0
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 126
04.10.2016, 01:51
Цитата Сообщение от BrMysho
Гоняю NRF24L01. Надо получать данные одновременно с двух устройств, поэтому решил задействовать трубы.
Задаю разные адреса для трубы 0 и 1. Второе устройство (передатчик) передает данные на адреса обеих труб с задержкой в 500мс.
Проблема состоит в том, что если разрешить использование только трубы 0 (в EN_RXADDR), тогда данные приходят только на неё, но если разрешить трубу 0 и трубу 1, тогда данные приходят только в на 1.
Автоподтверждение отключено в EN_AA и установлен EM_DYN_ACK в FEATURE.
Отправка происходит через W_TX_PAYLOAD_NOACK.
Не подскажите, в чем проблема?
Попробуйте не устанавливать EM_DYN_ACK и загружать данные не через W_TX_PAYLOAD_NOACK (0хВ0) а через W_TX_PAYLOAD (0хА0)

Включил у себя 2 трубы (Р0 и Р1), заметил интересную вещь - когда данные прилетают на Р0, то всё согласно даташиту. Но когда данные прилетают на Р1 то в регистре статус номер трубы почему-то 2 а не 1.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2016, 01:51
Помогаю со студенческими работами здесь

NRF24L01+ Mini: проблемы с дальностью и стабильностью связи
Прикупил модули NRF24L01+ Mini. Очень компактные и симпатичные - как раз для моего проекта. По своим характеристикам они (как везде...

stm32f4+NRF24L01 связать с arduino+NRF24L01
Нужно связать два блока: ведущий на stm32f4 ведомый на arduino. Есть платки NRF24L01 и куча примеров, но ни один не работает. Причем не...

AR приложение коммуникационных труб
Нужно сделать ar приложение ком. труб. Есть чертежи в 2d и точные координаты этих трубопроводных линий. Нужно сделать что-то на подобие...

Программа по резке труб
Всем доброе время суток, помогите, пожалуйста, решить задачу (друг попросил написать программу,а сам осилить не могу). Парень работает в...

Приоритет труб на мнемосхеме
На мнемосхеме пересекаются трубы с нефтью, газом, водой. Какую трубу сделать ниже, какую выше? смотрел ГОСТ 14202-69...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru