Forum: Mikrocontroller und Digitale Elektronik NRF24L0+ Problem


von Manga (Gast)


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.

von Manga (Gast)


Lesenswert?

Gelöst!
Es gab ein Problem mit der Auto-Retransmission.

von Lars R. (lrs)


Lesenswert?

Manga schrieb:
> Gelöst!
> Es gab ein Problem mit der Auto-Retransmission.

Welcher Art (ganz grob)

Danke, Lars.

von Manga (Gast)


Lesenswert?

Die Zeit, für das Neu-Senden war zu kurz.
Also mein Fehler.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.