Hallo,
ich versuche gerade 2 NRF24L0+ Boards zum Laufen zu bekommen.
Ein Board ist der Sender, das andere der Empfänger.
Ich hab beide mit einem zusätzlichen Kondensator ausgestattet (47uF).
Der Empfänger wird wie folgt betrieben:
1 | nrf_set_ce(NRF_CE_RX); //Set High
|
2 |
|
3 | nrf_start_write_register(0x00);
|
4 | spi_send_byte((1<<6)|(1<<1)|(1<<0)); //RX Interrupt,PRX mode, Wake UP
|
5 | spi_css(SPI_SLAVE_DESELECT);
|
6 |
|
7 |
|
8 | nrf_start_write_register(0x01);
|
9 | spi_send_byte((1<<0)); //Auto Ack
|
10 | spi_css(SPI_SLAVE_DESELECT);
|
11 |
|
12 |
|
13 | nrf_start_write_register(0x02);
|
14 | spi_send_byte((1<<0)); //Enable Pipeline
|
15 | spi_css(SPI_SLAVE_DESELECT);
|
16 |
|
17 |
|
18 | nrf_start_write_register(0x03);
|
19 | spi_send_byte(0x01); //3Byte Adress
|
20 | spi_css(SPI_SLAVE_DESELECT);
|
21 |
|
22 | nrf_start_write_register(0x05);
|
23 | spi_send_byte(40); //RF Channel
|
24 | spi_css(SPI_SLAVE_DESELECT);
|
25 |
|
26 | nrf_start_write_register(0x06);
|
27 | spi_send_byte((1<<5)|(00<<1)); //250kbps; RF Power
|
28 | spi_css(SPI_SLAVE_DESELECT);
|
29 |
|
30 | nrf_start_write_register(0x11);
|
31 | spi_send_byte(0x1);//Payload number of bytes
|
32 | spi_css(SPI_SLAVE_DESELECT);
|
33 |
|
34 | nrf_start_write_register(0x10);
|
35 | spi_send_byte(0xE7);//TX Adress
|
36 | spi_send_byte(0xE7);//TX Adress
|
37 | spi_send_byte(0xE7);//TX Adress
|
38 | spi_css(SPI_SLAVE_DESELECT);
|
39 |
|
40 | nrf_start_write_register(0x0A);
|
41 | spi_send_byte(0xE7);//RX Adress
|
42 | spi_send_byte(0xE7);//RX Adress
|
43 | spi_send_byte(0xE7);//RX Adress
|
44 | spi_css(SPI_SLAVE_DESELECT);
|
Sender:
1 | nrf_set_ce(NRF_CE_RX);//CE High for transmit
|
2 |
|
3 | nrf_start_write_register(0x00);
|
4 | spi_send_byte((1<<5)|(1<<1)); //RX Interrupt,PTX mode
|
5 | spi_css(SPI_SLAVE_DESELECT);
|
6 |
|
7 | nrf_start_write_register(0x01);
|
8 | spi_send_byte((1<<0)); //Auto Ack
|
9 | spi_css(SPI_SLAVE_DESELECT);
|
10 |
|
11 |
|
12 | nrf_start_write_register(0x03);
|
13 | spi_send_byte(0x01); //3Byte Adress
|
14 | spi_css(SPI_SLAVE_DESELECT);
|
15 |
|
16 | nrf_start_write_register(0x05);
|
17 | spi_send_byte(40); //RF Channel
|
18 | spi_css(SPI_SLAVE_DESELECT);
|
19 |
|
20 | nrf_start_write_register(0x06);
|
21 | spi_send_byte((1<<5)|(00<<1)); //250kbps; RF Power
|
22 | spi_css(SPI_SLAVE_DESELECT);
|
23 |
|
24 | nrf_start_write_register(0x11);
|
25 | spi_send_byte(0x1);//RF Payload number
|
26 | spi_css(SPI_SLAVE_DESELECT);
|
27 |
|
28 | nrf_start_write_register(0x10);
|
29 | spi_send_byte(0xE7);//TX Adress
|
30 | spi_send_byte(0xE7);//TX Adress
|
31 | spi_send_byte(0xE7);//TX Adress
|
32 | spi_css(SPI_SLAVE_DESELECT);
|
33 |
|
34 | nrf_start_write_register(0x0A);
|
35 | spi_send_byte(0xE7);//RX Adress
|
36 | spi_send_byte(0xE7);//RX Adress
|
37 | spi_send_byte(0xE7);//RX Adress
|
38 | spi_css(SPI_SLAVE_DESELECT);
|
Senden eines Bytes
1 | spi_css(SPI_SLAVE_SELECT);
|
2 | spi_send_byte(NRF_W_TX_PAYLOAD); //0xA0
|
3 | spi_send_byte(0x01);
|
4 | spi_css(SPI_SLAVE_DESELECT);
|
5 |
|
6 |
|
7 |
|
8 | nrf_set_ce(NRF_CE_TX); //High
|
9 | timer_delay_ms(2);
|
10 | nrf_set_ce(NRF_CE_RX); //Low
|
Empfangen:
Durch NOP-> liefert 0x0E = keine RX Daten
Das SPI Timing stimmt, habe ich durch Logic Analyzer kontrolliert.
Beim Sender erhalte ich das Status-Byte 0x1F = Kein Rx, TX Buff voll,
Maximum of retransmits
Ich habe keine Ahnung mehr wo der Fehler liegen könnte.
Die Boards sind vieleicht 50cm auseinander.
Vielen vielen Dank schon im vorraus.