1-Wire introduction
Monday, 06-Jul-2009 20:37:08 BST

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 COM
8",e
else
hs.writelog "COM
8", "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