Radio Receiver Blocks Transmitter (or vice versa)

Dear members of the forum,

It seems have run into some unidentified collision issues with this radio modules:

I have following environment: Arduino "A" with mentioned radio transmitter and receiver on borad. Arduino "B" with the same radio transmitter and receiver and the button.

What I'm doing: I'm running sketch on Arduino "A" which generates continuous flow of binary code which is being sent via transmitter (and represented in serial monitor). Also this sketch is configured to be interrupted if the receiver on Arduino "A" receives something (and this also must be represented in serial monitor).

I'm running sketch on Arduino "B" which receives that continuous flow of binary code from Arduino "A" (and this is represented in serial monitor). Also this sketch is configured to send some binary code when button is pressed (and this also must be represented in serial monitor).

I'm facing followiong issue: When I'm pressing the button on Arduino "B", I can not see any reaction in the serial monitor neither on Arduino "A" nor on Arduino "B". So now I'm wondering whether receiver on Arduino "B" blocks the transmitter to send anything or vice versa on Arduino "A".

I have already spent many hours of researching on the Internet and found similar post here on Arduino forum. Though so far I have not managed to shed a light on my problem.

Also I'm wondering in what direction I should proceed digging. Is this SW issue or this is HW nature of Arduino? Is there any workaround?

I would very appreciate any help/advice/suggestion from your side.

Thank you in advance!

Is this SW issue

Who can tell? Not us.

Sure, you are right, this may sound like a stupid question because SW is my creature ) Also I have not provided my SW sketch so far. I'm just wondering whether this is HW issue. If Arduino should work ok with simultaneous sending and receiving on HW level then I would make a conclusion that it is SW issue ). I would be glad for any comments since this is real PITA for me now.

What frequencies do your modules transmit/receive on? Are they all the same, or different?

If you want to transmit from each of the Arduinos and receive on the other one, the you need to use 2 different frequencies.

Arduino A has to transmit on one frequency, and Arduino B has to receive that frequency. Arduino B has to transmit on the other frequency, and Arduino A has to receive that frequency.

Arduino A has to transmit on one frequency, and Arduino B has to receive that frequency. Arduino B has to transmit on the other frequency, and Arduino A has to receive that frequency.

I can't believe we are actually explaining this... I think a good question would be "are all those radios shipped with the same frequency and is there any way to configure them ?

I cant imagine that the frequencies are software configurable.

I would think that you need to buy different variants to get different operating frequencies.

The transmitter in the photograph clearly has it's operating frequency, 433.92 MHz marked on the can of the IC.

Hi JohnLincoln,

Thanks a lot for tuning into the discussion!

You are right, two pairs of sender and receiver must be deviated by frequency. And this is one of the main principles of full duplex transceivers. It is my bad because it seems I forgot about this.

However the main question remains the same.

As far as I can't see any reaction in the serial monitor of Arduino "B" when I'm pushing the button to transmit something, I can make a conclusion that transmitter can not be activated while receiver is running.

So I'm just wondering whether it is true or not?

I will have to use oscilloscope or LED connected to the transmitter pin on Arduino "B" in order to make sure it is senting something or not while receiving...

As I mentioned before, I found similar post on Arduino forum. That is why I'm very curious if it may be Arduino's nature?

433 Mhz channels

What I'm doing: I'm running sketch on Arduino "A" which generates continuous flow of binary code which is being sent via transmitter (and represented in serial monitor). Also this sketch is configured to be interrupted if the receiver on Arduino "A" receives something (and this also must be represented in serial monitor).

Are you sending & receiving using VirtualWire? That library can only do one or the other, I've never seen any posts where someone got both to work at the same time. Or some other code?

VirtualWire has been updated to Radiohead http://www.airspayce.com/mikem/arduino/RadioHead/ I don't know if it has the same limitation.

CrossRoads: Are you sending & receiving using VirtualWire? That library can only do one or the other, I've never seen any posts where someone got both to work at the same time. Or some other code?

VirtualWire has been updated to Radiohead http://www.airspayce.com/mikem/arduino/RadioHead/ I don't know if it has the same limitation.

I'm using RadioHead. I also do not know whether it supports simultaneous send/receive. I have to run a couple tests today with a few boards. I will post results here...

The test was following: Arduino "A" is sending to Arduino "B" permanently. Arduino "B" is processing the captured signal. Arduino "C" also does have the receiver but it does not process the signal because it is not intended for Arduino "C" .

At the same time if we take the multimeter and connect it to the receiver's data pin on Arduino "C" we can see permanent stable level (aboput 1,3 V). Ofcourse this is from Arduino "A".

Then I'm pressing a button on Arduino "B" which stops receiving and sarts sending the signal intended only for Arduino "C". At this moment we can see that previously mentioned stable level is increased by ~0,3V. So we can see ~1,6 V in total which means signals interference. Arduino "C" is not processing anything though sometimes it captures 1-2 packets from Arduino "B". And only if I disconnect the power from Arduino "A" then Arduino "C" starts processing stable signal from Arduino "B".

Conclusion: Colleagues, you were right. Simultaneous sending and receiving with this kind of module is IMPOSSIBLE. It is impossible to build complicated radio network using mentioned modules because they are working on the same frequency. And in some period of time they are supressing each other. It is actually possible in Half-Duplex mode only.

Now I've got a few nRF24L01 and started testing. I will get back as soon as I have reasonable results.

Certainly there is a "work around" and it is only software. Both devices are on the same frequency.

You need to develop a polling protocol where one unit is a master and polls the second to see if it can receive. If it can receive, then the master sends the binary data. The slave should acknowledge the message. When the master receives the slaves acknowledgement it can send another binary message, etc.

Extend your protocol to allow for the slave sending data if you need to.

Gets complicated, but has been done for many decades. Look up point-to-point protocols and polling protocols used in land line computer communications.

Paul

It's called "Hand-Shaking"