|
Introduction to 1-Wire networks
1-wire is defined as a single-wire (plus ground) communications protocol. It
was developed by Dallas Semiconductors to provide a convenient way of adding
sensors to a single bus complete with integrated power source. I first came
across this technology when I was looking for a weather station which would
integrate with Homeseer (My home automation software). The basic Dallas 1-wire weather station provided
wind speed, direction and temperature which connected via a special adaptor
to a spare serial port on the PC. I soon found out that additional devices
were available including rain gauges, barometers, humidity & lightning, all
converted to 1-wire for use on a single bus. All sensors in my house use a
1-wire network.
Hardware
Each 1-wire device has a unique 16 bit address. When connected to a 1-wire
bus, it is polled to obtain data from the sensor. This polling is derived
normally from the interface between the bus and the PC.
Depending on the sensor, there are two ways to power a 1-wire device:
1) Parasitic
2) External
In parasitic power mode, the 5V required to supply the device is obtained
from the DQ (data) wire. In this configuration, only two wires are required.
It is important that when using this mode, you should connect the sensor's
Vdd pin to its ground pin.
In external power mode, a 3rd wire is used to supply 5V directly to each
sensor and is recommended for large networks.
Two of the most used 1-wire devices in home automation are the DS1820 Family
for temperature and the DS2405 Family for input/outputs.
DS1820 Family
The DS1820 is the most common 1-wire temperature sensor used for home
automation. Maxim (Dallas semiconductors) have recently stopped manufacture
of this device but the DS18S20 is a direct replacement with better stability
& accuracy. The DS18B20 can also easily be used which has programmable 9-12
bit output data resolution.
Pin layout for the DS1820/DS18S20/DS18B20
DS2405 Family
This is a programmable input/output device which has limitless possibilities
for home automation. This can be polled to detect something like a contact
change or with minimal extra components, to drive a relay.
Pin layout for the DS2405
Application - DS2405 used for contact detection
Application - DS2405 used as a LED driver
Data sheets for these two devices are available from the document library
on my home automation server.
There are many more sensors available but are outside the scope of this
article.
1-Wire Network
When running a 1-wire bus, Dallas recommend that you use unshielded CAT5
cabling for the bus. However if you have few sensors and short runs,
telephone cable will work just as well. Do not use shielded cable as the
capacitance increase will upset the network.
Typical 1-wire bus with all temperature sensors
If you intend to have a large 1-wire network, it is important that you
design the network correctly, otherwise you will have problems with
timing/reflection issues and loss of data. For very small networks, it is
possible to connect each sensor in a star or radial arrangement. This means
that each sensor is connected via its own cable back to a central point and
then connected to the 1-wire to serial adaptor. However, it is strongly
recommend that you connect each sensor to a single continuous cable which
loops from sensor to sensor in turn (daisy chain). This will reduce
potential mis-reads due to reflections in the cable. Each sensor should have
a maximum of 50mm (2") of cable connected off the main highway. Even using
this method, connecting more than 10-15 sensors will still cause problems
due to loading of the data bus. To minimise this effect, always place a
100-120 ohm resistor in the data leg of each sensor before connecting to the
network. The choice of 1-wire to PC adaptors will also affect the
reliability of the network.
Obviously we need to read the 1-wire bus and convert this data for the PC.
The most common serial adaptor is the DS9097U which is all that is necessary
for small networks. For more complex and reliable communications, a
replacement for the 9097 is a device called THE LINK. This uses an advanced
bus interface and intelligent algorithms to make 1-Wire communications more
reliable at short and long distances. As serial ports are now not so popular
with motherboard manufacturers, the DS9490R addresses this problem by
providing a USB interface.
All these devices provide an RJ11 socket for connection to the 1-wire bus.
RJ11/RJ12 connectors are normally used for 1-wire installations for
simplicity and looping between sensors.
For a RJ11 socket, Pin 2 is used for the DQ (data) and pin 3 as the return
or ground. For some commercial 1-wire devices, the 5V supply is normally
connected to Pin 1 and supply ground to Pin 4.
For a RJ12 socket, Pin 3 is used for the DQ (data) and pin 4 as the return
or ground. As per the RJ11, the 5V supply is normally connected to Pin 2 and
supply ground to Pin 5.
These pins are actually in the same positions (so you can plug a RJ11 in a
RJ12 socket) for both connectors but the RJ12 has six pins whereas the RJ11
only has four.
DS9097U 1-wire to serial converter
'THE LINK'
DS9490R 1-wire to USB
converter
One of the problems with these adaptors is that the critical timing required
by the bus is derived by the PC drivers and can put heavy load on the CPU.
As an alternative, Midon design have produced the TEMP08 which takes the
load off the PC by providing all the timing within its hardware and just
passing the information to the serial port when required. They also produce
a LOG08 which has built in logging facilities (even when the PC is off) BUT
does not support the reading of the DS2405 switches.
Midon Design's TEMP08
If you only wish to use 1-wire temperature sensors, then Quaser electronics
produce a kit that supports four DS1820 sensors for interface to a serial
port. This company will also supply the DS1820 sensors if required.
Quaser Electronics 3145 temperature project
Software
Providing you have a DS9097U, 'THE LINK' or a DS9490R, the easiest way to
check your network is to download the ibutton viewer and drivers. This will
give you visual indication that all sensors have been detected and provide
any necessary data readings from the sensor. If you only have a TEMP08 then
you can check 1-wire functionality using a terminal program.
There are several software solutions available for Homeseer users to read
the 1-wire data. Pete Garyga has produced a 1-wire plugin for Homeseer which
reads a range of sensors using the DS9097U family of adaptors.
Michael McSharry has also written the McsTemperature plugin which can read
from all hardware devices mentioned. This is available via the Homeseer
updater.
He has also
written a xAP plugin for use with a DS9097U/DS9490 which can integrate with
any xAP application or plugin. This includes Homeseer, Misterhouse etc or
standalone via xAP desktop.
There are two plugin's available for the Quasar 3145 logger from
Gadgetjunkie.net and Eatworms.org.
The TEMP08/LOG08 can easily be read from a script available at Midon
Design's web site. As a simple test, this Homeseer script will display in
the homeseer log, all data from the hardware:
You need to put this script in the startup.txt script. Make sure you change
the port number to suit your installation:
'*****Set Com port
8 open for TEMP08*****
Dim e
e=hs.OpenComPort(8,"9600,n,8,1",1,"TEMP08.txt","main")
if e<> "" then
hs.writelog "Error opening COM8",e
else
hs.writelog "COM8", "TEMP08 setup complete"
end if
Next create a script called 'TEMP08.txt' , copy the code below and save it
in the scripts folder:
sub main(data)
hs.writelog "TEMP08 RECEIVED",data
end sub
Before this script will work, please be aware that you need to set up the
TEMP08 using a terminal program and the command set that comes with the
unit. This includes the polling duration and device detection.
Every time the TEMP08 polls itself, the resulting data is passed to the
TEMP08.txt which is displayed in the Homeseer log.
The variable 'data' can be parsed to obtain values for Homeseer to use. So
for the TEMP08 built in 1-wire temperature sensor, you could expand the
script as follows::
sub main(data)
Dim Temperature1
'*****Get temperature of TEMP08 sensor*****
if hs.StringItem(data,1,"[")="Temp #01" then
Temperature1= hs.StringItem(data,2,"=")
Temperature1= hs.StringItem(Temperature1,1,"C")
hs.setdevicestring "z47","TEMP08 Temperature: " & Temperature1 & " ºC",true
'hs.writelog "TEMP08 RECEIVED",data
end sub
Please note that if you have set the TEMP08 to Fahrenheit then the 'C'
highlighted in white should be changed to 'F'
Finally, if you require a 1-wire weather station, then Brian Hamilton's
weather display software allows all sensors to be passed to Homeseer via the
supplied scripts. The program supports an additional 10 1-wire temperature
devices in addition to all the normal 1-wire weather sensors.
Links
TMEX drivers & 1-wire viewer
- 1-wire drivers with iButton Viewer
(self-extracting executable).
Garyga.com
- Pete Garyga Homeseer 1-wire plugin.
Eatworks.org.uk - Dean's Quaser 3145 plugin.
Gadgetjunkie.net - Justin's Quaser 3145 plugin.
Quasar Electronics - Supplier of the 3145 temperature logger kit
Midon Design - Manufacturer & supplier of the TEMP/LOG08.
AAGElectronica - Manufacturer & supplier of 1-wire products and port
converters.
Weather Display - Weather Display software.
xAP 1-Wire Plugin - xAP 1-Wire Plugin
software.
xAP Desktop
- xAP Desktop software.
hobby-boards.com
- Cheap source of 1-wire hobbist boards in the USA.
Text © Jon00 2004
|