Are you getting the TX_DS interrupt when you transmit a packet from the TX unit? If not, you have no shot at communication. That’s the first thing to test once you are sure you can communicate to the 24L01 over SPI. Initially, this should be done with all of the Enhanced Shockburst functions turned off so you’re not relying on auto-ack/auto-retransmit.
The one obvious mistake I see is that the PWR_UP bit in the CONFIG register (bit 1 of register 0) is not set. I’m surprised you even got the TX_DS interrupt with this bit cleared.
Did you configure the RX_PW_P* register for the pipe you’re receiving on (it looks like you’re using pipe 0, so it would be RX_PW_P0, register 0x11)? If you don’t, its default width is 0, which means that the pipe is disabled for receiving. The value of this register must match exactly the number of bytes you send in the payload from the TX (unless you have dynamic payload length enabled).
Megazoom:
The Hex values are the values that i put in the register next to it.
The Hex values aren’t the address of the register.
I understand that. I didn't see a value for that register in your table when I wrote my last post.
Have you tried switching the two units to check to see if they both at least have the capacity to transmit (and verified that on the spectrum analyzer)? If they both can transmit at relatively equal levels as measured by your analyzer, then the problem is almost certainly not hardware (unless the RF receiver circuitry is burned out on one or both of your modules).
Those measurements would indicate that the separation is around 9 MHz, which would possibly explain why your devices aren’t working. You could always try changing the RF channel on the TX unit until you can get the other to receive packets.
The only thing I’m not sure about is where you said,
Megazoom:
at the end we set the POWER UP
For transmitter is this A = 1010 where POWER UP = 1
For Receiver is this B = 1011 Where POWER UP = 1
You do have to make sure you leave at least 1.5 ms from the time you set this bit until you try to send or receive anything. There is also a delay of 120 us required from when you bring CE high at the receiver.
My other suggestion is to just try using as many default settings as possible to rule out writing registers incorrectly.
We tried to switch channel at transmitter side continously so there must be a packet that gets through, and get caught by the receiver.We also poll the Carry Detect continously at receiver side and somethimes we have a CD = 1.This happens also when we are not sending with the transmitter so it seems we have interference from another device. Right?
We also tried communication with as much default values in the registers of the Nordic as possible. Still no luck…
Does anyone have anymore tips or suggestions to try?
You should be able to look through the RF spectrum on your analyzer and find a frequency range that is pretty quiet. Try sending receiving on that channel (hopefully you won’t see CD set when you’re not transmitting).
Other than that, I don’t have much more to offer. I know that my include library for the 24L01 works, as do my tutorials. You could try porting my code to your particular architecture and see if it works for you. It’s available on my website.