DS1620 based USB Digital Thermometer
Overview
I connected a DS1620 digital thermo-censor by Dallas Semiconductor to the Morphy Planning's USB-IO to build a PC-accessible digital thermometer.
The DS1620 chip supports 3-wire (SPI) protocol and allows loose timing, so you can easily build a thermometer with it. It provides ¬0.5 centigrade accuracy, which should be sufficient for room temperature.
Note that, in a common design of a device like this, a microprocessor (CY7C63001A in this case) usually has a dedicated firmware to control DS1620 and returns the measurement through HID INPUT REPORT. My implementation, however, uses the generic firmware supplied with Morphy USB-IO. As the result, the USB host (PC) must control every details to interface with DS1620.
Background
I have once made another PC-accessible thermometer. It has a voltage-output thermo-censor (LM35) and an A/D converter (MPC3204), that is driven through PC parallel port. It worked just fine, and I'm still using it. However, it has several problems:
- The A/D converter requires an accurate reference voltage.
- MPC3204 must be driven sufficiently fast, so we cannot control it reliably from a userland application.
- The application must access hardware directly, since the device requires nonstandard protocol on parallel port.
- Parallel cables are to be short, so the themometer must be located near a PC.
- The device must be self-powered (with dry cells in this case).
The first two problems are simpy solved by replacing LM35 + MPC3204 with a DS1620. Rest of the problems are solved by the use of USB.
Hardware
It is just a USB-IO with DS1620. No more, no less. The schematics clearly shows the fact. (If you erase the U2 box (representing DS1620) on the chart, it becomes the schematics of USB-IO. :-)
The remarkable point of the design might be the use of the USB-IO ports; SPI CLK signal is allocated from Port #2, while DATA is from Port #1. It allows the use of "I/O with strobe" commands of USB-IO Ver.2 Firmware.
The awkward design (or, just one of those) is that a signal from USB-IO Port #1 (that is initialized to High level after power up) is directly connected to the CS (chip select) of DS1620 that is a level-triggered active-High signal. Just an inverter should be sufficient to fix the problem, but an extra logic IC looks too much for this small circuit. If I wrote a dedicated firmware, I would initialize the particular signal to Low level. That's all I had to do.
Host Software
By design, the host software must take care of every details. I wrote several Java classes on top of USB-IO driver class library to control DS1620. I also wrote very unexciting sample application (Thermo.java).
To use the class, you should first initialize an instance, and just ask for a temperature by calling getTemperature() command. SPI protocol implemented through USB-IO is extremely slow; it takes about 70ms to send or receive a byte, causing 110bps bandwidth. However, DS1620 takes about a second to complete a temperature measurement process, so the protocol overhead is not significant.
The class also provides high resolution version of the method, getHiResTemperature(), which returns temperature in a higher (unspecified but aprox. 0.05 digree) resolution instead of normal 0.5 centigrade steps. See Javadoc for details.
Title: DS1620 based USB Digital Thermometer
electronic circuit
Source: http://csx.jp/~fex/usbio/dk8-en.html
Published on: 2005-02-03
Reads: 1968
Print version:
Other electronic circuits and schematics from PC related
-
RJ45 Network card to IR communication
-
Reading Data From The Parallel Port
-
VGA to TV Scart
-
7 segment rolling display using PC
-
An Improved Infrared Receiver with Status LED
-
RS-232 Laser Transceiver
-
8 Channel software controlled fanbus with PWM
-
PC based Frequency Meter
-
Simple PC thermometer
-
Stepper motor controller