NRF24L0+ Problem

Gast #4788439
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren