dparson55 / NRFLite

nRF24L01+ library with AVR 2 pin support, requiring very little code along with YouTube videos showing all available features.
MIT License
161 stars 26 forks source link

Tx not receiving acknowledgement with NRF24L01+PA+LNA module. Interrupt stopped working in Transmitter side. #44

Closed Dream-Project closed 4 years ago

Dream-Project commented 4 years ago

Transmitter is not receiving acknowledgement. Interrupt stopped working in Transmitter side.

I tried IRQ sample. Receiver is receiving data but the acknowledge is not received by Transmitter. This issue started after taking the release on 8th June 2020.

On Tx side, _radio.hasAckData() is always false.

dparson55 commented 4 years ago

Try adding a 0.1uF capacitor between Vcc and Gnd on both your TX and RX radios. Also, there are some nRF24L01+ PA/LNA high-powered radios that do not work correctly with acknowledgement packets. Someone actually sent me such a radio and sure enough, it did not work with the hardware-based acknowledgement system that these radios support.

I confirmed all is still working fine with two ATmega328's running the IRQ_TX and IRQ_RX examples. The transmitter resports success and if I unplug the receiver, the transmitter begins reporting a failure as expected. If I plug in the receiver again, the transmitter starts reporting success.

The release a couple days ago only included a new method called discardData for #39, so it did not affect any of the sending or receiving logic in NRFLite. If you did another library update or other hardware change, look at those changes instead.

Note the hasAckData method is only used when sending and receiving acknowledgement data packets, not plain acknowledgement packets that contain no data. In order for a transmitter to get data from a receiver, the receiver needs to add an acknowledgement data packet to itself via addAckData. See TwoWayCom_HardwareBased_RX for an example.

Dream-Project commented 4 years ago

I was using 10uf. Do you recommend to change to 0.1uf?

dparson55 commented 4 years ago

10uF is fine as well.

Dream-Project commented 4 years ago

i am trying to build a RC car. For receiving part, instead of loop, i want to use interrupt. is it good approach? does it consume less current than looping?

Just want to let you know. i am using Chinese clone model of NRF24L01+. It was breaking my head for morethan 2 months to make it to work but failed. It worked only with your library. Hats up thanks to you.

dparson55 commented 4 years ago

Using the interrupt will not help with battery life unless you also sleep the microcontroller, which I'm sure you would not want to do. Still though, using the interrupt should work perfectly well, you just need to make sure to use the interrupt examples and slowly make changes to not break anything. I've found interrupt programming to be harder to avoid bugs, but that is just me. Were you able to get the interrupt examples working?

dparson55 commented 4 years ago

Closing the issue, sounds like you're figuring things out.