So you've decided that somewhere
in your 'new product' a short range
wireless interface would provide a
great selling feature (maybe for a remote handset, or a short range
interface to a diagnostic tool, or perhaps a sensor head or tool needs
to operate without the awkward, trailing cables: who knows ?).
At the feasibility stage you just use a simple asynchronous serial
datastream, (something like good old RS232, but probably without the
awkward voltage levels, eh?), and over the few meters of test cable
it works just fine.
But now you need to
prove the radio link. So you look at your data rate , your
budget and your available space and try to find a radio.
There are some excellent looking 'turn key' radio
modems in the market, most offering Hayes/AT modem emulation
at 9600 baud or more. But those diecast boxes are as big as house
bricks, the range extends over several miles (when you need 25m)
, and the price! Hundreds of pounds or more.
Something much simpler is called for. So you get a pair of the numerous
short range wideband transceivers (marketed by many firms and all
much the same, in their neat little 33x25mm screen cans), add power
supplies and aerials copied from the datasheet, connect your data
stream and hope.
The specifications always state ranges of 50-250m (most use 1-5mW
in the 433 or 868MHz unlicensed bands), for data rates upwards of
10kbps.
So why doesn't it work ?
Ah! Transmitter enable. A bit like RTS , you
need to provide this other signal line to tell the transceiver that
a data burst is coming. And you need to assert this signal with
enough time to let the unit power up and settle.
So re-write your software to drive the line, being really careful
with the timing (maybe you have to FIFO buffer the datastream to
allow for tx power-up times? ), and try again. Does it work properly?
No !
Something is coming out of the receive data
pin, and on the scope it looks a bit like data, but if you turn
your transmitter off, or even stop sending data with the transmitter
on, then all hell breaks loose, and random bytes and framing/overrun
errors start spewing out of your uart.
What's going on here ? Believe it or not, it's quite normal. The
output of any simple fm/fsk demodulator in the absence of a signal
is high level white noise. And telling that from the wanted data
is your problem.
So you re-write the software to add some sync and address bytes
onto the data bursts, and maybe a checksum or CRC code too, so the
(now quite complex) decoder routine has something to look for to
discriminate between real data and noise, or interference.
Reliable data communications at last ?
Unlikely.
Data errors are appearing, and they seem to
depend on the actual composition of your datastream: send random
bytes, or streams of 'U' or '5' and things seem fine. Send 'space'
characters, or include large gaps between bytes and nothing works
at all.
Back at the datasheet a subtle little detail raises it's head: the
transmission path of all these simple radios is ac-coupled (at the
receive end), the response rarely falling below a few hundred Hz.
And an asynchronous datastream requires a dc-coupled link, or the
unbalance between high and low bit durations accumulates into a
crippling mark-space distortion.
And so you re-write the software (again!). Long preamble sequences
(of 101010 etc) are added to the transmit bursts to settle the receive
end, and either careful byte coding and bit number balancing algorithms
included, or the whole asynchronous format is thrown out (along
with the uarts) and a biphase (Manchester) bit level coding scheme
gets adopted.
Once you can get the necessary software routines written, anyhow.
Seems like a lot of work, when all you wanted
to do was send a few bytes of data over a few yards of space. Isn't
low power radio supposed to be simple to use ?
It is now.
The Radiometrix
TDL2A transparent data link module does it ALL for you!
Housed in an industry standard 33x23x7mm case
and footprint, the TDL2A combines a sophisticated 433MHz band multi
channel transceiver with a dedicated data communication processor
to produce a foolproof data link, achieving a range of 100-200m
from a transmit power of 10mW. Unlicensed operation is permitted
throughout Europe under EN300 220-3
For multiple radio systems (polled networks)
a TDL2A can be set to 1 of 8 unique addresses. As well as having
unique addresses, the TDL2A allows operation on one of 5 pre-set
frequencies in the 433MHz band. These frequencies are non-overlapping
and simultaneous operation of TDL2As in the same area on different
channels will be possible. Units are supplied on 433.925MHz (Ch0)
as default.
It is only necessary to add an aerial and a 5v
power supply, and the TDL2A deals with any 9600 baud asynchronous
datastream without further user intervention or interface, providing
all necessary buffering, packetisation, framing, coding, decoding
and reconstitution.
If the user remains aware of the 'half duplex'
restriction (no simultaneous transmissions), then for 9600 baud
data, the TDL2A behaves just like a wire.
There is no 'transmit enable' pin. At idle the
TDL2A constantly monitors the channel for valid data. When the first
user data byte appears on TXD, the TDL2A enters 'send' mode. The
internal transmitter is enabled, and while it settles (a process
taking up to 4mS) the first and subsequent bytes of the data stream
are stored in an internal FIFO. Once the transmitter is settled,
data is read form the FIFO to form a packet, to which is added address
and synchronizing bits. This is then biphase coded at the bit level
and transmitted, at 16kbits/sec.
When the TDL2A at the other end of the link detects a valid packet,
the data bytes are decoded and stored in the receive FIFO, and transferred
to the internal uart and appear on the RXD pin in 9600 baud asynchronous
format. The 'rx_busy' interface pin is asserted on the first valid
packet, and is not deactivated until the receive buffer empties
fully. It can be considered as a 'channel busy' or CTS indicator.
The overall latency of the link, from first byte in to first byte
out, is less than 15mS. This is achieved by using a very short packet
size (three data bytes, plus coding and address bits). If only one
or two bytes are sent, then the controller waits for three byte
periods (about 3mS) and then sends a shorter packet anyway. The
user does not need to include 'end of burst' or 'send now' characters
in the datastream.
In simple 'network' applications it is desirable for a unit to selectively
talk to several subordinate units. To support such operation the
TDL2A has a very simple addressing protocol built in. One of eight
addresses (0-7) can be selected in test/setup mode by the ADDR0
through ADDR7 commands. The selected address can be written into
e2prom as the power-up default by executing the SETPROGRAM command.
A TDL2A only responds to packets containing it's selected address.
All units are supplied 'out of the box' set to address 0.
For more complex multi-point systems the user
will need to embed the addressing information in the datastream.
So TDL2As are perfect ? They solve every problem
?
Well, no. Like any device, there are limitations
which the user must observe when implementing a design based on
the TDL2A:
- Short range: half duplex, single channel.
Don't expect much over 30m indoors, or 150m outside. And within
these operating areas remember that only one TDL can be transmitting
at a given time, and only in one direction.
- 5v only: The TDL2A requires a regulated 5v
supply, and has 5v logic compatible ports. To connect to a 9 or
25 pin RS232 interface a level shifter/inverter like MAX232 will
be needed. If desired, the unit can be supplied fitted to the TDI
interface board, which adds a true RS232 buffer, a 9 pin D type
socket, a 5v regulator and an RF connector (an SMA type). This board
increases the footprint to 61x33x15mm, and has M3 holes for chassis
mounting.
- 9600 baud: The only format this unit supports
is 9600 baud, 1 start, 8 data, 1 stop, with interface idling in
'mark' condition. (so tie unused TXE pins to 5v).
- No re-transmit: In the presence of interference
or at the edge of usable range data packets will be lost. Due to
the degree of coding used incorrect data is rarely observed, but
bytes will be missing. If the user requires absolute data reliability
then they must provide some form of file checking and a 'request
for re-transmission' or 'transmit/acknowledge' protocol.
In Radiometrix tests the 'zmodem' file transfer
software was found to work extremely well with TDL2A links, allowing
very large files to be sent without errors.
|