Unidirectional Wireless RF Transmitting & Receiving
Digital in, digital out, with no wires!!! Yes, it can be that easy but there are some things you will find out about going wireless that you may not have counted with wired connection.
This application note will guide you through a simple RS232 link and illustrate how easy these devices are to use as long as you know how to handle a couple wireless phenomenon and plan your project to take these into account.
In Figure 1 below, we have illustrated the simplest RS232 link possible. It links a computer to a microcontroller using the 418/433MHz transmitter and the 418/433MHz receiver.
This circuit will work with most computer's RS232 ports because most use standard digital voltage levels to determine if a signal is a "1" or a "0".
Figure 1: Simplest RF circuit (power & ground not shown).
In this example, we'll say the microcontroller is transmitting a packet of data with some sort of information. Something like:
<device ID><data byte 1><data byte 2><data byte 3><data byte 4><data byte 5>
Let's also put some ASCII readable data in the packet. Something like:
If a simple terminal program was used on the computer, one might see something like the following:
@#23lk 23 @# __(*& A12345 #@@23@#44
The information we are transmitting is seen but it is surrounded by garbage data. This garbage data is simply static the receiver is picking up, just as you pick up static on a television channel where there is no transmission. The transmitter only transmits the "1"s in your data packet. "0"s are simply periods of no transmission. The receiver is able to tell a "1" from a "0" when transmitted closely together but at other times, the receiver will try to make out data when there is none. Although this may seem counterproductive, it gives a much greater transmission distance since the receiver can constantly adjusts its gain, looking for data even when the signal is very weak.
One way of overcoming the static is to simply add a few unique bytes to the first of the packet that will identify good data to the program running on the computer.
This is sometimes called a "header". For example, let's change our packet to be:
Now the computer would see something like:
@#23lk 23 @# __(*& RFRFA12345 #@@23@#44
It would be simple for a program to look for the "RFRF" pattern and then read in the device ID and data from within the packet.
This technique should work fine for many applications but we would also like to suggest using some sort of error detection and/or correction scheme that will ensure the integrity of the data. There are many different ways to go about doing this. The simplest is a checksum, where each byte of data is added together and the result is transmitted at the end of the packet. The receiver can then does the same addition, compare the result to the checksum, and have some confidence that the data was transmitted without interference. Remember, when using radio, there is always a possibility of interference from another radio source such as a garage door opener, nearby intercom, CB radio, etc….
A simple checksum for our example can be obtained by adding up the ASCII values for each byte in our packet. You can choose whether you wish to use the header in the calculation. If we leave out the header, our checksum is:
"A" + "1" + "2" + "3" + "4" + "5"
65 + 49 + 50 + 51 + 52 + 53 = 320
For this example, we will allocate only one byte at the end of the packet for the checksum information. A value of 320 "rolls-over" because one byte can only handle a value up to 255. The value after roll-over is the remainder of 320/256, or
64. 64 is the "at" symbol in the ASCII character set so our transmitted packet now looks like:
This is our completed packet with a simple header and checksum.
Now, let's have a quick review of how this packet is transmitted and received.
Simply, the transmitter will preface every packet with "RFRF". This is done simply
to allow the receiving device to recognize a packet of data from static. Then, the packet data is sent. In our example, this was a device id of "A" followed by the data bytes "12345". Finally, the transmitter sums up all the bytes from within the packet to get a checksum. In this example, the checksum was 320. Since we allocated only one byte to the checksum, we divided by 256 and took the remainder. The result was 64 or the "@" symbol in ASCII. The transmitter is constantly receiving data from the RF receiver. Initially, it looks for nothing but an
"R". If it receives an "R", then it looks for an "FRF" as the next 3 characters it receives. If at any time it gets something different, it will go back to looking for the first "R". Once the header is received, it will load the packet data but not put it to use until receiving the checksum and comparing it with its own calculated checksum. If the packet received has a checksum matching the one transmitted, the data will be put to use.
The communication explained is unidirectional. While a bi-directional protocol can offer many added benefits, the unidirectional protocol described works fine when the transmitter retransmits its data and an occasional bad packet doesn't greatly impact the operation of the system. This protocol offers means for avoiding the use of bad data while staying simple and inexpensive. It is a good protocol for use in applications such as wireless door sensors, motion sensors, and simple switches.