Morgan Serial Weather Measurement System

Peter H. Anderson
915 Holland Road
Bel Air, MD 21014,


A paper copy of this documentation including all of the figures may be purchased for $6.00 postpaid in the United States and Canada. This may aid you in reaching an informed decision as to whether you desire to purchase the system. This $6.00 may be credited against the price of the system if you later do purchase the system.

Return Policy.

This system was designed by undergraduate students at Morgan State University. It is sold on a breakeven basis.

I try to have my students develop useful educational packages and kits which help other hobbyists do things they might not otherwise be able to do.

If you are not satisfied with it's operation, please return it to the above address for a full refund. The idea here is to foster tinkering, not to take someone's money for something that doesn't do the job for them.


The complete Morgan Serial Weather System provides the capability for two temperature measurements, two relative humidity measurements, atmospheric pressure and one user 12-bit analog to digital channel, wind speed and gust, wind direction and rainfall measurement. The packages we offer includes all of the required electronics. The interfacing humidity sensors, anemometer, wind vane and rainfall tipping bucket should be purchased from Fascinating Electronics.

Organization of this Discussion.

In the following, an overview of the theory of operation is presented. The modular nature of the system is presented. This is followed by a detailed discussion of the assembly of the main processor, PC interface and each of the features. Throughout the assembly, I have attempted to provide details on the theory of operation and techniques for testing the circuitry as it is assembled.

This is followed by a discussion of cabling to external sensors and finally a discussion of the meaning of the measured quantities, their accuracy and calibration techniques is presented.

Appendix 1 is a complete listing of all parts in each of the packages. This also includes a schedule of the pricing for obtaining replacement parts. The idea here is that accidents do happen from time to time and one of the greatest frustrations is to take on a project and be unable to complete it for lack of a single part.

Appendix 2 consists of documentation of the interfacing Fascinating hardware.

Overview of Operation.

The Morgan Weather System is designed to be interfaced with any serial RS232 com port on a PC or similar. Only the TxD, RxD and signal ground leads are required. Normally, the PC's TxD is at a logic one (less than -3.0V). To initiate a measurement sequence, the PC sends any character. This causes the TxD output to momentarily go to a logic zero which resets the 16C558 Main Processor initiating the measurement sequence.

The measurement sequence consists of two temperatures, atmospheric pressure, a user A/D input, wind direction, wind speed and wind gust, accumulated rainfall and the results of two relative humidity measurements. The results are then sent to the PC on PC input RxD using RS232 logic levels at 9600 baud, 8 data bits, with no parity as each measurement is completed.

The format is;

   T1 23.4 ' Temperature in degrees C
   T2 28.7
   AT 1011 ' Atmospheric pressure in millibars
   AD 2058 ' User A/D.  Quantity is in the range 0 through 4095
   WD 34  ' Wind direction.  Degrees
   WS 27  ' Current wind speed, kM/hr
   WG 40  ' Wind Gust, greatest wind speed, kM/hr
   RN 8140 ' Rain.  Accumulated count
   H1 202.8 ' Humidity.  Quantity is in picofarads
   H2 223.1

Note that each quantity descriptor consists of two alphanumeric characters followed by a single space followed by the quantity which is in decimal with leading zero suppression. The line is terminated with a line feed and carriage return (ASCII 0DH, 0AH).

If a feature is not present or if an obvious error occurs, the result is reported with the quantity being an asterisk. For example;

   T1 *

At the conclusion of the measurement sequence, the PIC processor does nothing until another character is sent, initiating a new sequence.

The details of the meaning of the various quantities are discussed elsewhere. However, briefly, wind gust is the greatest wind speed over any second since the last measurement sequence. Rain is simply an accumulated count which ranges from 0 to 9999 and then rolls over. The relative humidities are expressed in picofarads to afford the user the option of using two different humidity sensitive capacitors. This is converted to percent relative humidity by the PC using a simple expression.

A more detailed treatment of all quantities, accuracies and calibration techniques are treated in a separate discussion.

Note that the system does not include a standalone display such as an LCD panel or 16 LEDs to show wind direction. Rather, this package is intended for programmers who can take the data from the serial port and tailor the system to meet their specific requirements. This might include periodic measurements with graphics, making the data available on the Internet, data logging, noting trends and triggering alarms. The package is for people who know a great deal more about Windows programming than I do who want to use their creativity to do something useful and take some satisfaction in knowing "I did that".

Modular Growth.

The system has been designed such that you may begin with only the main processor and add the various features as required for a specific installation and as your pocket book and time permits. That is, the PIC includes all of the software to handle all features and automatically detects which features are present. Thus, a user might begin with two temperature sensors, perhaps later add a single humidity sensor and barometric pressure and forego the wind and rain measurements altogether.

Thus, the system is offered as a basic system kit and two add-on packages. A detailed listing of all components in each of the packages in contained in Appendix 1.

The Basic System Kit ($39) consists of the main PIC processor (PIC16C558), RS232 interface, ceramic resonator clock, pull up and series limiting resistors, two Dallas DS1820 temperature sensors, and the circuitry to interface with up to two relative humidity units. It also includes the 555 circuitry to enable testing of the relative humidity feature. You may either construct your own or purchase the interfacing RH sensor unit or units from Fascinating Electronics. The package also includes this documentation.

The Basic System Kit also includes a 7805 +5VDC regulator power supply kit. This enables you to inexpensively power the entire unit with a wall power unit with an output in the range of 8.0 to 12.0 VDC with a minimum current rating of 100 mA.

We offer such other items as a five foot serial cable with a ten terminal wirewrap header to ease the serial connection to a solderless breadboard ($7.00) and a Jameco JE25 solderless breadboard. ($15.95). These may be ordered separately as required.

The Atmospheric Pressure Add-On ($29) consists of a dual channel 12-bit A/D converter and a Motorola MPX4115AP pressure sensor. This adds the capability for measuring atmospheric pressure and it also provides a user 12-bit A/D input. No interfacing hardware from Fascinating is required.

The Wind and Rain Add-on ($25) consists of two peripheral PIC12C508 processors for wind speed and gust and another for rain and a dual channel 12-bit A/D for measuring wind direction. Note that the interfacing anemometer, windvane and rain gauge are available from Fascinating.

Fascinating Electronics.

Please note that we have no financial interest whatever in Fascinating Electronics.

In developing this system we had two goals; to offer the best and yet be the least expensive by far. We are not equipped to directly provide an anemometer, wind vane nor tipping bucket. Thus, we searched. Anemometers, wind vanes and to a lesser extent, tipping buckets vary considerably in their operation from one manufacturer to another and thus it was important to find a manufacturer who had products consistent with our goals of quality at an affordable price.

We were more successful than I could have ever imagined. The Fascinating hardware is very well thought out and it is of very high quality; plastic that will last, anodized aluminum and stainless steel hardware. It was the best we found and yet, the most inexpensive by far. In addition, the Fascinating hardware was unique in that it offered in kit form. We developed this electronics package for people who are not helpless and derive pleasure in doing things themselves. Thus, the Fascinating kits are a logical extension of our "tinkering" philosophy.

Note that our design assumes you are interfacing with Fascinating hardware. It will not work with other anemometers and wind vanes. It will interface with any tipping bucket which provides a dry closure, but the Fascinating tipping bucket is the least expensive. With relative humidity, you may either build your own or buy the Fascinating hardware. This is discussed in greater detail elsewhere.

Fascinating Electronics is at

The following is a summary of Fascinating hardware used in our design.

   Anemometer Kit 	WEA-AN-KIT $54.90
   Windvane Kit 	WEA-WV-KIT $47.50

   "T" Mount  		WEA-WT-KIT $ 9.90 See Note 1

   Humidity Kit 	WEA-TH-KIT $24.90 See Note 2

   Rain Gauge Kit 	WEA-RN-KIT $34.90

Note 1. The "Tee" allows you to mount both the anemometer and windvane on a single mast.

Note 2. The WEA-TH-KIT also includes a temperature measurement IC which is not used in our system.

Fascinating also provides flat telephone cable. I don't recommend this. Rather the use of CAT 5 cable with four twisted pairs is strongly suggested. This is discussed in the section titled "Cabling".


Block Diagram.

Please refer to Figure #1 which is a block diagram of the entire system.

In the following discussion, the assembly details are presented for the main processor, the communications interface, the temperature feature, atmospheric pressure, wind direction and wind speed, rainfall and finally relative humidity.

Hopefully we have done a good job in providing a test procedure to verify the circuitry is operational at each step. Clearly, it is important to get the main processor and the PC interface operating before moving on to assembling the various features.

I attempted to do all of the figures such that they are as close to standalone as possible. The text includes additional information and some of the theory of the design. Please note that it is very hard to write to a very general audience where some people do and others don't understand circuit theory. Thus, some of the theory is there for those who do, but, it is not necessary that you understand every last word.

Note that the assembly of the main processor and the communications interface is required for all configurations. After that, you may add features as your time and pocket book permit.

+5VDC Power Supply.

Prior to proceeding, recognize that you will need a well regulated source of +5VDC. A +5V regulator and associated components is provided with the Basic System. Thus, if you do not already have a source of +5 VDC, please assemble this kit somewhere on your solderless breadboard. Note that you will need a source of any voltage in the range of +9 VDC to +12 VDC for the input to the 7805 regulator. You probably have more than a few wall power units laying around the house from long discarded answering machines and toys. Just be certain that the unit indicates DC (not AC) and it is rated somewhere in the range of +8 VDC to +12 VDC with a minimum current rating of 100 mA.

Logic Probe.

Please build the logic probe on your breadboard. This little PIC probe is an incredibly powerful design and it is used throughout the assembly to verify the circuitry is operational.

Please familiarize yourself with its features in recognizing a logic one (greater than 2.4V) (LED on), a logic zero (less than 2.4V) (LED off), open (LED dim) and pulsing (LED flashing).

Note also that the probe provides sources of 1 and 10 pulses per second. This capability will be used in verifying the operation of the wind speed and rain fall PIC12C508s.

Main Processor. (Figure #2).

At first glance, this can appear a bit overwhelming. In fact, this nothing more than four components; the PIC16C558 in an 18 pin DIP, the ceramic resonator in a three terminal single in line package (SIP) and two 10 pin SIP resistor networks.

Place the PIC16C558 on the breadboard.

Locate the 10-pin SIP network with terminals 2 and 6 removed and place it such that terminal 10 of the SIP is aligned with terminal 9 of the PIC.

Note that terminal 1 of the resistor network will overhang the PIC by one horizontal and it is important to take note of where the PICs terminal 1 is located. That is, in future discussions locate PIC terminals by counting from terminal 1 of the PIC, not terminal 1 of the resistor network.

Locate the 10-pin SIP network with terminals 4, 5 and 6 removed and place it such that terminal 10 of the PIC is aligned with terminal 10 of the PIC. Here again, terminal 1 of the resisitor network will overhang the PIC by one horizontal.

Connect terminal 1 of both of the resistor networks to +5VDC.

Install the 4.0 MHz ceramic resonator. Note that this is a symmetrical device. Connect either of the outter terminals to terminal 16 of the PIC and the other to terminal 15. Ground the center terminal of the resonator.

Connect ground to terminal 4 of the PIC and a source of +5 VDC to terminal 14.

Visual Observation.

At this point, you might take a moment to observe that something is connected to all terminals of the PIC except PIC terminal 1.

Test Procedure.

When the processor is reset, it will immediately initiate a measurement sequence which takes about ten seconds and it will then go into an idle state awaiting another reset.

The processor is reset by the momentarily application of a logic zero on the /GO input (term 5). (Note that it is also reset when power is initially applied).

On reset, SEROUT (term 17) will assume a logic one. However, shortly thereafter, the logic probe will flash as the result of the first temperature measurement is sent to the PC. A short time later, the SEROUT lead will flash as the result of the second temperature measurement is sent. And, so on through atmospheric pressure, user A/D, wind direction, wind speed and gust, rainfall count and two relative humidity measurements. When the complete measurement sequence has been completed, the system will again return to the idle state and SEROUT will be high.

Thus, momentarily ground /GO (term 5) and using the logic probe, observe the periodic flashing of SEROUT (term 17) for a complete measurement sequence, nominally ten seconds. Verify the state of SEROUT is then a constant logic one.

Note that each time the processor is reset, the system will attempt to perform each and every measurement. The PIC then uses various criteria to determine if the measurement was successful and if not, it sends an asterisk to the PC. Thus, as no measurement devices are currently connected to the PIC, the data you are observing at SEROUT using the logic probe is of the form;

   T1 *
   T2 *
   AT *

However at some point in a measurement sequence you should see each of the following leads change state in some manner as the PIC attempts to perform a measurement. This might be a long (one second) term change in state or a few winks of the probe. Thus, connect the probe to each of the following leads and momentarily ground the /GO lead (term 5) and watch for a state change.

Term 	PIC 	Functional  Function
 	Desig 	Desig

6 	RB.0 	T_DQ1   Temperature 1 Data
7 	RB.1 	T_DQ2   Temperature 2 Data
8 	RB.2 	AT_CS   Chip Select for Atmospheric Press
9 	RB.3 	AD_CLK  A/D CLK
10 	RB.4 	AD_DATA A/D Data Lead

11 	RB.5 	WD_CS   Chip Select for Wind Direction

13 	RB.7 	WS_FLOW Flow Control for Wind Speed

1 	RA.2 	RAIN_FLOW  Flow Control for Rainfall Counter
2 	RA.3 	RH_EN   Enable for Relative Humidity Sensors

Note that the following are inputs. Verify they are at a logic one and do not change during a measurement sequence.

Term 	PIC 	Functional  Function
	Desig 	Desig

12 	RB.6 	WS_SER      Serial Data from Wind Speed PIC
18 	RA.1 	RAIN_SER    Serial Data from Rain Fall PIC
3 	RA.4 	RH_IN       Input for RH Sensors

Assembly - PC Communications Interface. (Figure #3).

Wire the circuitry as shown in Figure #3.

Note that the pullup resistors identified with an asterisk are part of the SIP resistors networks which you have already installed.

The Dallas DS275 converts RS232 levels (where a logic one is somewhat confusingly defined as less than minus 3 VDC and a logic zero as greater than +3VDC) to TTL levels and from TTL to RS232.

When the PC Com port is in the idle state, the PC's TXD output (Point A) is at a logic one (less than -3 volts) and thus Point B is at a TTL logic one.

Similarly, when idle, the PIC processor SEROUT output (Point D) is at a TTL logic one and thus Point C is at an RS232 logic one (less than -3V).

When the PC sends a character, point B momentarily goes low causing the PIC processor to reset initiating a measurement sequence.

We opted to use the Dallas DS275 over the standard MAX232 as the MAX232 is a 16-pin DIP and requires the wiring of four electrolytic capacitors which are used to generate the RS232 logic levels. Dallas does specify a maximum distance feet of 12 feet between the PC and the DS275 which should be co-located with the PIC processor. I don't view this as a problem and if it is, I assume you can, in fact, stretch that 12 feet quite a bit or use a MAX232.

It is important to note that the DS275 "steals" the negative supply required for generating an RS232 logic one from the PC's TXD output avoiding the need for a charge pump and those four bulky capacitors associated with the MAX232. Thus, the DS275 must be connected to the TXD output of the PC in order to assure proper operation.

The loop back of RTS to CTS and DTR to DSR may not be required if your program does not require flow control. However, there is no harm in doing so.


In testing, a terminal emulator package is required. For DOS, I use ProComm Plus. Windows95 includes HyperTerm in the Accessories Menu.

Configure the terminal emulation software for a Direct connection to the appropriate COMM port. Configure the baud rate and other parameters for 9600 baud, 8 data bits, no parity, and either 1 or 2 stop bits. Configure for no flow control.

In the idle state, point A and C should be at an RS232 logic one (less than -3 VDC). When using the logic probe, the LED will be off. Points B and D should be at TTL logic ones (Probe LED on).

Using the terminal emulator, type any character and after about a second, the results of the various measurements will begin to appear on your terminal as;

   T1 *
   T2 *
   AT *

Note that at the end of each measurement, the PIC sends new line characters as a Linefeed (LF) followed by a Carriage Return (CR). On some systems, the receipt of the CR character may cause an additional linefeed character to appear on the terminal and the output will appear to be double spaced.

If you are not getting this output on your terminal, use the probe. When a character is sent, you showed view an "on wink" at Point A, an "off wink" at Point B and Points D and C should be in transition as the data is sent to the PC.

Assembly - Temperature Measurement.

Again, note that the resistors identified with an asterisk were already installed in Figure #2.

Connect the Dallas DS1820 devices as shown in Figure #4.

Note that these are operated in the "parasite power" mode. That is, the power necessary to operate the remotely located DS1820 is derived from the data lead. The advantage in this approach is that wiring to the remote DS1820s is limited to a single twisted pair; the data lead and ground.

The reason for the series 330 Ohm resistors which are co-located with the PIC is for the protection of the PIC. During the measurement sequence, the PIC brings the data lead a logic one and if the data lead which may run over several hundred feet is accidentally grounded, permanent damage to the PIC could result. I tend to be a very conservative designer and assume that what can go wrong probably will and throughout the design there are many similar series limiting resistors.

Note that the two outer leads of the DS1820 are grounded.

Additional notes on cabling to the temperature sensors are included in the section related to Cabling.


Initiate a measurement sequence by sending a character using your terminal emulator software. You should receive data of the form;

   T1 25.3
   T2 23.1
   AT *

Note that if one of the temperature sensors is not present, the temperature reading will be replaced with an asterisk.

However, if a DS1820 is connected, an asterisk may also indicate a communication between the PIC and the DS1820. The DS1820 includes an innovative feature that computes an error detection code which it transmits after sending temperature data to the PIC. The PIC also computes the code and compares with that sent by the DS1820 and if the two do not match, an asterisk is displayed. Thus, an asterisk may indicate the sensor is not present or not functioning or that there was a transmission error in communication.

There is one case where this does not work. If the data lead is shorted to ground, the PIC will read the error detection code as zero and the nature of the error detection algorithm is such that it will also calculate the code as zero and report the temperature as a ridiculous value of -65.55 degrees. At first, I considered this to be a design deficiency, but on reflection, it might be regarded as a added troubleshooting feature. A reading of -65.55 degrees indicates the data lead to the remotely located DS1820 is grounded.

Assembly - Atmospheric Pressure and User A/D.

Construct the circuitry shown in Figure #5A. Again, the resistors identified with an asterisk were already installed in Figure #2.

Note that the MPX4115AP pressure sensor ($20) and the LTC1298 ($8) are the most expensive components in the system, so please pay close attention to wiring them correctly.

The purpose of the 1K resistor is to protect the PIC and the A/D converter if for some unforeseen reason, both the PIC and the D_OUT lead on the A/D are active outputs and at opposite states. This should never happen, but again, I am a conservative designer.

Note that the AD_DATA and AD_CLK leads are also shared with the A/D associated with wind direction if equipped. The AD_CLK is also shared with the relative humidity circuitry if equipped.

The 100K resistor and 50,000 pFd capacitor are intended to minimize noise.

The theory of operation is that the PIC processor sends four bits to the LTC1298 commanding the A/D to perform an analog to digital reading on Channel 0 relative to ground and a 12-bit result is then read by the PIC. In fact, in order to eliminate some of the effects of the digital noise associated with the PIC, this is repeated 256 times and the results are summed and then the result is divided by 256 so as to obtain an average.

The voltage on Ch0 is then calculated as;

(1) V_CH0 = band / 4096 * V_ref

where band is the 12-bit quantity in the range of 0 through 4095 and V_ref is the nominal +5 VDC supply.

The MPX4115AP sensor outputs a voltage to Channel 0 which is proportional to pressure.

(2) V_CH0 = V_ref * (P * 0.0009 - 0.095)

where P is the pressure in millibars.

Equating expressions (1) and (2)

  V_ref * (P * 0.0009 - 0.095) = band / 4096 * V_ref

Eliminating V_ref and solving for P;

P = (band / 4096 + 0.095) / 0.0009


(3) P = 0.27 * band + 105

Thus, the PIC performs 256 A/D measurements, averages them and then computes the atmospheric pressure using expression (3). This is then sent to the PC in the form;

   AT 952

The PIC then turns to performing a measurement of the voltage between Channel 1 and ground. Here again, 256 measurements are performed and the average is calculated and the 12-bit A/D band result is sent to the PC;

   AD 3124

Note that the you may use this depends on your specific application. Note that the voltage at Channel 1 is calculated as;

(4) V_CH1 = band / 4096 * V_ref

where V_ref is the value of the +5 VDC supply.

Additional considerations relating to atmospheric pressure and the user A/D input are treated in the accuracy and calibration section.


If you have access to a voltmeter, measure the voltage at the output of the MPX4115. If you are near sea level, the atmospheric pressure is near 1000 millibars and thus, from expression (2), the voltage will be nominally 4.4 VDC. Atmospheric pressure decreases with altitude and thus this voltage will be somewhat less. Figure #5B illustrates the atmospheric pressure and theoretical V_out of the MPX4115 at normal barometric pressure as a function of altitude.

If you find the result is not right on the money, don't panic. A technique for performing a single point calibration is presented in the accuracy and calibration section.

If you don't have a voltmeter, use the logic probe to verify the voltage is at a logic one (LED on). This assures the voltage is above nominally 2.4 VDC. This is not a perfect test, but certainly adequate.

Using your terminal emulator, type a character to initiate a measurement sequence and verify the atmospheric pressure is somewhat close to that shown in Figure #5B for your altitude.

In testing the user A/D channel, use the two 10K test resistors to apply nominally +5 VDC, 2.5 VDC and ground and verify the reported bands are close to 4095, 2048 and zero, respectively.

Assembly - Wind Direction.

Note that operation of this feature requires that you have the Fascinating Wind Vane. For testing it may be useful to use the dual wiper 360 degree potentiometer associated with the Fascinating kit.

However, if you do not yet have the Wind Vane Kit, it is suggested you assemble and test this feature using a substitute technique. Otherwise, if you are like me, you will put the IC away and forget where you put it and your wife will eventually put it away in a special place.

Construct the circuitry shown in Figure #6A.

Note that the wiring is quite like that associated with the LTC1298 associated with the atmospheric pressure feature and in fact, leads AD_DQ and AD_CLK are shared with that A/D.

Note that a 100 Ohm series limiting resistor is included to protect the +5 VDC supply or even the potentiometer in the wind vane in the event the PWR lead or one of the WIPER leads is accidentally grounded.

The general theory of the operation is illustrated in Figure #6B. The windvane is connected to a potentiometer and determining the wind direction is a simple matter of measuring the voltage at the potentiometer's wiper.

Unlike most potentiometers, for example, volume controls, this potentiometer turns a full 360 degrees. Of course, there must be a point of discontinuity in the resistive material and this is commonly termed the "dead zone". Many weather equipment manufacturers "solve" this problem by suggesting you orient the potentiometer such that the wind never comes from that direction.

However, Fascinating has been very clever in using a dual wiper potentiometer where the two wipers are positioned opposite to one another. Thus, if one wiper is in the dead zone, the voltage on the other may be determined and thus the angle of the potentiometer may be calculated.

In this design, we measure the voltage on Wiper #1 and if it does not appear to be in the dead zone, the angle is calculated as;

   Angle = Band / 4096 * 270

If however, the voltage on Wiper #1 is either close to ground or to +5 VDC or open, we assume the wiper is in the dead zone and measure the voltage on Wiper #2 and add 180 degrees.

   Angle = (Band / 4096 * 270) + 180

The final result is adjusted to be in the range of zero to 359 degrees.

Note that when mounting the windvane on the roof or whatever, it really isn't necessary for you to get up on the ladder and have a big fight with your wife because she doesn't know how to use your terminal emulator in order to align the wind vane. Rather, climb up the ladder and orient it any way that is convenient. After all, the 0 to 359 reading that this system porvides is relative. The beauty of this whole system is that you do the programming and it is an easy matter for you to add a constant in your software.


If you have the dual wiper potentiometer available, connect it as shown and use your terminal emulator program to initiate a number of sequences, adjusting the potentiometer between sequences. The output will be of the form;

   WD 326

However, if you do not have the special potentiometer available, ground Ch0 (terminal 2) on the LTC1298 and vary the voltage on Ch1 (term 3). One easy voltage point is to simply ground Ch1. You should read something close to 180 degrees.

Assembly - Wind Speed and Gust.

Note that this feature requires the Fascinating Anemometer. However, you are encouraged to wire it now as it may easily be tested using the clock feature of the logic probe.

Connect the Wind PIC12C508 circuitry as shown in Figure #7.

Although the PIC12C508 does have an option for an internal RC oscillator, it is not sufficiently accurate to assure reliable serial transmission to the main processor. Thus, a separate 4.0 MHz resonator is used.

The theory of the design is that the as the anemometer turns, a magnet passes close to a reed switch causing it to momentarily close. Thus, by counting the number of closures over a period of time, the wind speed may be calculated.

When a mechanical switch, in this case a reed contact, closes, it bounces perhaps several hundred times. The series 330 Ohm and shunt 1.0 uFd capacitor is a debounce network to eliminate this bounce.

With the Fascinating anemometer;

   wind_speed_km_per_hour = t_period / 963 ms

The Wind PIC opens a precise 963 ms window and counts the number of events on the COUNT input. It then compares this CURRENT value with the GUST value and updates GUST if CURRENT is greater than GUST.

It then checks the /SEND input and if it is not at a logic zero, the process is repeated.

If /SEND is low, the values of CURRENT and GUST are sent to the main processor and GUST is reset to zero and the Wind PIC resumes with it's 963 ms windows.

Thus, at any given point in time, the Wind PIC holds two values; CURRENT and GUST where CURRENT is the number of events on COUNT over the most recent 963 ms and GUST is the maximum count over any 963 ms period since the last data transmission.


Note that the logic probe, in addition to being a probe also provides two clock outputs.

Connect the 10PPS output of the probe to the COUNT input of the Wind PIC (Point A).

Using your terminal emulator, initiate a measurement sequence and verify a reading of the form;

   WS 9
   WG 9

You might leave the probe attached such that wind gust is 9. Then remove the probe and wait for at least a second. In this case, the "wind speed" over the most recent second is zero. But, the "gust" is the maximum which has occurred since the last measurement.


   WS 0
   WG 9

Note that in some cases, the count may be 10 rather than 9 as the clock associated with the logic probe is not precise.

Assembly - Rainfall Counter.

Note that this feature requires an external rainfall collector that provides a dry closure when a certain amount of precipitation is received. Usually, a funnel concentrates water that falls into a "bucket" that looks more like a mini coffee scoop. When full, the "bucket" tips, causing a closure of a reed switch and the tipping empties the "bucket" and it's return to position opens the reed switch. Thus, the term "tipping bucket". It's a very clever design marketed by a number of weather equipment manufacturers.

This system will interface with any tipping bucket design which uses a dry closure. You can look around, but chances are good that you will come to the conclusion that the Fascinating Rainfall Collector is the most economical.

In fact, many people are not terribly enchanted with measuring rainfall.

I grew up in Vermont where a good deal of the precipitation was snow and it was mighty cold. I can't imagine how one would heat this external funnel in the winter. Actually, in Vermont, there wasn't that much interest in precipitation, other than, "Oh God. It's snowing again". If the amount was exceptional, a Vermonter would use a trusty Stanley tape measure and multiply the result by 1.5 and this would grow each decade. "128 inches in '69".

This is not to trivialize the importance of measuring rainfall in many parts of the world where 0.1 inches is very important. We are fortunate and perhaps spoiled in the eastern US in having entirely too much rain and 0.1 inches is not likely to even spark a conversation.

Thus, the rainfall counter may be used to count anything; the number of lightning strikes, the number of vehicles going down your street or turning around in your driveway, the number of times your outside motion detector turned on the lights or the number of times the cat jumped through the basement window. That is any process where the sensor is a dry closure.

Connect the Rain PIC as shown in Figure #7.

The Rain PIC operates in a continual loop, constantly monitoring the number of events which occur on input COUNT. Each second, the number occurring over the previous second is added to variable ACCUM.

If input /FLOW is not at a logic zero, the process continues.

However, if input /FLOW is low, the value of ACCUM is sent to the main processor.

Unlike the Wind PIC, this value is not reset to zero. Rather, it is a totalizer which goes from 0 to 9999 and then rolls over. Thus, in your program, you may wish to store the old value so as to calculate the difference between the most current and the previous measurement.


Quite like the Wind PIC, connect the logic probe's clock output to input COUNT (Point B).

Using your terminal emulator software, initiate a measurement sequence and verify an output of the form;

   RN 1696

Assembly - Relative Humidity.

Figure #8A illustrates how up to two relative humidity units may be connected to the system. This schematic may be a bit overwhelming when compared with the other features. In fact, the principles are quite simple.

Note that this feature requires one or two remote circuits consisting of a 555 free running clock or pulser where the period is controlled by a humidity sensitive capacitor.

A typical relative humidity unit is illustrated in Figure #8B. Note that the period is;

   T = (R1 + 2 * R2) * C_H

where R1 and R2 are 1.0 Megs.

Note that the period is a function of the humidity sensitive capacitor. Thus, the general idea is for the main processor to measure the number of pulses occurring within one second and calculate and return the value of C_H in picofarads. A full discussion of why we opted to report RH in picofarads and how to convert this to percentage RH is discussed in the accuracy and calibration section.

You have a number of options on the remote 555 circuitry.

You can build your own and we have included all of the circuitry in Figure #8B other than the humidity sensitive capacitor. You can either order a Philips 2322 691 90001 capacitor from Newark at for nominally $13.00. Or you can use a somewhat sturdier G CAP 2 capacitor from General Eastern Instruments at for about $20.00.

The simplest option is to purchase an RH kit from Fascinating. This includes all of the circuitry shown in Figure #8B including the Philips capacitor and most importantly, a small printed circuit board, all for nominally $25.00.

Note that the circuitry shown in Figure #8B is the schematic of the Fascinating unit. The Fascinating schematic supplied with the unit is not correct, but the circuit board is.

The theory of operation is that during the measurement sequence, PIC output RH_EN is at a logic zero and thus both relative humidity units are off. The reason for this is to eliminate the pulses associated with the 555 outputs from causing noise during the analog to digital measurements associated with the atmospheric pressure, user A/D and wind direction features.

When relative humidity is to be measured, RH_EN is brought high causing the two 555 circuits to begin operating.

After a brief delay to allow the 555 circuits to reach steady state, output AD_CLK is brought low, gating the output of unit RH_1 to PIC input RH_IN. The PIC counts the number of transitions occurring over a one second period and converts this to a capacitance in picofarads which is sent to the PC.

Output AD_CLK is then brought high and the output of RH_2 is gated to RH_IN and the PIC performs the same operation.

Output RH_EN is then brought low, disabling the two RH units.


We have included all of the circuitry illustrated in Figure #8B except that a fixed 150 pFd capacitor is used in place of the humidity sensitive capacitor.

Construct this test circuit and connect the output of the 555 test pulser to I0A (terminal 2) of the 74158. Initiate a measurement sequence and verify the output of the 555 pulses for nominally two seconds. Verify the the signal at RH_IN (terminal 3 of the PIC) pulses for nominally one second. (During the other second, the main processor is attempting to make a measurement on the second RH unit).

Using your terminal emulator package, verify the output is of the form;

   H1 183.2
   H2 *

Remove the output of the 555 test pulser from terminal 2 of the 74158 and connect it to I1A (terminal 3) of the 74158.

Using your terminal emulator package, verify the output is of the form;

H1 *
H2 183.2

Note that the value actually reported, for example 182, is somewhat greater then the actual value, 150 pFd. This is caused by propagation delays in the 555. This is discussed in greater detail in the accuracy and calibration section.



This discussion focuses on the cabling required in interfacing various remote sensors with the serial weather PIC. Suggestions are offered on the type and a source of cable. The cabling requirements of each remotely located sensor is treated.

General Discussion.

External cabling is required when interfacing remotely located DS1820 temperature sensors and with the Fascinating anemometer, wind vane, relative humidity board or boards.

In all cases we have designed the Serial Weather PIC such that no permanent damage will result if any lead if accidentally shorted to another or accidentally grounded. (At least we believe we have. You need not test this!).

CAT 5 Cable.

You might consider CAT 5 unshielded cable in interfacing with remotely located sensors. It provides four twisted pairs, is convenient to work with and it is readily available and relatively inexpensive.

In case you don't have a source, Jameco at sells this;

Jameco  Description     	25 feet  100 feet

118113  Solid, 24 AWG, Grey    $5.00    $15.00
118130  Stranded, 24 AWG, Grey $8.00    $25.00

If you expect a good deal of flexing, the stranded is recommended. But, in most cases, the solid should be more than adequate.

I have no idea of the degradation of this due to ultraviolet radiation. However, I have had some ten amateur radio antennas in the yard for the past 12 years and although they are in various stages of disrepair as at the moment my interest in ham radio has waned, none of the various types of wire I used appears greatly affected. I would be far more concerned about the effects of ultraviolet on 120VAC power distribution wiring where someone might get injured or if I were professionally installing network systems. However, this is a hobby weather system. There are no lethal potentials and five or ten year life is quite adequate.

On the other hand, sun light seems to eat up cable ties. I note that Jameco has weather resistant

(black) cable ties;

   104133 5.8 inch, 40 pound strength 100 / $4.00


Of course, when anyone mentions CAT 5, the first thing that comes to mind is connectors.

The nature of the Fascinating equipment is such that the wires are soldered to a potentiometer (windwave), soldered or twist tied to wires in the anemometer and rain gauge units and soldered directly to a printed circuit board associated with the relative humidity circuitry.

On a remotely located DS1820 temperature sensor, I would solder the two leads, put the whole

assembly in some plastic tubing and use silicon sealant as illustrated in Figure #4. Note that the Basic Package includes a small length of heat shrink tubing to permit you to insulate the center (data) terminal from the outer (ground) terminals.

You might desire to connectorize all of these remote devices, but frankly, I see no big advantage in doing so.

On the processor side, I would start off with a solderless breadboard and directly connect the

interfacing cabling to the breadboard. If you desire to later stabilize the unit by going to a perf board with wirewarp or to a printed board, you might consider connectors. If I did have a printed board I would be more inclined toward screw type connections than modular telephone type connectors.

Twisted Pair Cable.

CAT 5 may seem an overkill and indeed it is. But, the important aspects are that it is twisted pair and it provides 4-pairs in a single jacket. If you decide to go with other cable, be sure it is twisted pair. Flat telephone type cable is really only intended for short runs within a house and use of it in this system is inviting noise. Twisted pair has been used for over a 100 years by the telephone company in transmitting voice communication with signals less than a millivolt and those lines run side by side with power cables, near high power radio transmitters, arc welders and the like. It may not always work, but in the main it does. Twisted will always beat poorly thought out and expensive shielding.

Intermediate Summary.

To summarize the discussion to this point, CAT 5 cable seems attractive. I wouldn't worry about the effects of ultraviolet and for the moment, I would forego connectors. CAT 5 cable provides four twisted pairs in one jacket. If you decide not to use CAT 5 cable, be sure whatever you use is twisted pair.

Remote Sensors.

In the following discussion, the cable interface with each remotely located device is described to help you plan your cable needs.

Dallas DS1820 Digital Thermometer.

Presumably users will locate one of the DS1820 thermometers locally to monitor indoor temperature and the other outside at some distant point. If the inside DS1820 is no more than a few feet from the main processor, no special wiring is required. For remotely located DS1820s, a single twisted pair per device should be used. If four pair CAT-5 cable is used, this will leave three pairs unused. These pairs may be used for a relative humidity unit or simply be left unused.

Atmospheric Pressure.

It is suggested that the MPX4115AP pressure sensor be co-located with the LTC1298 and thus no special wiring is required.

Note that a 100K terminating resistor and a shunt 50,000 pFd capacitor is used to suppress unwanted noise.

User A/D.

It is difficult to speculate on all of the different uses that the user A/D may accommodate. However, it is important to note that the 12-bit A/D provides 4096 quantizing bands over a range of 5.0 volts or about 1.25 mV per band. This is extremely accurate, but may easily be masked by noise on the wiring from the users circuitry to the LTC1298 dual channel A/D. Twisted pair cable is recommended.

Further, it is suggested you terminate the pair on the LTC1298 side with a resistance in the range of 10K to 100K and use a shunt capacitor to also filter unwanted noise, much as was done with the atmospheric pressure sensor.

Fascinating Wind Vane.

The main PIC provides +5VDC through a series 100 Ohm resistor to one side of a dual wiper potentiometer in the wind vane and ground to the other. The two wipers on the pot are brought back to an LTC1298 dual 12-bit A/D. These are all soldered to the dual wiper potentiometer.

Although there are only four metallic connections, it is recommended that you run three pairs to the wind vane as shown in Figure #9;

   +5 VDC though 100 and Ground
   Wiper #1 and Ground - grounded only at the PIC, not at the wind
   Wiper #2 and Ground - same

Fascinating Anemometer.

The main PIC provides +5 VDC through 4.7K and ground. The anemometer provides a sealed reed switch that provides a dry closure and the connection may be made to the two leads from this switch using wire nuts.

Thus, only one pair is required. If a user has one of the wind units, I assume they will probably have both. Fascinating provides a "Tee" unit and although I am certain you can probably find all of the parts for the "Tee" in a good hardware store, I'm not certain you would be much ahead as Fascinating charges less than $10.00 for the item.

Thus, the four pair approach works well. Fan three pairs from the "Tee" to the wind vane and the remaining pair to the anemometer.

Fascinating Relative Humidity Board or Equivalent.

The Fascinating board includes the relative humidity circuitry and also a temperature sensor. We have no plans to interface with the temperature sensor as the DS1820's are more accurate and much easier to interface with. However, you may opt to use this sensor in conjunction with the user A/D.

Three pairs are recommended in interfacing with the relative humidity circuitry.

   +5VDC through 100 Ohms and Ground
   555 Enable and Ground - grounded only on the PIC side
   555 Output and Ground - grounded only on the PIC side

The remaining pair may either be used to interface with the temperature sensor on the Fascinating unit or it may be used to interface with a DS1820 which is co-located with the RH unit.

We have designed the weather PIC to interface with a second RH unit, presumably an indoor unit, as well. Twisted pair isn't really necessary for very short runs, but it is hard to beat the ease of making the connections using a short run of CAT 5.

Fascinating Rainfall Collector.

The rainfall collector consists of a funnel and a tipping "bucket". When enough rain accumulates in the "bucket", it tips causing the water to empty. The tipping action causes a sealed reed switch to momentarily close.

Thus, the wiring is quite like the anemometer; a single pair connected via wire nuts.

However, one spare pair may be used to interface with a DS1820 packaged in a small length of tubing.


In summary, the cabling for a full system would consist of a CAT 5 run to the anemometer and wind vane, one run to each relative humidity unit and one run to the rainfall collector and possibly one run to a DS1820 if you decide not to co-locate the DS1820 temperature sensor with the relative humidity sensor or rainfall collector.

I would assume that in most installations, the total amount of cable would be in the range of 100 to 200 feet. This is available from Jameco for $15 to $30.

Quantities, Accuracy and Calibration.

This section discusses the interpretation of the quantities passed back to the PC by the main PIC processor, discusses accuracy and offers techniques for calibration for each feature as applicable.

DS1820 Digital Thermometer.

Dallas rates the accuracy of the DS1820 as follows;

   0-70 degrees C  +/- 0.5 degrees C
   -55 to 0 degrees C +1.0, -2.0 degrees C
   70 to 125 degrees C +2.0, -1.0 degrees C

There is no degradation due to the system. That is, a reading is either successful or it isn't. In performing the measurement, we do use a cyclic redundancy algorithm and if there is a CRC error, an asterisk is returned in pace of the reading.

The resolution is 0.1 degree C.

It is somewhat unnerving to have two DS1820 devices side by side at the same temperature and note a 0.8 degree C temperature difference. You may wish to establish a reference and in your software, you may wish to add or subtract constants as shown.

   T1_corrected = T1_reading + 0.3
   T2_corrected = T2_reading - 0.3

In early '98, there was a disturbing thread on a newsgroup concerning moisture working its way into the unit causing inaccurate readings, typically 5 or 10 degrees. Hobbyists were "cooking" the devices in an oven (definitely not a microwave) for a period of time and then sealing the devices in some manner. My reaction to all of this discussion was one of "wonderment" and I just don't know what to think.

Dallas Semiconductor is a quality manufacturer with a wealth of innovative designs and the DS1820 has become the rather much of a standard in temperature measurement and I have my doubts as to whether Dallas could afford such a problem for any extended period of time. We have been selling an 8-channel temperature measurement kit which uses these devices for a year and we have sold more than 1000 DS1820 devices and no one has complained of this behavior.

However, I feel obligated note this point. You can view the discussion by searching old postings on Deja News on the keyword "DS1821". The DS1821 happened to be the original focus of the discussion. It uses the same temperature sensitive counter scheme as the DS1820. However, the protocols are different and the DS1821 is not compatible with this system.

The question always arises as to just how far a distance one can extend these. In testing our temperature measurement system we used 150 feet of twisted pair cable and attempted to induce noise into the line using a 2-meter handheld amateur radio and such notorious noise generators as hair dryers and electric drills so as to cause measurement failures. We were unable to do so and feeling that 150 feet (nominally 50 meters) was not an unduly restrictive limitation we specified the maximum cable distance as 150 feet.

I have read on newsgroups of people extending the range to some 1000 feet. One nice thing about hobby applications where no money or lives are riding on whether the device performs properly is that you can extend the distance as far as you can get away with. When you begin the get asterisks for readings, the CRC is failing and you have gone too far.

Note that the limits of operation are -55.0 to +125 degrees C (corresponding to -67 to 257 degrees F). The low limit may cause some problems at times in Alaska and the northern tier of states in the US.

.Atmospheric Pressure

The Morgan Weather PIC measures atmospheric pressure which is commonly termed station pressure.

The A/D converter used to measure the output has a 12-bit resolution providing 4096 bands over the range of 0.0 to 5.0 Volts. Thus, in theory, we could provide a resolution of 0.25 millibars. However, there is a degree of noise associated with any processor system and in spite of terminating the output of the MPX4115, using a shunt capacitor and performing 256 measurements and then averaging them, there was still too much "bobble" from one measurement to the next when we attempted to display the measured quantity with greater precision greater than 1.0 millibars. Thus, we opted to display atmospheric pressure with one millibar resolution.

But, even now, there is some "bobble". The measurement will be consistent for five minutes and then there will be a one time reading which is 2 millibars above what we continuously saw.

Short of a complete redesign of the entire system, where the processor goes to sleep while the A/D measurement is being performed, we just can't do any better and I am uncertain the situation is hopeless.

In your program, you might note such an inconsistency and on seeing one, make another measurement or you might apply some type of weighting scheme to the current measurement and the last four measurements.

Single Point Calibration.

The following discussion deals with how to perform a one time calibration such that your unit does in fact accurately measure station pressure and how to convert this to sea level pressure.

Of course, in the US, we have one system and just about everyone else has another. The discussion focuses first on the SI system and then with "our" system.

For Most of the World.

Note that station pressure varies with altitude in accordance with the following expression;

(1) P_station = P_sea_level * exp (-z/H)

Where z is the height above sea level in meters and H is 7000.

For example, assume a local radio station announces the barometric or sea level pressure as 1013

millibars (or hectoPascals) and you live in the mountains at 1760 meters. From equation (1), your station pressure is;

    P_station = 1013 * exp(-1760/7000)

              = 788 millibars

Assume you observe that the Morgan Weather PIC is reporting 802 or 14 millibars too high. You then know that;

    P_station = P_measured - 14

Note that this is a one time calibration.

By rearranging equation 1, you have an expression which permits you to then convert your station

pressure to sea level pressure.

(2) P_sea_level = P_station / (exp (-z/H).

In this example;

    P_sea_level = (P_measured - 14) / (exp (-1760/7000))
                = 1.28 * (P_measured - 14)

Thus, in developing your monitoring program, you might consider something of the following form.

#define ALTITUDE 1770.0
#define P_CORRECTION -14


float P_measured, P_station, P_sea_level;


   // get P_measured from the serial weather PIC

   P_station = P_measured + P_CORRECTION;
   P_sea_level = P_station / (exp(-ALTITUDE/7000));


For the United States.

For those of us more comfortable with inches of mercury, feet above sea level and such, equation (1) may be written as;

(3) P_station_in_Hg = P_sea_level_in_Hg * exp (-z_ft/H_ft)

where z_ft is the number of feet above sea level and H_ft is 22,965.

Assume, you live in Denver at 5200 feet and hear on the radio that the barometric pressure is 30.03 inches of mercury.

    P_station_in_Hg = 30.03 * exp(-5280/22965)

                    = 23.86 inches of mercury

But, alas, the Morgan Weather PIC uses millibars. Converting from millibars to inches of mercury is simply a matter of multiplying by 0.02953.

That is;

    P_meas_in_Hg = 0.02953 * P_meas_millibars

After performing this calculation, assume, the measurement result is 23.76. Clearly, your unit reads 0.1 inches of mercury low.

        P_station_in_Hg = P_meas_in_Hg + 0.10


        P_station_in_Hg = (P_meas_millibars * 0.02953) + 0.10

Rearranging equation (3);

(4) P_sea_level_in_Hg = P_station_in_Hg / exp(-5280.0/22965.0)

Thus, in developing your monitoring program, you might consider something of the following form.

#define ALTITUDE 5280.0
#define H_FT 22965.0
#define P_CORRECTION 0.10


float P_measured, P_measured_in_Hg, P_station_in_Hg,


   // get P_measured from the serial weather PIC
   // this is in millibars

   P_measured_in_Hg = 0.02953 * P_measured; 
                           // convert to inches of Hg 

   P_station_in_Hg = P_measured_in_Hg + P_CORRECTION;

   P_sea_level_in_Hg = P_station_in_Hg / (exp(-ALTITUDE/H_FT));



A one time correction term of the measured pressure is required. Configure your system to observe the raw data from the Serial Weather PIC (P_measured). Obtain a good reference barometric pressure (P_sea_level) from your area.

For people working with millibars and meters your station pressure is then;

    P_station = P_sea_level * exp (-z/7000)

where z is your altitude in meters.

Your correction is;

    P_correction = P_station - P_measured

After performing this one time calibration, use the raw data P_measured in your monitoring program.

   P_station = P_measured + P_correction
   P_sea_level = P_station / (exp (-z/7000))

For users in the United States;

   P_station_in_Hg = P_sea_level_in_Hg * exp (-z_ft/22965)
   P_measured_in_Hg = 0.02953 * P_measured

Your correction is then;

   P_correction = P_station_in_Hg - P_measured_in_Hg

After performing the one time calibration, use the raw data P_measured in your monitoring program;

   P_measured_in_Hg = 0.02953 * P_measured
   P_station_in_Hg = P_measured_in_Hg + P_correction
   P_sea_level = P_station_in_Hg / (exp (-z_ft/22965))

Wind Direction.

The resolution is one degree.

Note that the nature of the Fascinating Electronics design in using a dual wiper potentiometer does not impose any orientation limitation on the user. There is no "dead zone" and thus no need to orient such that the wind doesn't blow from that direction.

In fact, there is no need to observe any orientation guidelines. Rather, simply mount it and then structure your program to add a constant.

   WD_corrected = WD_reading + constant
   WD_corrected = WD_corrected % 360

The second statement assures that the result is in the range of 0 through 359. Note that in C, the "%" is the mod operator. This differs from one language to another.

Wind Gust and Wind Speed.

The theory of the anemometer is that the cups turn and the speed is a function of the wind speed; each revolution over a 963 ms period corresponds to one kM/hr. This is a function of the mechanical design of the anemometer and it is difficult for me to believe this will vary all that much from one unit to another.

However, if you do notice a difference between this system's reading and a reference it is suggested that you develop a constant.

For example, assume your system indicates 49 kM/hr and a reference reports 55.

   WS_corrected = 55.0/49.0 * WS_measured

This also extends to wing gust.


Note that the reading is simply an accumulated count which, unlike wind gust, is not cleared after a measurement is performed.

Thus, if a difference is desired, the prior value must have been saved.

   RN_diff = RN_meas_new - RN_meas_prior
   if (RN_diff < 0)
      RN_diff = RN_diff + 10000

Note that the "if" statement takes care of the case where the accumulator rolls over from 9999.

Fascinating notes that the sensitivity is approximately 0.005 inches (which is approximately 0.02 mm) per tip. Thus;

   RN_diff_inches = 0.005 * RN_diff // inches

or  RN_diff_cm = 0.002 * RN_diff // centimeters

Fascinating offers that this may be calibrated by comparing this with a manual rain gauge after a substantial amount of rain has been collected.

I'm not at all certain, anyone will do this, but in case you do;

   RN_diff_corrected = k1 * RN_diff

Relative Humidity.

Relative humidity is measured by turning on a remotely located 555 clock which uses a capacitor which changes as a function of relative humidity. The main PIC processor measures the frequency by opening 200 five ms intervals to the PIC's on-board counter thus, counting the number of transitions over one second.. The main PIC then calculates the capacitance and returns this value to the PC in picofarads with a resolution of 0.1 pFd. For example;

   H1 187.3

The reason for returning the capacitance is that the uncertainties associated with the circuitry are such that it was impossible to return percentage RH values without passing results that appear ridiculous; say 233 percent RH. The use of capacitance permits the user to perform calibrations and apply a relatively simple expression for calculating RH. Further, it leaves the door open for users who may want to use an alternative capacitive type sensor.

Two such 555 circuits may be accommodated. The PIC uses one of the PIC outputs associated with the A/D measurement circuit to control a 74HC158 quad two input data multiplexer to gate first one and then the other to the on-board counter. If one or the other is not found by the PIC, an asterisk is returned.

   H1 *
   H2 213.9

The 555 clock and associated circuitry including the Philips relative humidity sensitive capacitor and a printed circuit board may be purchased from Fascinating Electronics (WEA-TH $24.95).

The Fascinating unit uses a 555 in an astable arrangement with R1 = R2 = 1.0 Megs and a Philips 2322 691 90001 humidity sensitive capacitor.

(An alternative to the Fascinating unit is to use the 555 circuitry we have provided and simply purchase the Philips 2322 691 90001 humidity sensitive capacitor from Newark Electronics).

Note that the period T is;

(1) T = (R1 + 2*R2) * C * ln(2)

For R1 = R2 = 1.0 MOhm;

   T = 2.07944e6 * C

Thus, knowing the period, the value of C is calculated by the PIC;

   C = T / 2.07944e6
     = 1/(counts_per_sec * 2.07944e6)


(2) C_pFd = 4.808987e6 / counts_per_sec

Note that the main PIC processor performs all of these calculations.

The Philips element is nominally 122 pFd at 43 percent humidity with a slope of 2.5 percent RH per pFd.

Thus, in theory, the user may calculate relative humidity;

(3) RH = 2.5 * (C_pFd - 122) + 43


   RH = 2.5 * (C_pFd) - 262

Note that the general form of the expression is;

(4) RH = k1 * C_pFd + k2

Unfortunately, theory and reality are not always the same.

In experimenting with the 555 arrangement, we observed that even for an accurately known capacitance, the period was longer than expected and even more unsettling was that this varied from one 555 to another. Thus, the capacitance was being calculated as some 20 to 50 pFd larger than it was.

I assume this is the result of some capacitance on the input of the 555 and propagation delays associated with the 555.

Note that 20 to 50 pFd corresponds to an additional 50 to 125 percent RH. In addition, the Philips device is nominally 122 pFd at 43 percent RH. But, that 122 pFd is plus or minus 15 percent and 15 percent translates to 18 pFd or another 46 percent of unknown RH.

However, all is not lost. We tested 555 circuits up to 100 degrees C and sprayed half a can of Quick Freeze on one 555 and found that the falsely high period associated with the 555 did not change.

And, although the initial tolerance of the Philips sensor is poor, one assumes it is stable for a specific device

Thus equation (4) might be expressed as

(5) RH = k1 * (C_RH_pFd + C_TOL + C_555) + k2

(6) RH = k1 * C_reading + k2

Thus, the user might perform either a single or dual point calibration to accuarately determine K2 or both k1 and k2.

That is, assume k1 is 2.5, and solve for k2 using one reference relative humidity. The reference might be obtained using a local weather report or using another RH meter.

(7) k2 = RH_ref - k1 * C_reading_ref

If you are so inclined, you might perform a two point calibration and solve the two simultaneous equations for k1 and k2.

   RH_ref_1 = k1 * C_reading_ref_1 + k2
   RH_ref_2 = k1 * C_reading_ref_2 + k2  

Then use expression (6) in your monitoring program.

There are any number of obtaining that second point.

Wait around long enough for the humidity to markedly change.

Or put a bowl of water in a microwave and give a small blast (without the electronics in the microwave). Then put a Radio Shack hygrometer along with the 555 circuit in there (without turning on the microwave) and allow time for the whole thing to reach a steady state.

If you are really intent, there are a number of salts which when saturated and kept in a closed container will result in an equilibrium.

	Salt		Equilibrium at 25 degrees C

	Ammonium Sulphate 	 80 percent
	Ammonium Nitrate  	 62
	Potassium Carbonate 	 43
	Potassium Acetate  	 22

I don't happen to have these things around and don't know where to get them. I believe that ammonium nitrate was the prime ingredient in the Oklahoma City bombing which was all I had to note before abandoning this idea for a number of reasons.

G CAP 2.

We spent a considerable amount of time investigating the G CAP 2 manufactured by General Eastern Instruments.

This appears to be a better unit than the Philips unit. It appears far more rugged.

This is rated at 147 pFd at zero percent humidity with a slope of 3 percent RH per pFd. In fact, GEI trims these to within one pFd and rates the slope as being accurate to within 2 percent.

If this were substituted for the Philips unit in the 555 circuitry, the user could, in theory, calculate the humidity as;

(8) RH = 3 * (C_pFd - 147) 


   RH = 3 * (C_pFd) - 441

Looking again at expression (5)

(5) RH = k1 * (C_RH_pFd + C_TOL + C_555) + k2

Note that C_TOL is virtually eliminated. However, the C_555 term remains and the bottom line is that a very accurate capacitance in parallel with an unpredictable capacitance doesn't buy one a great deal.

However, some users may wish to substitute the GEI unit in place of the Philips.

Note that if a single point calibration is used, assume K1 is 3.0 and solve for k2;

   k2 = RH_ref - k1 * C_meas

The RH is then calculated as;

   RH = 3 * C_meas + k2

If a dual calibration is used, the procedure is the same as with the Philips unit.

On finding, the G CAP, we were quite excited. However, if a dual calibration technique is used, there really is no advantage over the Philips except that it appears more rugged. Thus, we abandoned it in favor of the Fascinating board which uses the Philips unit.

However, by returning relative humidity as a capacitance we tried to leave the door open for users who opt to use the G CAP.

Appendix I

Content of Basic System and Add-on Packages

In the following all of the parts contained in the basic system kit and the add-on kits are detailed. Please inspect your packages. We try real hard not to make errors, but we do. If you find that anything is missing, please send me e-mail right away as the chances are good that the error is not confined to only you.

The dollar figures indicate the cost of a replacement part. You may note that the sum of the replacement costs is less than we actually charge for the packages. Indeed, there is some markup to cover all of the cost associated with developing this package and putting it together. Clearly, we could correct the disparity by charging a bit more for the replacement parts, but you invested in the package and we really want it to work for you.

Clearly, replacement parts are available only to those who have purchased the system.

Basic System.

1 This Documentation. ($5.00)

1 7805 Regulator Kit consisting of a 7805 with heat sink, two 47 uFd capacitors, 1N004 diode and LED ($2.00)

1 Programmed PIC16C558 Main Processor ($7.00)

1 4.0 MHz Ceramic Resonator ($0.75)

1 DS275 Transceiver ($3.00)

2 Dallas DS1820 Digital Thermometer ($5.50)

1 74XX158 Quad 2-Input Multiplexer ($0.50)

1 Resistor SIP Network (4.7K) with terminals 4, 5, and 6 removed (5/$1.00)

1 Resistor SIP Network with terminals 2 and 6 removed.

1 100 Ohm Resistor (brown - black - brown)

3 330 Ohm Resistor (orange - orange - brown)

2 10K Resistor (brown - black - orange)

1 555 Kit consisting of 555, two 1 Meg resistors, 100 Ohm resistor, 150 pFd capacitor and 0.1 uFd cap. ($1.00)

1 Logic Probe Kit ($5.00)

Short length of heat shrink tubing.

Miscellaneous lengths of 22 AWG solid wire for breadboarding.

Atmospheric Pressure and User A/D Add-On.

1 LTC1298 Dual 12-bit A/D ($8.00)

1 MPX4115AP Pressure Sensor ($20.00)

1 1K Resistor (brown - black - red)

2 10K Resistor (brown - black - orange)

2 100K Resistor (brown - black - yellow)

2 50,000 pFd capacitor

Wind Direction and Speed and Rainfall Add-On.

1 LTC1298 Dual 12-bit A/D ($8.00)

1 PIC12C508 - RAIN ($3.50)

1 PIC12C508 -WIND ($3.50)

2 4.0 MHz Ceramic Resonator ($0.75)

1 1K Resistor (brown - black - red)

1 100 Ohm Resistor (brown - black - brown)

2 330 Ohm Resistor (orange - orange - brown)

2 100K Resistor (brown - black - yellow)

2 50,000 pFd Capacitor (10/$1.00)

2 1.0 uFd Cap - Electrolytic (10/$1.00)