This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Advice for simple communication from nrf51822 to nrf24l01 ?

Hi everyone ! I'm trying to send data from an nrf51822 to an nrf24l01 with arduino and I guess I'm doing something wrong...

For the moment I succeeded to have these talking together:

...so I guess the hardware is not the problem :) (if you're curious about the context, the project is explained here: hackster.io/cedric/twi)

I looked for similar problems on the forum but I don't find the solution to my problem, if anyone has a suggestion I would be infinitely grateful ;D

Here is the configuration I use:

nrf51 (TX): radio_config.c main.c

nrf24 (RX) with arduino: Mirf.cpp RX.ino

I used the nrf51 sdk suggestions and an nrf24 library (+datasheets) to understand it, but it doesn't work (yet!), the nrf24 reception pipe stays empty.

Anyone has any suggestion to offer ? Thanks a lot !! ;)

Parents
  • Hi Cedric,

    The nRF51 does not have the enhanced shockburst in hardware anymore, which means that when you send a payload from the nRF51 side, and the L01+ is configured to do auto-ACKing, you will run into issues.

    What I would suggest is that you use the ESB-library on the nRF51 side, and on the nRF24L-side you enable registers:

    • EN_DPL for your pipes.
    • EN_DYN_ACK
    • EN_ACK_PAY

    If you look at the ESB library documentation, there's a section on how the nRF24LE1 should be configured (see the nRFgo SDKs hal_nrf.c file for reference to the calls, its basically the registers I posted): devzone.nordicsemi.com/.../a00139.html

    Best regards Håkon

  • The library I have for the RPi is clearly based on the Arduino one at maniacbug's GitHub repository - though someone has made some tweaks to port it for the RPi. I was convinced I had downloaded it from there but must be mistaken - my bad.

    I have done a text comparison and found that apart from changes required to port to the RPi (minor language differences), there are a few more changes which you could try and replicate in your Arduino library. So aside from setting the EN_DYN_ACK registers as above:

    1. comment out the flush_rx and flush_tx commands near the top of the startListening routine - just above the Go! comment (comments in mine say 'as per gcopeland fork')
    2. Add 150 microsecond delays in the powerDown and powerUp routines after the write_register commands
    3. comment out the powerDown and flush_tx commands from the end of the write routine
    4. comment out the 150 microsecond delay at the start of the startWrite routine
    5. adjust the 15 microsecond delay to 10 microseconds in the startWrite routine (beneath the Allons! comment)

    The ackd=true command in my NRF51 code is safe to remove - it's one of my global vars that's specific to my application (which I didn't define in the code snippet)

Reply
  • The library I have for the RPi is clearly based on the Arduino one at maniacbug's GitHub repository - though someone has made some tweaks to port it for the RPi. I was convinced I had downloaded it from there but must be mistaken - my bad.

    I have done a text comparison and found that apart from changes required to port to the RPi (minor language differences), there are a few more changes which you could try and replicate in your Arduino library. So aside from setting the EN_DYN_ACK registers as above:

    1. comment out the flush_rx and flush_tx commands near the top of the startListening routine - just above the Go! comment (comments in mine say 'as per gcopeland fork')
    2. Add 150 microsecond delays in the powerDown and powerUp routines after the write_register commands
    3. comment out the powerDown and flush_tx commands from the end of the write routine
    4. comment out the 150 microsecond delay at the start of the startWrite routine
    5. adjust the 15 microsecond delay to 10 microseconds in the startWrite routine (beneath the Allons! comment)

    The ackd=true command in my NRF51 code is safe to remove - it's one of my global vars that's specific to my application (which I didn't define in the code snippet)

Children
No Data
Related