As shown in Figure 2, the autodialer is based on a
PIC16F876A microcontroller which controls the user
interface (a 2x20 character LCD and three pushbuttons),
monitors the sensors, and sends data to the telephone
line interface. The LCD is based on the standard
HD44780 controller and uses a four-bit data interface.
Note the presence of R2, a 4.7K pull-up resistor on open-drain pin RA4 that is needed for reliable output function.
Although I have used RA4 as an output without a pull-up
resistor in other projects, I wasted several hours with this
device proving to myself that it
doesn't always work without the
pull-up resistor. Figure 3 shows the
main board which is actually a
leftover custom-made part from a
previous project. I recommend
that any time you have a custom
board made, design as much
flexibility into it as you can (extra
pads, traces, and pads on all IC
pins, etc.) so that you can use any
extras for other projects.

The Maxim (formerly Dallas
Semiconductor) DS1621 is a very
capable and easy-to-use part for
measuring and controlling
Centigrade. A standard two-wire I2C interface to the PIC
with two pull-up resistors is all that is needed. As it is the
only device on our I2C bus, its address is set to zero by
grounding all three of its address pins. The Tout pin —
which can be used as a thermostat output — is not used
in this project. The part I'm using was scavenged from an
old laptop where the Tout function was used to control
the CPU fan. I have mounted it on a separate circuit
board (Figure 4) that protrudes from the case, so it can
better measure the ambient temperature.