www.fgks.org   »   [go: up one dir, main page]

Skip to main content

Full text of "Electronic computer projects for Commodore and Atari personal computers"

See other formats


Electronic 
Computer 
Projects 

for Commodore and Atari 
Personal Computers 

Soon Sivakumaran 



COMPUTE! Publications,!^ 

Part of ABC Consumer Magazines, Inc. 
One of the ABC Publishing Companies 

Greensboro, North Carolina 



Copyright 1986, COMPUTE! Publications, Inc. All rights reserved. 

Reproduction or translation of any part of this work beyond that permitted by 
Sections 107 and 108 of the United States Copyright Act without the permission of 
the copyright owner is unlawful. 

Printed in the United States of America 

10 987654321 

ISBN 0-87455-052-1 

The author and publisher have made every effort in the preparation of this book to insure the ac- 
curacy of the programs and information. However, the information and programs in this book are 
sold without warranty, either express or implied. Neither the author nor COMPUTE! Publications, 
Inc., will be liable for any damages caused or alleged to be caused directly, indirectly, incidentally, 
or consequentially by the programs, information, and/or projects in this book; nor liable for any 
accidents or errors in the implementation of the projects, the handling of any materials for the 
projects, and for any damage that may result to any individual or equipment. 

The opinions expressed in this book are solely those of the author and are not necessarily those of 
COMPUTE! Publications, Inc. 

COMPUTE! Publications, Inc., Post Office Box 5406, Greensboro, NC 27403, (919) 
275-9809, is part of ABC Consumer Magazines, Inc., one of the ABC Publishing 
Companies, and is not associated with any manufacturer of personal computers. Atari, 
Atari 400, Atari 800, Atari XE, and Atari XL are trademarks of Atari Corporation. 
Commodore 64, Commodore 128, and VIC-20 are trademarks of Commodore 
Electronics Limited. Radio Shack is a trademark of Tandy Corporation. 



Contents 



Foreword v 

Preface vii 

1 Getting Inside Your Computer 1 

2 Exploring the Control Port 7 

3 Making a Joystick 21 

4 Game Paddles 31 

5 An Analog Light Sensor 43 

6 A Light Pen 51 

7 A Digital Light Sensor 65 

8 An Electronic Switch 79 

9 A Burglar Alarm 95 

10 Digital Logic 107 

1 1 A Better Logic Probe 121 

12 More Ideas 127 

1 3 Robotics 1 49 

Appendices 163 

A COMPUTEI's Guide to Typing In Programs 165 

B Integrated Circuits 171 



Index 181 



Foreword 



Your personal computer is a powerful machine. It can calcu- 
late faster than any clerk, print documents faster than any typ- 
ist, and play chess with the masters. Your software library is 
probably full of such applications, along with games, utilities, 
and educational software. 

But a computer can do a lot more than run software. It can 
be a sophisticated controller which turns lights on and off, 
monitors your home's windows and doors, and makes robot 
limbs move. To accomplish these tasks, however, you need 
sensors, motor circuits, and other electronic devices. That's 
why you need Electronic Computer Projects. 

This book is a step-by-step guide to building a variety of 
electronic devices, from the simple to the sophisticated. With 
complete and concise instructions anyone can follow, and ac- 
companied by detailed photographs and figures, Electronic 
Computer Projects is the book with which you can teach your 
Commodore or Atari personal computer valuable new tricks. 

Parts lists outline what you need, the instructions show you 
how to do everything from heating the soldering iron to plug- 
ging in the last component, and programs test and adjust each 
project. 

Learn how to build your own joysticks, game paddles, and 
light pens. See how to put together two kinds of light sensors, 
even how to create a burglar alarm with an infrared sensor 
that "sees" in the dark. Logic probes, which let you "look" 
into digital circuits, multiplexers and demultiplexers, even 
robotic motor control circuits are all part of this book's intrigu- 
ing and educational projects. Each project has been built and 
tested — you won't find any surprises when you connect a de- 
vice to your computer. 

Electronic Computer Projects is a thorough guide to your ad- 
venture into computer control of the outside world. 



Preface 



Computers are versatile machines which can be programmed 
to perform tasks quickly and accurately. These tasks, or appli- 
cations, run the range from games and word processing to fi- 
nancial modeling or controlling the lights and heat in your 
home. 

Most computer applications, at some point in the process, 
involve a program which processes data, or information. A 
video arcade game is a good example. Here, the data is en- 
tered by the player through a joystick — the processing the 
program performs is the motion of the character on the screen. 
Another example, word processing, lets you enter text (the 
data) and process it (by formatting it properly and printing it 
out). These kinds of applications are certainly useful, but they 
aren't the end of your computer's capabilities. 

A vast majority of computer applications are limited to act- 
ing only on data entered by the user, either from the keyboard 
or the joystick. Yet some of the most interesting applications 
result when computers interact with the outside world. A com- 
puter which can examine its surroundings can then use this 
information to perform a useful function. Imagine your com- 
puter, sensing that it's now dark outside, turning on your out- 
side lights before you arrive home from work. 

Computers have made possible systems which can control 
extremely complex operations. The software, or programs 
which instruct a computer to do a specific task, is in fact a 
form of intelligence — if written correctly, the programs can re- 
act to different conditions in predetermined ways. 

This book will show ways you can use your computer to re- 
late and react to the outside world. This is done through sen- 
sors and actuators. Sensors gather information from the outside 
world for the computer to process. Actuators allow the com- 
puter to influence outside events. Several of the projects put 
sensors and actuators together so that the computer can per- 
form a given task. 

To help you get started, the first few projects in this book 
are relatively easy to complete. As your experience increases, 



vii 



Preface 



so does the difficulty of the projects. If you're new to electron- 
ics, then, start with the first projects in the book, developing 
your skills as you progress toward the later, more difficult, 
projects. But even though the projects increase in difficulty, 
you won't need any exotic equipment or advanced skills to 
complete them. 

Almost all the projects contain less than a half-dozen com- 
ponents. You'll have little difficulty with any of the projects, 
but you should have some understanding of electronics trouble- 
shooting procedures. 

Building a Circuit 

The basic idea when building a circuit is to wire together the 
components' leads correctly. Occasionally, even experienced 
builders make mistakes in wiring circuits. It's an excellent idea 
to completely read through each section describing the circuit's 
construction before starting. Color-coded wires can help in 
tracing circuits. Examine the drawing of the breadboard layout 
included in the book, and study the schematic diagram. When 
you feel you understand what the circuit requires, go ahead 
and wire your test circuit. 

Several methods of wiring, or breadboarding, circuits are 
available and suitable for the projects in this book. One 
method involves mounting the components on a perforated 
board. The components are positioned on one side of the 
board so that their leads extend through the perforations to 
the opposite side. The leads on the bottom are then connected 
by wires soldered between them. 

A similar method, called wire wrapping, requires that each 
component be mounted in a socket before being placed on the 
perf board. Each socket has metal posts which make contact 
with the leads of the component. The posts extend through 
the holes. Wire connections are made by wrapping one end of 
a wire around one post and the other end of the same wire 
around a second post. This is done with a wire wrap tool. 

Most commercial electronic circuits, however, are con- 
structed using printed circuit boards. Printed circuit boards are 
copper plated on one or both sides. When making a circuit 



viii 



Preface 



using printed circuit boards, you must first determine the loca- 
tion of components on the board. Then, the interconnections 
between the components' leads are marked on the board with 
an indelible felt-tip marker. The board is submersed in a 
chemical solution which dissolves all copper from the board 
except that along the traces you've marked. The copper traces 
which remain form the connections between the components. 
Commercial manufacturers prefer this technique because 
boards can be produced in large quantities quickly and 
cheaply with photographic techniques. 

Your best bet is to use solderless breadboards, like those 
available from Radio Shack. (Radio Shack's Experimenter 
Socket, part number 276-174, was used to construct all the 
projects in this book.) 

A solderless breadboard is a plastic board with a grid of 
"holes" called plug points (see Figure 1). The plug points are 
internally wired so that the columns of points on each half of 
the board are connected. A row of plug points on each half of 
the board are connected as well. To hook up a circuit, compo- 
nents are just plugged into the solderless breadboard. A con- 
nection between two component leads can be made simply by 
inserting each lead into plug points that are internally con- 
nected. No soldering is required. Alternatively, jumper wires 
can be used to bridge one set of connected plug points with 
another to complete a connection. Jumper wires should be #22 
gauge, as larger wires tend to spread the contacts of a plug 
point too far apart, eventually ruining the breadboard. These 
solderless boards may be reused for different experiments 
without removing solder from connections. Most wiring ex- 
planations in this book refer to coordinates on the solderless 
breadboard. 

Heat the Iron 

Even if you use a solderless breadboard when constructing the 
circuits in this book, you'll still have to do a little soldering. 
While you won't have to do intricate soldering, wires still 
must be attached to switches, the connectors which plug into 
your computer, and other components that cannot be directly 



ix 



Preface 



• i * • * 



•—- • — » — * — • 



* e * # 



c 
o 
a 

a> 

3 

a 

O 

£ 



Preface 



plugged into a solderless breadboard. Soldering is the only re- 
liable method of making these connections. 

To make solder connections, you need a pencil soldering 
iron (approximately 25 watts) and some electronic resin core 
solder. Make sure the solder you use is suitable for electronic 
work — some types of solder used in other applications use a 
corrosive resin. The steps to make a solder connection are 
listed below. Try soldering some practice connections with 
scraps of wire before soldering on one of the projects. 

1. Make sure the joint you're going to solder is free of dirt and 
grease. The solder will not bond properly if it's not clean. 

2. Try to make the joint as firm as possible before soldering. If 
you're joining two wires, twist them together. When con- 
necting to a terminal, like that of a switch, twist the wire 
around it. Doing this makes the connection more reliaible, 
as a dab of solder by itself will not hold a connection to- 
gether for long. If you're using stranded wire, twist the 
strands together before making the connection. This will 
prevent stray strands from shorting out nearby connections. 

3. When you're soldering an electronic component such as a 
transistor or IC (integrated circuit) chip, attach an alligator 
clip to the lead of the component just above the point 
where you're going to make the connection. The metal alli- 
gator clip acts as a heat sink, drawing heat away from the 
component, preventing damage. 

4. Plug in the soldering iron and wait until its tip is hot 
enough to melt solder. 

5. Touch the tip of the soldering iron to the joint and wait a 
couple of seconds for it to heat up. 

6. Touch the solder to the joint, not the tip of the soldering 
iron. Remember always to heat the work surface, not the 
solder. Some solder should flow onto the joint. Remove the 
remaining solder from the joint and then remove the solder- 
ing iron. A minimum amount of solder should be used 
when making a connection. Excess solder not only looks 
sloppy, but can cause short circuits. 



xi 



Preface 



7. A good solder connection is bright and shiny. If it's a dull 
gray, you have what's called a cold joint. If this happens, re- 
make the connection. A poor solder joint can cause an other- 
wise perfect circuit to fail. 

8. Sometimes it will be necessary for you to tin, or coat, the 
leads to a component with a thin coating of solder before 
establishing a connection. Tinning helps remove oxidation 
and cleans the service, providing a better electrical and me- 
chanical connection. 

9. When you're finished soldering, wipe the tip of your solder- 
ing iron on a damp sponge to remove any excess solder and 
resin. The tip should be a silver color, without any trace of 
dirt or foreign objects. This practice will increase the useful 
life of the tip. Be sure to unplug the soldering iron as well — 
an unattended hot iron is a fire hazard. 

In Your Toolbox 

Besides a soldering iron, there are a few other tools you'll 
need. A pair of small wire cutters and a wire stripper are 
handy, but you can strip insulation from a wire with a knife if 
you're careful not to nick the conductor. Needle-nose pliers 
are useful for twisting and untwisting wire, and for reaching 
tight spots too small for your fingers. A drill and a screwdriver 
are required for some of the projects to mount the circuits in 
a case. 

Since you'll be working with integrated circuits (ICs), an IC 
extractor will be handy for removing the IC chip from the cir- 
cuit board. You'll find that the pins of the ICs are very easy 
to bend. 

If the circuit doesn't give the results you expect after you've 
carefully built it, compare your circuit to the diagram in the 
book. Are all the pins properly connected? Is the IC inserted 
correctly? Have you entered the program designed to use the 
circuit properly? Most programs included with this book are 
short, so you should have little trouble entering them cor- 
rectly. To make this part of the job even easier, use "The 
Automatic Proofreader" found in Appendix A — it's an error- 



xii 



Preface 



checking program which insures that you type in the program 
correctly the first time. 

Each circuit described in this book has been thoroughly 
tested. The circuits and the demonstration programs will work 
as explained in the text, providing you follow the instructions 
carefully. 

All projects are designed to operate with the Commodore 
64, Commodore 128 (in 64 mode), and VIC-20, and with the 
Atari 400, 800, 600XL, 800XL, and 130XE personal computers. 
The electronics involved is virtually identical for all these com- 
puters, but the programs differ. Be sure to use the correct pro- 
gram for your computer. 

Have fun building the projects. Experiment with your own 
ideas. By the time you've finished the last project, you should 
understand how to interface your computer to almost any- 
thing. At that point, your own imagination will take control. 

Help's on the Way 

To make it easier for you to use this book, you'll see small 
graphic devices, called icons, throughout the book. These cues 
will alert you to specific sections of each chapter: 

shows you where the parts list for each project is 
located. The number of components, their names, 
and their Radio Shack part numbers are provided. 

points out where the step-by-step instructions for 
building each project begin. Steps are numbered 
and are self-explanatory for the most part. 

indicates that a testing procedure is described, or 
that a program will follow. After you've finished a 
project, you'll almost always be shown ways to 
test it under working conditions to insure that it 
operates as advertised. 

calls your attention to various warnings and/or 
notes on a project. 







xiii 



CHAPTER 1 



Getting Inside 
Your 
Computer 



Getting Inside Your 
Computer 



A computer is really nothing more than a series of 
switches. Of course, it's a highly complex series of 
switches. Thousands and thousands of them. Like 
any switches, those you find in a computer can 
have two positions, on or off. Storing information 
in a computer is simply a matter of setting a se- 
quence of switches on or off. If the switch is on, its 
value is 1 . If the switch is off, it holds a value of 0. 

The digital circuits used in computers are 
switches which perform a specified series of ac- 
tions, all based on the information in the on and 
off states of the circuit. Everything in a digital cir- 
cuit is either on or off, unlike analog circuits, 
found in things like radios and televisions, which 
deal with voltage levels and signals. Analog cir- 
cuits may amplify or otherwise modify electronic 
signals of various levels. 

These on and off states within a computer are 
represented as electronic signals of two different 
voltage levels. In the computers this book deals 
with, an on state corresponds to a signal of about 
+ 5 volts, while the off state corresponds with a 
signal of about volts. (Actually, a positive volt- 
age more than 2.5 volts is considered on, and a 
voltage less than 0.5 volts is considered off. This is 
called a TTL, or transistor-transistor logic signal 
level.) 

Since a switch can exist in only two states, on 
or off, what information can be represented? Sim- 
ple — one of two numbers. The on state can be as- 
signed to mean the number 1, and the off state 
can be the number — the two digits which make 
up the base two binary number system. The bi- 
nary number system naturally lends itself for use 



3 



CHAPTER 1 



with the digital logic circuitry in a computer. Un- 
fortunately, we're used to counting by ten. The 
number 65, for instance, has far more meaning to 
us than its binary equivalent, 1000001. 

Dealing with numbers at the binary level is best 
left to the computer, but when you're trying to in- 
terface your computer to the outside world, it's 
often necessary to know and understand how set- 
ting a bit in a memory address within the com- 
puter affects the machine and its operation. 

Number Systems 

The binary number system is just another way of 
representing numbers. The number system we 
normally use, the decimal number system, is a 
base ten number system. In other words, there are 
ten different symbols (0, 1, 2, 9) which can be 
used independently or in combination to represent 
a given number. The value of the number repre- 
sented depends on both the combination of sym- 
bols and their relative positions. Let's take a look 
at how a decimal number is made up, for example 
37,506. 

Position 43210 
Decimal number 37506 











Decimal 


Symbol 




Base 


Position 


Value 


3 




10 


~4 


= 30,000 


7 


* 


10 


'3 


7,000 


5 


* 


10 


"2 


500 





* 


10 


"1 





6 


* 


10 


A o 


6 

37,506 



As you can see, the first symbol, 3, represents 
three times ten to the fourth power (in other 



4 



Getting Inside Your Computer 



words, a 3 followed by four zeros). In the same 
manner, each symbol represents a number multi- 
plied by a power of ten (the power is determined 
by the symbol's relative position). Adding all 
these values together gives us the number 37,506. 

The binary number system has just two sym- 
bols, and 1. A Binary digiT, or bit, can thus be 
either or 1. One bit by itself can only be used to 
count up to one. Larger numbers in binary, as in 
the decimal number where you can represent 
larger value numbers with more digits (a number 
like 245 requires three digits, whereas the number 
4 requires just one), are represented by more bits. 
As you can see in the following example, a binary 
number is made in a similar manner as a decimal 
number. 



Position 76543210 
Binary number 11111001 











Decimal 


Symbol 




Base 


Position 


Value 


1 


* 


2 


y 


128 


1 


* 


2 


% 


64 


1 


* 


2 


*5 


= 32 


1 


* 


2 


'4 


16 


1 


* 


2 


~3 


8 





* 


2 


'2 








* 


2 


"1 





1 


* 


2 


~0 


= 1 
249 



Just as with the more comfortable decimal num- 
bers, binary numbers are built by combining sym- 
bols, then multiplying those values by two (since 
binary is base two) raised to the power of the 
symbol's position. A 1 in the seventh position, 
then, represents the decimal value 128, while a 1 
in the first position only represents 1. 



5 



CHAPTER 1 



Here are a few more examples of how decimal 
numbers (what we use) are represented as binary 
numbers (what computers use). Try working them 
out to see if you come up with the same values. 

Decimal Binary 

10 = 1010 

5 = 101 

134 = 10000110 

Chock Full of Bits 

In computers, bits are usually put together in 
groups of eight when stored or otherwise manipu- 
lated. A group of eight bits is called a byte. Since 
it has eight positions, a byte can hold any number 
from 00000000 binary (0 decimal) to 11111111 bi- 
nary (255 decimal). The largest number which can 
be represented by a byte, then, is 255. 

These binary values are used by the computer 
for all its operations, from executing an applica- 
tions program to representing alphanumeric, even 
graphics characters. 

Understanding the elements of the binary num- 
ber system, bits, and bytes will prove useful as 
you move into the heart of Electronic Computer 
Projects. The next chapter, "Exploring the Control 
Port," is your start toward your own custom-built 
computer projects. 



6 



u CHAPTER 2 

■ 

Exploring the 
Control Port 




Exploring the 
Control Port 



With a basic understanding of how a computer 
operates, you can now begin exploring the com- 
puter's ports, the gateways through which infor- 
mation flows into and out of your computer. The 
ports are often referred to as I/O ports, which 
stands for input / output ports. Though there are 
several different I/O ports on your computer, the 
projects in this book use one port in particular, the 
joystick port. 

The joystick port provides plenty of access to 
your computer for our demonstation circuits. Con- 
nectors for this port are also commonly available. 
They are the same type as those found on joy- 
sticks and game paddles — D-subminiature female 
connectors. 



Figure 2-1 . The Joystick Port- 




Control Port 1 Control Port 2 (Commodore 64) 



Pin 


Type 


Pin 


Type 


1 


JOYAO 


1 


JOYBO 


2 


JOYA1 


2 


JOYB1 


3 


JOYA2 


3 


JOYB2 


4 


JOYA3 


4 


JOYB3 


5 


POT AY 


5 


POT BY 


6 


Button A/LP 


6 


Button B 


7 


+ 5 volts 


7 


+ 5 volts 


8 


Ground 


8 


Ground 


9 


POT AX 


9 


POT BX 



9 



CHAPTER 2 



The joystick port has nine pins. Pins 1, 2, 3, 4, 
and 6 are I/O pins. They are connected to wires 
which may be used to communicate binary (on/ 
off) data. Pins 5 and 9 are used to input analog 
data — we'll learn more about these pins later in 
the book. Pin 7 is connected to a +5-volt source, 
while pin 8 is connected to the power supply 
ground. 

Once you can identify the pins of a control port, 
your next step is to understand how they can be 
used. A few homemade "tools" will help. 

A Simple Logic Probe 

A logic probe is a device that lets you "look" into 
what's going on in a digital circuit. It's a device 
that tells you whether a 1 (high state) or a (low 
state) is present at a point in the circuit. A simple 
logic probe can be assembled from two main com- 
ponents. This logic probe can be used to see how 
the I/O lines of the control port are used to input 
information. 

To construct the logic probe, you'll need these 
parts: 



Part 

Quantity Part Number 

1 Light-emitting diode (LED) 276-041 

1 IK ohm resistor 271-8027 

2 Alligator clips 270-378 

You'll also need some stranded copper wire 
(about #22 gauge — Radio Shack part number 278- 
1307) to make the probe leads, as well as some 
electrical insulation tape. 



(In this book, all part numbers are Radio Shack 
part numbers.) 




10 



Exploring the Control Port 



Figure 2-2. Commodore 64, VIC-20, and Atari Joystick Ports 




The joystick ports for the Commodore 64 (top). Commodore VIC-20 (middle), 
and Atari 800XL (bottom) are shown in these photos. Note that the VIC-20 has 
only one joystick port. 





CHAPTER 2 




Here's the procedure for putting together your 
simple logic probe: 

1. Cut two pieces of stranded copper wire about 
10 inches long. One wire will be the ground 
lead, while the other will be the probe lead of 
this simple logic probe. 

2. Strip about a half inch of insulation from each 
end of both wires and attach an alligator clip to 
one end of each wire. 

3. Solder the free end of one wire to the anode of 
the light-emitting diode (LED). Usually, the an- 
ode leg of an LED is the shorter of the two legs, 
but this may vary with manufacturers. The wire 
connected to the LED's anode is the probe lead 
of the logic probe. 

Note: An LED lights up when current passes 
through it in the proper direction, which is from 
anode to cathode. LEDs come in various colors, 
but the most common are red and green. An LED 
will conduct current in only one direction. It's im- 
portant that you don't confuse the anode and the 
cathode leads. In fact, if an LED fails to work in a 
circuit, the first thing to check is whether it's been 
installed correctly (see Figure 2-3). The cathode 
lead is usually the longer of the two leads. 

Figure 2-3. A Typical LED 



Anode (+) 



Cathode (-) 



12 



Exploring the Control Port 




4. Solder the cathode of the LED to one end of the 
IK ohm resistor. 

5. Solder the other end of the IK ohm resistor 



(brown, black, and red bands) to the free end of 
the second wire. This second wire is now the 
ground wire of the logic probe. 
6. To complete your simple logic probe, cover your 
soldered connections with some electrical insu- 
lation tape. This will prevent short circuits from 
occurring while you use your probe. 

Note: Resistors limit the flow of electricity in a cir- 
cuit and are measured in ohms. The value of a re- 
sistor is indicated by its colored stripes — usually 
there are four. The first two stripes' colors repre- 
sent numbers as determined by the resistor color 
code (see Table 2-1). These numbers are the first 
two digits of the resistor value. The third stripe is 
the multiplier. The number corresponding to the 
multiplier color is the power of ten by which the 
first two numbers are multiplied (an easy way to 
remember it is simply to add x number of zeros to 
the first two numbers, where x is the multiplier 
color's value). All three numbers are combined to 
give the value (in ohms) of the resistor. 

Thus, a resistor which has as its first three 
stripes (as the one you're working on has) 

Brown 

Black 

Red 

will have a resistance of 1000 ohms. The brown 
stripe provides the 1, the black stripe gives the 
first 0, and the red stripe provides the next two 0's 
(10 X 10 2 ). 

The fourth stripe represents the resistor's toler- 
ance. The tolerance gives the range, plus or minus, 
which the actual value of the resistor will be 
within when compared to the strict value indi- 
cated by the color bands. The color of this stripe 

13 



CHAPTER 2 



can be gold, silver, or salmon. The tolerances are 
plus or minus 5, 10, and 20 percent respectively. 
Sometimes you won't find a tolerance stripe on a 
resistor. This means that the resistor has a toler- 
ance of plus or minus 20 percent. If you have a re- 
sistor with brown, black, red, and silver stripes, 
for example, you have a 1000 ohm (IK ohm) re- 
sistor with a 10 percent tolerance. The actual 
value of the resistor is thus between 900 and 1100 
ohms. The circuits in this book can all use resis- 
tors with a 20 percent tolerance or better. 

Table 2-1 . Resistor Color Codes 

Color Value 

Black 

Brown 1 

Red 2 

Orange 3 

Yellow 4 

Green 5 

Blue 6 

Violet 7 

Gray 8 

White 9 

Tolerance Bands 
Color Tolerance 

Gold ±5 percent 
Silver ±10 percent 
Salmon ± 20 percent 
None ± 20 percent 

Resistors also have power ratings, which de- 
scribe the amount of energy (measured in watts) 
which the resistor can safely handle. For the 
projects in this book, you may use 1 /4- or 1 /2- 
watt resistors. A resistor, unlike many other circuit 
components, may be connected in either direction 
in a circuit. 



14 



Exploring the Control Port 



Figure 2-4. Schematic Diagram of a Simple 
Logic Probe 



+ o- 



1KB 




Using the simple logic probe is very easy. Attach 
the ground lead of the logic probe to the power 
supply ground of the digital circuit you're testing. 
Then simply touch the tip of the probe lead to a 
point in the circuit. If the point has a voltage of 
something greater than the barrier voltage of the 
LED, usually about 0.7 volts, the LED will glow. 
You can assume the point is at a logic high state (a 
1). If the point is at a voltage level less than 0.7 
volts, current will not flow through the diode, the 
LED stays off, and you can assume a logic low 
state (a 0) is present. (Of course, a zero indicates a 
voltage level less than 0.5 volts, so a problem 
could still exist with the circuit under test and not 
be detected by this simple tester.) 



15 



CHAPTER 2 



Figure 2-5. The Completed Logic Probe 




When you're finished building the simple logic probe, it should 
look something like this. 

To use the logic probe to examine the joystick 
port, a connector is required — the next simple 
tool. 



A Connector for the Joystick Port 
The actual connector that plugs into the joystick 
port is a D-subminiature female, 9-pin connector. 
Stranded copper wire (#22 gauge) should be sol- 
dered to the terminals of the connector for easier 
access. 

Here's what you'll need: 



Part 

Quantity Part Number 

1 9-pin D-subminiature female 276-1538 

You'll also need some stranded copper wire 
(about 12 feet) or ribbon cable. 




The procedure is quite simple. 



Exploring the Control Port 






1. Cut six pieces of stranded copper wire about 24 
inches long and strip about 1 /4 inch of insula- 
tion from each end. (You may wish to use rib- 
bon cable instead of wire to avoid a tangle.) 

2. Solder a wire to the terminals of pins 1, 2, 3, 4, 
6, and 8 of the 9-pin plug. 

3. Tape a tag to the opposite end of each wire 
with the number of the pin it's attached to. This 
will save you some time later. 

To use your logic probe with the connector, attach 
the ground lead of the probe to the wire from pin 



While your computer is turned off, insert the plug 
into the joystick port. (You should always make 
sure that the computer is turned off whenever you 
insert a plug into any of the I/O ports.) If you're 
using a Commodore 64 or Commodore 128, insert 
the plug into joystick port 2 on the right side of 
the machine. If you have an Atari computer, insert 
the plug into joystick port 1. 

Warning: Before turning on your computer, make 
sure that none of the wires touch each other. If 
any wires are touching, your computer could be 
damaged. Be particularly careful to inspect the 
wires from pins 7 and 8 — they should never be in 
contact. If they are, the computer's power supply 
could be damaged. 

Touch the end of your logic probe to pins 1, 2, 3, 
4, and 6. Each time you do this, the LED should 
glow. This glow will be very faint, and you may 
need to shield the LED from room light to detect 
the glow at all. This is because of the small 
amount of current available at the pins. 



17 



CHAPTER 2 



The I/O lines are connected to registers, or 
memory addresses, in your computer. The five 
pins (1, 2, 3, 4, and 6) of joystick port 2 corre- 
spond to the lower five bits of memory location 
56320 ($DC00 in hexadecimal) in the Commodore 
64 and Commodore 128. Whether you're using 
the port for input or output is determined by the 
data direction register located at 56322 ($DC02). 
Each bit controls the direction of data on the cor- 
responding bit of the port. If a bit is set to 1, the 
corresponding bit in the port is set to be used for 
data output. Setting the bit to causes the bit to 
be used for input. In the VIC-20, these lines corre- 
spond to bits in memory locations 37137 ($9111) 
and 37154 ($9122). In the Atari computers, you 
needn't worry about the memory locations af- 
fected, as the BASIC STICK and STRIG com- 
mands can be used to see the effect of the five 
I/O lines. 

The bits in these registers are normally set on 
(1) in your computer — that's why the LED of your 
logic probe should glow faintly when you touch 
the probe to any of these pins. But how can these 
pins be used to input information? 

Type in and run the appropriate version of Pro- 
gram 2-1. 

Program 2-1 — Commodore 64/128 



EX 


10 


A=56320:REM FOR PORT 1 USE 56321 


FQ 


20 


IFPEEK ( A ) AND ( 2 T ) THEN40 


PH 


30 


PRINT "PIN 1" 


RM 


40 


IFPEEK ( A ) AND ( 2 T 1 ) THEN60 


SK 


50 


PRINT "PIN 2" 


MG 


60 


IFPEEK (A) AND ( 2?2 ) THEN80 


BP 


70 


PRINT "PIN 3" 


SQ 


80 


IFPEEK ( A ) AND ( 2 T 3 ) THEN100 


ER 


90 


PRINT "PIN 4" 


AD 


100 


IFPEEK (A) AND ( 2?4 ) THEN120 


SJ 


110 


PRINT "PIN 6" 


SM 


120 


GOTO 20 



18 



Exploring the Control Port 



Program 2-1 —VIC 20 

AH 10 A=37137 

BS 20 IFPEEK(A)AND( 2T2 )THEN40 

PH 30 PRINT "PIN 1" 

GF 40 IFPEEK (A) AND ( 2T3 )THEN60 

SK 50 PRINT "PIN 2" 

SA 60 IFPEEK (A)AND( 2 T4)THEN80 

BP 70 PRINT "PIN 3" 

BX 80 POKE 37154, : IFPEEK ( 37 152 ) AND ( 2 T7 ) 

THEN100 
ER 90 PRINT "PIN 4" 

XE 100 POKE 37154,255 :IFPEEK(A)AND(2T5)T 

HEN120 
SJ 110 PRINT "PIN 6" 
SM 120 GOTO20 



Program 2-1 — Atari 

FP 10 IF STICK(0X>14 THEN 20 

EP 15 PRINT "PIN 1 " 

SA 20 IF STICK(0)<>13 THEN 30 

FB 25 PRINT "PIN 2" 

BA 30 IF STICK<0X>11 THEN 40 

FD 35 PRINT "PIN 3" 

DH40 IF STICK<0><>7 THEN 50 

FF 45 PRINT "PIN 4" 

DN 50 IF STRIB(0)<>0 THEN 60 

FI 55 PRINT "PIN 6 " 

AA 60 SOTO 10 



When you run the program for your computer, 
nothing should seem to happen at first. Take your 
logic probe and touch the probe to the wire con- 
nected to pin 8. This is the ground from the com- 
puter and should still be connected to the ground 
lead of the probe. Obviously, the ground lead and 
probe lead are at the same potential. The LED will 
not light. Since ground voltage corresponds with 
the off state, everything is working correctly. 



19 



CHAPTER 2 



Now, take the wire from pin 1 and touch its free 
end to the wire from pin 8. When you do this, 
you force the normally on pin 1 to turn off. Your 
program tells you this. If you look at the computer 
screen, the message, PIN 1 should be displayed 
on the screen. As you touch the wires from pin 2, 
3, 4, or 6 to the ground, you'll see a message 
showing which pin has been set low. By forcing an 
I/O pin to logic low, its corresponding bit in the 
register (a memory location) is set low as well. 
Since a program can PEEK into a memory location 
and check its contents, software can be written to 
detect the states (on or off) present at the control 
port, then proceed accordingly. 

In Program 2-1, your computer is sensing which 
pin you're setting low (by touching the wire from 
the pin to ground). Then it's taking this input and 
processing it; in this case it's used to print out 
messages. The next chapter will use this infor- 
mation to construct a useful input device, a 
joystick. 




20 



B CHAPTER 3 

■ 

" Making a 

Joystick 




Making a Joystick 



It may seem that a joystick, with its molded plas- 
tic parts, would be impossible to make at home. 
Open a Commodore or Atari joystick, though, and 
you'll see that it's not that complex. In fact, it only 
contains five switches. 

Four of the joystick's switches are used to detect 
the direction the control stick is pushed. The fifth 
acts as a fire button. A switch is pressed if the joy- 
stick is moved up, down, left, or right. If the stick 
is moved diagonally, two switches are pressed. 
Moving the stick diagonally up and to the right, 
for example, presses both the "up" and "right" 
switches. 

These switches are used to make the connection 
between one of the five input lines (pins 1, 2, 3, 4, 
and 6) of the control port and the ground (pin 8). 
Instead of your touching wires together, as you 
did while experimenting with the control port, 
switches are closed to make the connections. 

Since a joystick is basically a set of switches, 
you can make your own version of this device. In 
your first joystick, four push button switches are 
substituted for the control stick. The four buttons 
correspond to the directions a joystick can indi- 
cate — up, down, left, and right. To get diagonal 
directions, you'll press two buttons, the top and 
right buttons to indicate a move upward and to- 
ward the right, for instance. The fire button is a 
fifth push button switch and functions just as does 
its counterpart on a commerical joystick. 

As you can imagine, the push button joystick 
works better with some programs than with others. 
The push button joystick lets you move with 
greater control in games and in applications where 



23 



CHAPTER 3 



movement in the four main directions is required. 
Applications or games requiring diagonal moves, 
however, are trickier than with a standard joystick. 

To make a push button joystick for your Com- 
modore or Atari computer, you'll need the follow- 
ing parts: 





Part 


Quantity Part 


Number 


5 Momentary contact normally 




open switches 


275-1547 


1 Plastic case 


270-231 


1 9-pin D-subminiature female 


276-1538 


You'll also need some stranded copper wire or 


ribbon cable. 





1. Cut six pieces of wire about 24 inches long. 
Remove about 1/4 inch of insulation from 
each end. Solder wires to pins 1, 2, 3, 4, 6, 
and 8 of the 9-pin plug. 

2. Remove the cover from the plastic case and 
drill five holes for the switches (Figure 3-1). 

3. Mount a switch in each of these holes. 

4. Drill a hole in the top end (the end closest to 
the up switch) of the plastic case for the wires 
from the connector. 

5. Pull the six wires from the 9-pin plug through 
the hole you just drilled, and about 10 centi- 
meters from their ends, tie them in a knot so 
that they can't be pulled back through the hole. 

6. Solder the wire from pin 8 to one of the termi- 
nals of a switch (probably the up switch, since 
it's closest to the hole you drilled in the top 
side of the cover). Using several small lengths 
of wire, connect this terminal to a terminal of 
each of the other four switches in a jumper 
fashion (Figure 3-2). 



24 



Making a Joystick 



Figure 3-1 . Drilling the Cover 



Up 




Fire 



( I 

This front view of the plastic case shows the approximate posi- 
tions where you should drill the five holes for the joystick's button 
switches. 

7. Take the wire from pin 1 of the plug and sol- 
der it to the free terminal of the up switch (see 
Figure 3-2 for a layout view, or Figure 3-3 for 
a schematic view). 

8. Solder the wire from pin 2 to the free terminal 
of the down switch. 

9. Solder the wire from pins 3, 4, and 6 to the 
free terminals of the left, right, and fire 
switches respectively. 

10. Replace the cover of the plastic case. Your joy- 
stick is complete. 



25 



CHAPTER 3 




In this back view of the joystick cover, you can see how the switches are wired. 
Notice that the wire from pin 8 of the 9-pin connector is first connected to the 
up switch, then shorter pieces of wire are used to connect a terminal on each 
of the other four switches. 



Making a Joystick 



Figure 3-3. Joystick Schematic 



Pin 1 



Pin 2 



Pin 3 



Pin 4 



Pin 6 



"A 



Up switch 
I / 



-O 



r 



1 



Down switch 
I / 



1 



Left switch 



1 



Right switch 



Fire button 



To pin 8 of 
9-pin plug 



Schematic view of the push button joystick wiring. 



Figure 3-4. The Finished Push Button Joystick 




The completed push button joystick looks like this. Five buttons appear on the 
top of the finished case (above), while the wiring can be clearly seen in the view 
from the bottom (below). 



CHAPTER 3 



A Gravity Joystick 

You can also use other types of switches to make 
a joystick. One alternative is to use tilt switches in 
place of the four directional push button switches. 

A tilt switch is a switch which closes only when 
it's tilted in the proper direction. One type of tilt 
switch consists of a plastic case with a metal ball 
inside. When the case is held at the proper angle, 
gravity causes the ball to roll to one side, where it 
touches both terminals of the switch, closing the 
contact. Some tilt switches use liquid mercury in 
place of the metal ball. 

If you're using tilt switches, be sure to mount 
them inside the plastic case of your joystick to 
prevent them from breaking. 

Warning: This is especially important if you're 
using mercury switches. Mercury is a potential 
health hazard. 

The switches can be glued to the inside of the case 
using epoxy and should be mounted so that they 
close (turn on) when the joystick is tilted in the 
proper direction. This means the right switch 
should close when the case is tilted to the right, 
the left switch should close when the case is tilted 
left, and so on. 

You tilt the gravity joystick in the direction you 
would normally push the control stick if you were 
using an ordinary joystick. Because of its unique 
feel, the gravity joystick adds another dimension 
to game playing. While moving objects on the 
screen is easy, keeping them stationary requires 
steady hands. 

Your joystick, whether push button or tilt 
switch, will work with any programs requiring a 
joystick. In fact, you may want to try making your 
own custom controller, perhaps something as un- 
usual as a steering wheel for a racing game. 





Making a Joystick 



Figure 3-5. Inside a Gravity Joystick 




The gravity joystick has only one button (the fire button), since it's operated by 
tilting it in the proper direction (above). Tilting the joystick case closes contacts 
within one or more of the mercury switches (below). 



CHAPTER 4 

Game 
Paddles 




Game Paddles 



Game paddles can make arcade-style games like 
car racing simulations, tennis, and Ping-Pong 
more realistic and fun. Unlike joysticks, game pad- 
dles are analog devices. While joysticks provide 
the computer with either on or off signals, paddles 
provide the computer with a varying signal. 

A paddle contains a resistor with a variable 
amount of resistance and a switch in one case. 
The switch acts as the fire button and operates 
like the fire button on a joystick. The electrical re- 
sistance of the paddle depends on the position of 
the variable resistor, often referred to as a poten- 
tiometer, or pot. When the pot is turned all the 
way in one direction, the resistance measured be- 
tween the potentiometer's side and middle leads is 
ohms. When the shaft is turned in the opposite 
direction, the resistance is about 500K ohms on 
Commodore paddles. Atari paddles require a resis- 
tance of about 1M (1 million) ohms. 

When paddles are used, current from the com- 
puter flows through the potentiometers. The 
amount of current that flows depends on the resis- 
tance in the pot. The greater the resistance, the 
less current flow. The opposite is also true — the 
less the resistance, the greater the current flow. 

By turning the knob of the potentiometer, the 
voltage, measured across the leads of the poten- 
tiometer, varies between volts (ground) and +5 
volts. The computer senses this voltage and uses it 
to determine a value for the position of the 
potentiometer. 

This voltage, which is an analog value, must be 
converted to a digital value to be used by your 
computer. Analog-to-digital converters, sometimes 
called A/D converters, were once very expensive. 



33 



Fortunately, your computer has this hardware 
built in. Using its analog-to-digital converter, your 
computer interprets the voltage across the variable 
resistor of the paddle as a number between and 
255 (1 to 228 for the Atari). This value is kept in 
special memory locations in your computer. For 
the Commodore 64 and 128, these memory loca- 
tions are 54297 and 54298 ($D419 and $D41A in 
hexadecimal). In the VIC-20, locations 36872 and 
36873 ($9008 and $9009) are used. For the Atari 
computers, it's not necessary to PEEK the actual 
memory locations — Atari BASIC has a command, 
PADDLE(X), which lets you see the values re- 
turned for the paddle positions. The value of X in 
this Atari statement is or 1 (a different X for 
each paddle), provided the paddles are plugged 
into control port 1 . 

To build your own pair of game paddles, you'll 
need the following parts: 



Part 

Quantity Part Number 

2 Plastic cases 270-231 
2 Momentary contact switches 275-1566 

1 9-pin D-subminiature female 276-1538 

2 Plastic knobs 274-407 
2 500K potentiometers 271-210 

(Commodore) 

or 

2 1M potentiometers (Atari) 271-211 

You'll also need some ribbon cable or stranded 
copper wire to connect your paddles to your 
computer. 



Here's how to put your game paddles together: 



1. Cut eight pieces of stranded copper wire about 
24 inches long and remove about 1 /4 inch of 
insulation from each end. 



Game Paddles 



2. Connect one end of two of the wires to pin 7 of 
the 9-pin plug. 

3. Connect another two wires to pin 8 of the plug. 

4. Solder the remaining four wires to pins 3, 4, 5, 
and 9. 

5. Remove the cover from one of the plastic boxes 
and drill two holes as in Figure 4-1. One hole is 
for the potentiometer, while the other is for the 
switch. Drill a hole in one end of the plastic 
case for the wires. Repeat these steps for the 
second plastic box. 

6. Mount the switches and potentiometers in their 
respective holes. Attach the knobs to the shafts 
of the potentiometers. 

7. Take one wire from pin 7, one wire from pin 8, 
the wire from pin 3, and the wire from pin 9 of 
the 9-pin plug to one of the paddle boxes. Pull 
the wires through the hole in the top end of the 
box. Turn the box cover with the potentiometer 
and switch mounted on it over so that their 
leads are facing up (as shown in Figure 4-1). 

8. Connect the wire from pin 8 to one lead of the 
switch. Solder the wire from pin 3 to the other 
switch lead. The wire from pin 7 should be sol- 
dered to the left side lead of the potentiometer, 
and the wire from pin 9 is connected to the 
middle lead of the potentiometer. Mount the 
cover on the box. One paddle is completed. 

9. The procedure for the second paddle is identi- 
cal, except the wires are from pins 7, 8, 4, and 5 
of the 9-pin plug. The wire from pin 8 connects 
to one lead of the switch. The other switch lead 
is connected to the wire from pin 4. The wire 
from pin 7 connects to the left lead of the 
potentiometer, and the remaining wire, from 
pin 5, connects to the middle lead. Close the 
plastic box, and your second paddle is finished. 



35 



CHAPTER 4 




Game Paddles 



3 



-J2 




.0) 
u_ 

.c 

1 

o 



o 

e 

"O 
<D 
-c 
o 



D 



•8 1 
o ^ 

Q. * 
®£ 

£ R 
o ^ 

<d 1 

.o £ 

■£ ° 
o -c 
c c 

?=-£ 
3 o 

S 

of 



t: C 
r- 0> 



CHAPTER 4 



Figure 4-3. Under the Paddle 



If you've correctly drilled holes, placed components, and wired 
leads, the bottom view of the game paddle case should look 
something like this. 

To try out your paddles, turn off your computer 
and plug the paddles' 9-pin connector into control 
port 1. Turn on the computer, then type in and 
run the appropriate version of Program 4-1. 

Program 4-1 — Commodore 64/128 

EF 10 POKE5 6333,127 : REM IRQ OFF 
HH 20 P0KE56322, 192 :REM SET BITS 6,7 OF 
{ SPACE } DATA DIRECTION REGISTER FOR 
OUTPUT 

EC 30 POKE56320 , 64 : REM 128 FOR PORT 2 
HG 40 X=PEEK( 54297 ) 
DJ 50 Y=PEEK( 54298) 

XE 60 POKE56322,255:POKE56333,129:REM RE 

STORE REGISTERS 
DG 80 PRINTX,Y 
SJ 100 GOTO10 




38 



Game Paddles 



Program 4-1 — VIC-20 

GD 10 PRINT1-(PEEK(37151)AND16)/16;PEEK( 
36872); 

RG 20 POKE37154, 127 :PRINT1- ( PEEK ( 37 152 ) A 

ND128)/128; : P0KE3 7 154 , 2 55 
PS 50 PRINTPEEK( 36873 ) 
BD 60 GOTO10 

Program 4-1 — Atari 

10 PRINT PADDLE(O);" ";PADDLE(1) 
20 GOTO 10 

When you run the appropriate program, two 
columns of numbers should appear on the screen. 
Each column of numbers corresponds with a pad- 
dle. As you turn the knobs of the paddles, the 
numbers should vary between and 255 for the 
Commodore computers, and between 1 and 228 
for an Atari computer. 

Several steps are necessary to read the paddles 
with a Commodore 64 computer. Since the key- 
board can interfere with values read at address 
56321 ($DC01), it's necessary to turn off the IRQ 
(Interrupt Request). This prevents normal system 
processing from occurring. Program 4-1 does this 
in line 10. 

Bits 6 and 7 of the data direction register must 
be set up for output by setting the proper bits in 
address 56322 ($DC02). You want to place a 1 in 
bits 7 and 6 of 56322 for data direction register A. 
(The decimal equivalent 192 of the binary number 
11000000 in line 20 sets bits 6 and 7 for output.) 

Line 30 stores the value 64 in the data port reg- 
ister A to select reading the paddles at port 1. (To 
read port 2, change the 64 in line 30 to 128.) 

Lines 40 and 50 PEEK the game paddle POTX 
and POTY locations, storing the proper values in 
the variables X and Y. 
the variables X and Y. 



39 



CHAPTER 4 



Line 60 restores the IRQ and keyboard. 
Line 80 prints the values of X and Y to the 
screen. 

Since it's necessary to turn off the keyboard for 
input to the paddle registers, it's often best to read 
the values with a machine language (ML) routine. 

Figure 4-4. Paddles Done 




Both game paddles are wired to one 9-pin connector. 




The following ML routine (Program 4-2) works 
only on the Commodore 64 or Commodore 128 in 
64 mode. The routine is POKEd into the cassette 
buffer and can be called by typing SYS 828 any- 
time you want to read the paddles. It's a simple 
matter to incorporate this routine's BASIC loader 
(omit line 40) into any program you write which 
requires paddle reading. To read a paddle value 
after calling the routine with SYS 828, simply 
PEEK the appropriate location: 



40 



Game Paddles 



Port 1 



Paddle to Read Location to PEEK 

X 251 
Y 253 



Port 2 



X 
Y 



252 
254 



Program 4-2. ML Paddle Reader 

MF 10 1=828 :AD=251 

HG 20 READ A: IF A=256 THEN40 

RG 30 POKE I,A:I=I+1:GOTO20 

QA 40 SYS 828 :PRINTPEEK(AD) ;PEEK(AD+1) ; P 

EEK( AD+2 ) ;PEEK(AD+3 ) :GOTO40 
RF 50 DATA 76,63,3,162,1,120,173 
KH 60 DATA 2,220,133,167,169,192,141 
SX 70 DATA 2,220,169,128,141,0,220 
EE 80 DATA 160,128,234,136,16,252,173 
DS 90 DATA 25,212,149,251,173,26,212 
CD 100 DATA 149,253,169,64,202,16,232 
FP 110 DATA 165,167,141,2,220,88,96,256 



41 



1 CHAPTER 5 

■ 

An Analog 
Light Sensor 




An Analog Light 
Sensor 



Sometimes it's handy to be able to detect different 
intensities of light. Perhaps you'd like to have a 
simple switch to turn on your outside lights at 
dusk and then turn them off again at dawn. If you 
need to detect different degrees of lighting, you 
need an analog light sensor. 

The analog light sensor built in this chapter is a 
cadmium sulfide photocell. It's a variable resistor 
whose resistance changes proportionally to the 
amount of light which strikes its light-sensitive 
surface. This, in turn, provides the computer with 
information regarding just how much light is 
present. The resistance increases as the amount of 
light striking it decreases. Exposed to bright light, 
the cadmium sulfide photocell has a resistance of 
a few hundred ohms between its terminals. In 
darkness, this resistance increases to approximately 
0.5 megohms — about the same value range as the 
potentiometer on the Commodore paddles. In fact, 
it's possible to connect the cadmium photocell in 
much the same manner as a paddle. 

Light Sensor — Commodore Computers 

To build an analog light sensor for a Commodore 
64, Commodore 128, or VIC-20, you'll need the 
following parts: 



45 





Part 


Quantity Part 


Number 


1 Cadmium sulfide photocell 


276-116 


1 9-pin D-subminiature female 276-1538 


1 0.1 microfarad capacitor 


272-1069 


1 IK ohm resistor 


271-8023 


1 Solderless breadboard 


276-175 


You'll also need some stranded copper 


wire, as 


well as some solid copper wire (Radio 


Shack part 


number 278-1306). 





To complete the project, follow these steps: 



1. Cut two pieces of the stranded copper wire 
about 24 inches long and strip about 1/4 inch 
of insulation from each end. Cut several small 
pieces of solid wire about 2 inches long to use 
as jumpers. (You'll need them in this circuit and 
most others in this book.) 

2. Solder the end of one wire to pin 7, and the 
other wire to pin 9 of the 9-pin plug. 

3. Connect the wire attached to pin 7, the +5 -volt 
lead, to point XI on the solderless breadboard. 
Place the other wire (that attached to pin 9) to 
point Yl on the board. 

4. Install jumper wires between points Y2 and J2, 
points X2 and A2, and points J13 and Y13. 

5. Place the 0.1 microfarad capacitor between 
points F2 and E2. 

6. Bend the leads of the IK ohm resistor, and in- 
stall it between points B2 and B13. 

7. Install the cadmium sulfide photocell between 
points E13 and F13. 



An Analog Light Sensor 



Figure 5-1 . Schematic Drawing of Analog Photocell 
(Commodore) 

Pin 7 +5v R i 




Rj l.OKfl Cadmium sulfide photocell 

Cj 0.1|if 

Building an analog light sensor for a Commodore personal com- 
puter requires several parts, including a cadmium sulfide photo- 
cell, a resistor, and a capacitor. 



Light Sensor — Atari 

Putting together an analog light sensor for the 
Atari computer series involves some different 
components and different directions. 
You'll need: 





Part 


Quantity Part 


Number 


1 Cadmium sulfide photocell 


276-116 


1 9-pin D-subminiature female 


276-1538 


1 1M potentiometer 


271-211 


1 Solderless breadboard 


276-175 


You'll also need some stranded copper wire as 


well as some solid copper wire. 





47 



CHAPTER 5 



Figure 5-2. Breadboard Layout for Atari Analog Photocell 



1 2 3 4 5 6 7 
» • X2 



9 10 11 12 13 14 15 



A 
B 
C 
D 
E 

F 

G 

H 

I 

J 



A2 
B2 



Cadmium sensor 
B6 



Y2 



• E6 

jjf IM pot 

* F6 



J6 



Y6 



The breadboard for the Atari version of the analog light sensor clearly shows 
where each component and jumper should be placed. 



1. Cut two pieces of the stranded copper wire 
about 24 inches long and strip about 1/4 inch 
of insulation from each end. Cut several small 
pieces of solid wire about 2 inches long to use 
as jumpers. 

2. Solder the end of one wire to pin 7, and the 
other wire to pin 9 of the 9-pin plug. 

3. Connect the wire attached to pin 7 , the +5 -volt 
lead, to point XI on the solderless breadboard. 
Place the other wire (that attached to pin 9) to 
point Y2 on the board. 

4. Install jumper wires between points Y6 and J6, 
and points X2 and A2. 

5. Place the IM potentiometer between points E6 
and F6. 

6. Install the cadmium sulfide photocell between 
points B2 and B6. 



48 



An Analog Light Sensor 



To see how your analog light sensor works, use 
Program 4-1 from the previous chapter. If you're 
using a Commodore 64, or a Commodore 128 in 
64 mode, you can use Program 5-1 below instead. 
If you have an Atari computer, enter and run the 
two-line program you see below. For a Commo- 
dore 64 or 128, the light sensor should be plugged 
into port 2. Plug the Atari light sensor into port 1. 

Program 5-1 — Commodore 64/128 

AD 10 1=828 

PE 20 READ A: IF A=256 THEN 50 
RG 30 POKE I,A:I=I+1:GOTO20 
FX 40 REM ANALOG LIGHT METER 
GH 50 SYS 828:A=PEEK(25 2) 
DH 60 IFB=ATHEN50 

GX 70 B=A: PRINT " {CLRjLIGHT LEVEL IS NOW" 
;A 

DG 80 GOTO50 

KA 90 DATA 76,63,3,162,1,120,173 
FR 100 DATA 2,220,133,167,169,192,141 
BJ 110 DATA 2,220,169,128,141,0,220 
QG 120 DATA 160,128,234,136,16,252,173 
QE 130 DATA 25,212,149,251,173,26,212 
CS 140 DATA 149,253,169,64,202,16,232 
FJ 150 DATA 165,167,141,2,220,88,96,256 

Program 5-1 — Atari 

10 PRINT PADDLE(O) 
20 GOTO 10 

When the you run the program, numbers in the 
range 0-255 (1-228 for the Atari) will scroll on 
your screen. These numbers are related to the 
amount of light which is falling on the photocell. 
To see this, try reducing the light reaching the 
photocell by covering it with your hand. As you 
do, the numbers in the column will increase. Con- 
versely, increasing the amount of light which hits 
the photocell, perhaps by shining a flashlight on it 
or by holding it closer to a lamp, causes the num- 
bers on the screen to decrease. 




49 



CHAPTER 5 




Note: On the Commodore light sensor, you may 
need to adjust the value of Rl, the IK ohm resis- 
tor, to cause a swing through the entire range of 



values. In other words, you may need to use a dif- 
ferent resistor, one rated higher or lower than IK. 
Just experiment until you find the proper value for 
your application. That's part of the fun in 
breadboarding — making changes is easy. 

The computer treats the light sensor as though 
it were a game paddle. The varying resistance of 
the sensor provides the computer with a signal be- 
tween volts and +5 volts at its port. The voltage 
is converted to a digit between and 255 by the 
analog-to-digital converter in your computer. This 
value is stored in a memory location, where it can 
be read by a program. It shouldn't be hard, once 
you have the sensor built, to take this information 
and develop a light meter program which will de- 
termine the degree of light present at the sensor. 

jl Two analog light sensors can be connected to your 
computer through the single 9-pin plug (just like 
two game paddles). The second photocell is at- 
tached between pins 7 and 5 of the 9-pin plug. To 
read the value of this second sensor, simply PEEK 
memory location 54298 ($D41A) for the Commo- 
dore 64/128, or PEEK location 36873 ($9009) for 
the VIC. Don't forget to set the data direction reg- 
isters for output. The BASIC command PAD- 
DLE(l) can be used to read this value for Atari 
computers. 



50 



CHAPTER 6 



A Light Pen 



A Light Pen 



A light pen is a fascinating input device. By point- 
ing a light pen at the computer's screen and press- 
ing its input button, you can make selections from 
a menu, draw a picture, or perform whatever 
function the computer program you're using al- 
lows. The biggest attraction of a program which 
uses a light pen is that you don't have to use the 
keyboard — using a program becomes as simple as 
pointing. 

To understand how a light pen works, you must 
know a bit about how your computer's monitor 
displays a picture. Pictures on the screen are made 
up of tiny dots of light. These dots are produced 
from an electron gun in the monitor which shoots 
electrons at the screen. These electrons excite the 
phosphor coating on the screen, causing it to emit 
light. In this way, the electron gun actually "paints" 
the picture, dot by dot, row by row, until the 
screen is filled. All of this is done in a fraction of a 
second and is updated many times every second. 

Your computer keeps track of where the beam 
of electrons from the electron gun is at all times. 
The light pen, when pointed to a spot on the 
screen, triggers the computer to store the location 
of the beam as it passes. These x and y coordi- 
nates are placed in special registers of your com- 
puter. Since the position of the beam stored is the 
same as that of the light pen, programs can deter- 
mine where you're pointing the light pen by 
checking the values contained in these registers. 
The program can then use this information to per- 
form various functions, like drawing a line or se- 
lecting an option. 



53 



CHAPTER 6 



Here's what you'll need to make a simple light 
pen: 







Part 


Quantity Part 


Number 


1 


Solderless breadboard 


276-175 


1 


7400 quad 2-input NAND 


276-1801 




gate IC 




1 


TIL infrared phototransistor 


276-145 


1 


IK ohm resistor 


271-8023 




(Commodore only) 




1 


9-pin D-subminiature female 


276-1538 


1 


Push button microswitch 


275-016 




(normally open) 




You'll also need some stranded copper wire, a 


ballpoin 


t pen, and some solid copper wire. 



When building the light pen, refer to Figure 6-1, 
the schematic drawing for the light pen circuit, 
and Figure 6-2, the solderless breadboard layout, 
as you follow these instructions: 

1. Solder lengths of solid copper wire to pins 6, 
7, and 8 of the 9-pin plug. These wires will 
connect the plug with the solderless breadboard. 

2. Insert the wire from pin 6 to point El of the 
breadboard, the wire from pin 7 to point Yl, 
and the wire from pin 8 to point XI. 

3. Insert the 7400 IC in the breadboard so that its 
pin 1 is at point E16 and its pin 8 at point F10. 
You can tell which pin of the IC is pin 1 by 
one of two methods: Pin 1 may have a circle 
indented in the plastic beside it. Alternatively, 
there may be a semicircular indention at the 
end of the IC where pin 1 is located. In this 
case, pin 1 is the first pin in a counterclock- 
wise direction from this indention (looking at 
the top of the IC). In either case, the remain - 




54 



A Light Pen 



ing pins are numbered counterclockwise 
around the IC. 
4. Insert five solid copper jumper wires as 
follows: 





First 


Second 


Wire 


Location 


Location 


1 


A10 


X10 


2 


A12 


A13 


3 


C13 


D14 


4 


C15 


D16 


5 


J16 


Y16 



5. Remove the ink cartridge from the ballpoint 
pen. The barrel of the pen will act as the body 
of your light pen. With your hot soldering 
iron, carefully melt a small hole at the end of 
the barrel where the ballpoint used to be for 
the wires. 

Warning: Be sure to clean off the tip of your sol- 
dering iron when you're finished. If you intend to 
use your soldering iron for serious work, it's a 
good idea to change the tip of your iron after 
using it to melt plastic. Substances from the burn- 
ing plastic will adhere to the tip of your iron, 
making it unsuitable for serious soldering work. 
[We found that it wasn't necessary to burn a hole 
for installing the TIL 414 phototransistor when we 
used a BIC ballpoint pen — Editor.] 

6. Cut four pieces of stranded copper wire about 
30 inches long to connect your light pen with 
the solderless breadboard. These wires must 
be long enough to allow you to move the light 
pen freely. 

7. Solder one of the four wires to the emitter 
lead of the phototransistor. Another wire 
should be soldered to its collector lead. Attach 
a small piece of electrical insulation tape 
around both the collector and emitter leads so 
that they won't come in contact and short out. 




55 



CHAPTER 6 



OS 

AAAA 



PS 

5 



c 

> 
o 

Q 
O 

o 

E 

© 

o 

co 

c 
© 

O- 



O) 



-o 
© 




00 D 



O 
> 

+ 
IN 

c 

Oh 



6 
Q 



6b en 

S 

•< 2 

7 o 

s a 

T3 S 

5 — 

3 "* 

§ cd S s 

g H S I 



a ok io 



a 

O 

G. 

H 
1/5 
ft, 
tfi 

r-t 



C 
Oh 



o 

-C 

o 



A Light Pen 




CHAPTER 6 



8. Pull the wires of the phototransistor through 
the pen barrel and glue the phototransistor in 
place at the "tip" end. Be careful not to get any 
glue over the phototransistor's light-sensitive 
part. 

Figure 6-3. In Reality — The Light Pen Breadboard 




'il'iXiiQift-..- '-'AM 



I Wl: -^&M : M^ 




■ 



Schematics and layouts aside, this is how your light pen solderless 
breadboard should look when you're finished. 




9. The wire from the emitter plugs into position 
XI 6 of the solderless breadboard, while the 
wire from the collector inserts into point A16. 



10. Solder the remaining two 30-inch wires to the 
leads of the microswitch. Pull the wires 
through the hole you melted and out the open 
end of the pen's barrel. Glue the microswitch 
to the barrel of the pen. 

11. One of the wires from the switch inserts into 
point Al on the breadboard, while the other 
goes into point A2. 

12. Insert the IK resistor between points C2 and 
Cll of the solderless breadboard. (For the 
Atari version of this circuit, use a jumper wire 
in place of the resistor.) 



58 



A Light Pen 



To check that your light pen is operating properly, 
turn off your computer and insert the 9-pin plug 
into control port 1 of the Commodore 64/128 and 
Atari computers. (The VIC has but one control 
port.) A light pen won't work in control port 2 of 
the Commodore 64 and 128 computers. Turn on 
your computer, type in, and run the appropriate 
version of Program 6-1. 

Program 6-1 — Commodore 64/1 28 

5 A = 53267:B = 53268 

10 PRINT "X=";PEEK(A),"Y=";PEEK(B) 

20 GOTO 10 



Program 6-1— VIC-20 

5 A = 36870:B = 36871 

10 PRINT "X = ";PEEK(A),"Y = ";PEEK(B) 

20 GOTO 10 



Program 6-1 — Atari 
5 A = 564:B = 565 

10 PRINT "X=";PEEK(A),"Y=";PEEK(B) 
20 GOTO 10 

Move your light pen around the screen while 
pressing the microswitch. The numbers of the two 
columns should change, giving you the coordi- 
nates of the point of your light pen. 

Warning: You may have to adjust the brightness 
of your monitor to get your light pen to work 
properly. 

How It Works 

Your computer is set up to store the position of 
the electron beam every time pin 6 of the control 
port, normally at a logic high state, is set low. The 
light pen circuit is designed to set this pin low. 
This triggers the computer to save the electron 
beam's position when it passes the light pen. 




59 



CHAPTER 6 



The phototransistor acts as a very fast switch. 
Normally, the path between the emitter and col- 
lector of the phototransistor is like that of an open 
switch. The moment the beam of the electron gun 
passes the point at which the phototransistor is 
aimed, enough light is emitted to turn the transis- 
tor on. When this happens, the connection be- 
tween the emitter and the collector of this device 
is effectively that of a closed switch. Since the 
emitter is connected to ground, the inputs of the 
NAND gate, which are attached to the collector, 
are grounded as well. 

The operation of NAND gates and other logic 
building blocks is explained in greater detail in 
Chapter 10, "Digital Logic." Let it suffice to say 
here that the two NAND gates used in the light 
pen circuit act as a noninverting buffer. Non- 
inverting buffers are used when a signal isn't suf- 
ficient to drive the inputs of other IC gates. The 
output of this type of buffer is the same as its 
input. 

The output of the buffer is connected to pin 6 of 
the control port through a resistor and the push 
button switch. When the push button switch is 
open, the light pen circuit is disconnected from 
pin 6 of the control port. The push button switch 
must thus be pressed if this pin is to be triggered. 

When the light pen is aimed at a point on the 
screen and the button is pressed, several things 
happen. Because the screen picture is refreshed 
many times each second, the electron beam passes 
the phototransistor at least once in the time it 
takes to press and release the button. Before and 
after the beam passes the phototransistor, the in- 
put and output of the buffer are logic high, and as 
a result, pin 6 remains at that state. The moment 
the beam passes the phototransitor, the input and 
output of the NAND gate buffer are set low. Thus, 



60 



A. Light Pen 



pin 6 of the control port is set low for a fraction of 
a second, long enough to trigger the computer to 
store the location of the electron beam. 



Figure 6-4. The Completed Light Pen 




The entire light pen system, comprised of the breadboard, the 
ink-pen-based light pen, and the 9-pin connector, can be used 
for a multitude of programming applications, from drawing pro- 
grams to menu selection. 



Programming with the Light Pen 

As you ran the test program, you probably noticed 
that when the pen was held at one spot, the co- 
ordinate numbers didn't remain constant, but in- 
stead stayed within a relatively small range. This 
must be taken into account when writing pro- 
grams to work with your light pen. 

Another point to remember is that once you use 
the light pen, the values remain the same in their 
registers until the light pen is used again. This 
means your program should have a way of check- 
ing that the values in the register are a new selec- 
tion rather than a previous selection. For instance, 
suppose the registers contain the values 120 and 



61 



CHAPTER 6 



125 from a previous menu selection. When you 
put up your next menu, you expect the user to 
make another selection with the light pen. In or- 
der to determine where the light pen is pointed, 
you might compare the register values to a speci- 
fied coordinate range. If the range includes one of 
the values from the previous selection, the pro- 
gram would immediately proceed as if the pen is 
pointed in this range before the user even has a 
chance to use the light pen. 

One way to avoid this problem is to check 
whether the user has pressed the push button 
again. This insures that the previous values in the 
register have no effect on the selection. Since the 
light pen line (pin 6) is the same as that of the fire 
button, you can check for it the same way you 
would check for the fire button. Another way to 
avoid this problem is to make sure two consecu- 
tive menus have no ranges in common. 

Try entering and running the appropriate version 
of Progam 6-2, which shows how a light pen can 
be used to make selections from a menu. When 
the menu appears, just point to the asterisk (*) be- 
side your choice and press the microswitch. The 
screen clears and the choice you made appears. 
After a short delay, the word CONTINUE is dis- 
played with an asterisk in front of it. Point your 
light pen to the asterisk and press the microswitch 
to return to the menu. 

Program 6-2 — Commodore 64/1 28 

QK 100 REM * LIGHT PEN DEMO * 

HA 150 AS=CHR$(147) :PRINTA$ 

BB 160 PRINTTAB ( 10 ) "THREE CHOICES" 

MQ 170 PRINT: PRINT 

GJ 180 PRINTTAB ( 5 ) " * CHOICE ONE " 

GF 190 PRINT: PRINT: PRINT: PRINT 

DA 200 PRINTTAB (5 ) "* CHOICE TWO" 

RC 210 PRINT: PRINT: PRINT: PRINT 

FK 220 PRINTTAB ( 5 ) "* CHOICE THREE" 




A Light Pen 



DD 230 A=PEEK(53267) : B=PEEK ( 53 268 ) 

FJ 240 IF A>55 THEN 230 

EB 250 IF (B>70) AND (B<80) THEN 300 

HG 260 IF (B>110) AND (B<120) THEN 330 

XP 270 IF (B>150) AND (B<160) THEN 360 

HF 290 GOTO230 

RF 300 PRINTA? 

DA 310 PRINT "CHOICE ONE " 

BF 320 GOTO 400 

KH 330 PRI NTA$ 

GD 340 PRINT "CHOICE TWO" 

RJ 350 GOTO 400 

FK 360 PRINTA$ 

QS 370 PRINT "CHOICE THREE" 

KS 400 FOR 1=0 TO 1500 

XP 410 NEXT I: PRINT 

CB 420 PRINT"* CONTINUE" 

AS 430 IF PEEK( 53267) <55 AND PEEK(53268) 

<7012 SPACES jTHEN 150 

KX 440 GOTO 430 



Program 6-2— VIC-20 

XF 10 A$=CHR$ ( 147 ) rPRINTA? 

JK 20 PRINTTAB(4) "THREE CHOICES" 

CE 30 PRINT: PRINT 

BQ 40 PRINTTAB ( 5 ) " * CHOICE ONE" 

CF 50 PRINT .-PRINT .-PRINT .-PRINT 

HF 60 PRINTTAB (5)"* CHOICE TWO " 

JC 70 PRINT: PRINT: PRINT: PRINT 

FG 80 PRINTTAB ( 5) "* CHOICE THREE" 

RH 90 A=PEEK(36870) : B=PEEK ( 36871 ) 

CA 100 IF A>65 OR A<40 THEN90 

QQ 110 IF (B>30) AND (B<40) THEN150 

DH 120 IF (B>50) AND (B<60) THEN180 

HJ 130 IF (B>70) AND (B<80) THEN210 

SX 140 GOTO90 

MQ 150 PRINTA$ 

CK 160 PRINT "CHOICE ONE" 

BR 170 GOTO230 

GS 180 PRINTA$ 

HP 190 PRINT "CHOICE TWO" 

AS 200 GOTO2 30 

HX 210 PRINTA$ 

XE 220 PRINT "CHOICE THREE" 

DF 230 FOR 1=0 TO 1500 

GS 240 NEXT I: PRINT 



63 



CHAPTER 6 



DP 250 PRINT"* CONTINUE" 

QD 260 IF PEEK( 36870 ) <40 AND PEEK( 36871) 

<40{2 SPACES } THEN1 
CF 270 GOTO260 



Program 6-2 — Atari 



PF 


100 


REM LIGHT PEN DEMO 






AN 


150 


PRINT 


CHR* (125) 






NO 


160 


PRINT 


" THREE CHOICES" 






LD 


1 70 


PRINT 


: PR INT .-PRINT 






CB 


180 


PRINT 


"* CHOICE ONE" 






LF 


1 90 


PRINT 


:PRINT :PRINT 






DC 


200 


PRINT 


"* CHOICE TWO " 






KO 


210 


PRINT 


:PRINT .-PRINT 






LC 


220 


PRINT 


"* CHOICE THREE 






PH 


230 


A=PEEK (564) : B=PEEK (565) 




NB 


240 


IF A>90 THEN 230 






CK 


250 


IF (B 


>25) AND (B<35) 


THEN 


300 


DC 


260 


IF (B 


>45) AND (B<55) 


THEN 


330 


DA 


270 


IF (B>60) AND (B<70) 


THEN 


360 


BJ 


290 


BOTO 


230 






AK 


300 


PRINT 


CHR* (125) 






PC 


310 


PRINT 


"CHOICE ONE " 






BC 


320 


BOTO 


400 






AN 


330 


PRINT 


CHR* (125) 






AN 


340 


PRINT 


"CHOICE TWO " 






BF 


350 


BOTO 


400 






BA 


360 


PRINT 


CHR* (125) 






10 


370 


PRINT 


"CHOICE THREE" 






ME 


400 


FOR I 


=1 TD 15:PRINT : 


NEXT 


I 


CC 


410 


PRINT 








PG 


420 


PRINT 


"* CONTINUE" 






DE 


430 


IF PEEK ( 564 ) < 90 AND PEEK(565) 



>B0 THEN 150 
SI 440 BOTO 430 



64 



CHAPTER 7 



A Digital Light 
Sensor 



A Digital Light 
Sensor 



The light pen you built in Chapter 6 is a type of 
light sensor — it detects light from the computer's 
screen and sends out an appropriate signal. But 
what if you want to be able to tell whether it's 
dark outside, or whether somebody opened your 
closet door (letting light inside)? Or perhaps you 
want to build an electronic timer that starts and 
stops timing when a beam of light is broken? To 
detect different levels of light, you need a slightly 
more complex sensor. 

This chapter will show you how to build and 
use a variable digital light sensor. This sensor pro- 
vides the computer with either a high (1) or low 
(0) digital signal. When the light sensor is adjusted 
for a certain level of light, the computer receives a 
logic low (0) signal as long as this level of light, or 
more, is maintained. However, if the level of light 
falls below this setting, the computer gets a logic 
high (1) signal from the sensor. This type of sen- 
sor is useful for applications such as light beam 
timers and counters, two applications which will 
be demonstrated here as well. 

To build the digital light sensor, you need these 
parts: 





Part 


Quantity Part 


Number 


1 3900 op amp IC 


276-1713 


1 500K potentiometer 


271-210 


(Commodore) 




1 1M potentiometer 


271-211 


(Atari) 




1 100K ohm resistor 


271-8045 



67 



CHAPTER 7 



Part 

Quantity Part Number 

1 10K ohm resistor 217-8034 

1 IK ohm resistor 271-8023 

1 TIL 414 infrared photo- 276-130 
transistor 

1 9-pin D-subminiature female 276-1538 

1 Solderless breadboard 276-175 

You'll also need some solid copper wire for 
jumper connections and some stranded copper 
wire for connections to the phototransistor. 



These steps will take you through the process of 
building your digital light sensor: 




1. Cut three pieces of solid copper wire and re- 
move about 1 /4 inch of insulation from each 
end. 



2. Connect one wire each to pins 1, 7, and 8 of 
the 9 -pin plug. 

3. Connect the wire from pin 8 to location XI of 
the solderless breadboard. 

4. Connect the wire from pin 7 to location Yl. 

5. Connect the wire from pin 1 to location F5. 

6. Plug the 3900 op amp IC into the solderless 
breadboard so that pin 1 goes to point El 5, 
and pin 8 goes to point F9. 

7. Cut two pieces of solid copper wire about 2 
inches long and remove about 1 /4 inch of insu- 
lation from each end. Solder one wire to an out- 
side lead of the potentiometer. Solder the other 
wire to the middle lead of the potentiometer. 

8. The wire from the outside lead connects to 
point X22 of the solderless breadboard. The 
wire from the potentiometer's middle lead 
connects to point A22. 



68 



A Digital Light Sensor 



9. Cut two pieces of stranded copper wire about 
12 inches long and remove about 1/4 inch of 
insulation from each end. Solder one wire to 
the emitter of the phototransistor and the 
other wire to the collector. 

10. The wire from the collector plugs into point 
Y22 of the solderless breadboard, while the 
wire from the emitter inserts into point J22. 

11. Insert the resistors as follows on the solderless 
breadboard: 

Resistor From To 

IK ohm B4 J4 

10K ohm B22 B13 

lOOKohm D13 D12 

12. Connect five solid copper wire jumpers on the 
solderless breadboard as follows: 



Jumper 


From 


To 


1 


E22 


F22 


2 


Y15 


J15 


3 


X14 


A14 


4 


C12 


C4 


5 


X9 


A9 



Figure 7-1 . The Final Sensor Board 




Your final light sensor breadboard will look like this. 



69 



CHAPTER 7 




A Digital Light Sensor 




CHAPTER 7 



Inside the Sensor 

The phototransistor in this circuit acts as a switch. 
It's in series with the 500K potentiometer. When 
light strikes the light-sensitive surface, current will 
flow through the emitter-collector junction. The 
sensitivity is set by adjusting the 500K ohm poten- 
tiometer in series with the phototransistor. The 
operational amplifier's (op amp) inverting input is 
connected between the potentiometer and the 
phototransistor. The voltage at the op amp's input 
is determined by the resistances of the potentiom- 
eter and phototransistor. 

The op amp is set up using the 10K ohm and 
100K ohm resistors so that when the input voltage 
is a certain level, its output goes to the logic low 
level. The output of the op amp is connected to 
pin 1 of the control port through a IK ohm 
resistor. 

The phototransistor must be set for the desired 
level of light. This is done by aiming the light- 
sensitive part of the phototransistor at a light 
source, then adjusting the potentiometer for trig- 
gering at the desired light level. Program 7-1 pro- 
vides the necessary lines for testing and adjusting 
this circuit. 

Adjust the potentiometer so that the output to 
the computer turns logic low. Once this is done, if 
the phototransistor receives less light, the input 
voltage of the op amp no longer will be the cor- 
rect voltage to force its output low. As a result, 
pin 1 of the 9-pin plug returns to its normal logic 
high level. 

Putting It to Use 

To use the light sensor, first turn off your com- 
puter. Insert the 9-pin plug into port 2 of the 
Commodore 64 or 128 (there's only one port on 





72 



A Digital Light Sensor 



the VIC), or into port 1 of any Atari computer. 
Turn your computer back on, type in, and run the 
version of Program 7-1 for your machine. For this 
demonstration, the sensor is set to the lighting in 
the room, so make sure that the light-sensitive 
portion of the phototransistor is uncovered and 
facing up. 

Program 7-1 — Commodore 64/128 

JE 10 IFPEEK(56320)AND(2T0)THEN20 
XR 15 PRINT " {CLRjLIGHT IS ON":GOTO10 
EP 20 PRINT "{CLR} LIGHT IS OFF":GOTO10 

Program 7-1— VIC-20 

QD 10 IF(PEEK(37151) AND 4 ) THEN PRINT " 

{CLR} LIGHT IS OFF" 
AS 20 IF (PEEK( 37151 ) AND 4)=0THEN PRINT 

{ SPACE }" {CLR} LIGHT IS ON" 
SB 30 GOTO10 



Program 7-1 — Atari 

10 IF STICK(0)=15 THEN PRINT "OFF" 
20 IF STICK(0) = 14 THEN PRINT "ON " 
30 GOTO 10 

When you run the program, a column of mes- 
sages should appear on the screen. Either the mes- 
sage LIGHT IS ON or LIGHT IS OFF will be 
displayed. 

If the message is LIGHT IS ON, it means the 
sensor is detecting light at the level of or greater 
than the potentiometer setting. When the sensor 
detects the light level, it forces pin 1 of the control 
port low, just as connnecting it to pin 8 (ground) 
does. If the sensor does not detect the light level 
it's set for, pin 1 of the control port remains at 
logic high. 




Adjust the setting of the potentiometer by turning 
its shaft. Doing this controls the sensitivity of the 
light sensor. You should find a point as you turn 



73 



the potentiometer shaft where the messages in the 
column change from LIGHT IS OFF to LIGHT IS 
ON. In order to set the light sensor to detect the 
light in the room, leave the potentiometer set at 
the point where the messages just change from 
LIGHT IS OFF to LIGHT IS ON. 

Just as with a joystick, programs can check the 
control port for the light sensor's signal. All that's 
necessary is to PEEK the appropriate register, or 
use the STICK command in the case of the Atari, 
then check the bit (corresponding to pin 1, in this 
case) for a 1 or 0. 

A Digital Light Beam Timer 

This circuit, quite similar to the light sensor, can 
be used as a timer circuit for slot cars, or for any 
application involving measuring time over a dis- 
tance. This project is essentially the same as the 
digital light sensor circuit you just completed. The 
following parts are required: 







Part 


Quantity Part 


Number 


1 


3900 op amp IC 


276-1713 


I 


500K potentiometer 


271-210 




(Commodore) 




1 


1M potentiometer 


271-211 




(Atari) 




1 


100K ohm resistor 


271-8045 


1 


10K ohm resistor 


217-8034 


1 


IK ohm resistor 


271-8023 


i 


Infrared emitting diode 


276-142 


l 


Infrared detecting diode 


276-142 


l 


9-pin D-subminiature female 


276-1538 


l 


Solderless breadboard 


276-175 



You'll also need some solid copper wire and some 
stranded copper wire. 



A Digital Light Sensor 




CHAPTER 7 




Construct the circuit as you did for the digital light 
sensor, but position the infrared emitting diode 
and the infrared detecting diode so that the emit- 
ting surface and detecting surface face each other. 
Tests indicate that the maximum usable distance 
between these diode pairs (the two parts come in 
one package, listed as Radio Shack part number 
276-142) is less than one foot. 

Connect the infrared emitter's anode to the y 
line on the solderless breadboard, and the cathode 
to the x line. Use the appropriate version of Pro- 
gram 7-1 to adjust and focus the diodes so that 
the circuit triggers when the beam of light from 
the emitter is broken, not when ambient room 
light is interrupted. The light in the infrared is in- 
visible to the naked eye. You'll see no indication 
that the diode is turned on. Be sure you've in- 
stalled it correctly in the circuit. 

When you've tested the circuit and are satisfied 
that it's functioning properly, type in and run Pro- 
gram 7-2. Adjust the potentiometer as you did 
with the digital light sensor, then press the X key 
to continue the program. 

Start the timer by breaking the beam between 
the infrared emitting and infrared detecting di- 
odes. When the beam is broken a second time, the 
elapsed time is displayed and the timer stops. 
Press the X key to reset the timer and run the pro- 
gram again. 

This circuit could be useful as a burglar alarm, 
one that detects when an object or intruder breaks 
the beam of infrared light. 

Program 7-2 — Commodore 64/1 28 

DX 110 REM TIMER PROGRAM 

MH 120 PRINT" ICLR} ADJUST THE INFRARED BE 

AM AND THE" 
FA 130 PRINT "POTENTIOMETER UNTIL THE MES 

SAGE JUST" 



/6 



A Digital Light Sensor 



GQ 140 PRINT "CHANGES FROM OFF TO ON" 
MG 150 PRINT : PRINT "PRESS X TO CONTINUE 
I DOWN j " 

AQ 160 A$=CHR$(145)+CHR$(145) 
PM 165 A=PEEK( 56320) 

JM 170 IF (A AND 1) THEN PRINT "LIGHT IS 
OFF" 

GE 175 IF (A AND 1)=0 THEN PRINT "LIGHT 

I SPACE} IS ON " 
KE 180 GET B$ 

BQ 190 IF B$="X"THENGOTO220 
DS 200 PRINTA$ 
AD 210 GOTO 165 

HD 220 PRINT" I CLR] BREAK BEAM TO START TI 
MER" 

QX 230 IF (PEEK( 56320) AND 1)=0 THEN 230 
DF 240 TI$="000000":PRINT"{CLR}TIMER STA 
RTED" 

MD 250 IF (PEEK(56320) AND 1) THEN 250 
KH 260 IF (PEEK( 56320) AND 1)=0 THEN 260 
RC 270 PRINT "TIME IS" ;TI/ 60; "SECONDS" 
XH 280 PRINT" {DOWN J PRESS X TO RESET TIME 
R" 

DG 290 GETB$ :IFB$=" "THEN290 
CD 300 IFB$="X"THEN220 
MK 310 GOTO290 



Program 7-2— VIC-20 

SH 10 PRINT" {CLR } ADJUST THE INFRARED 
{3 SPACES} BE AM AND THE CIRCUIT 
QS 20 PRINT "UNTIL THE MESSAGE JUST" 
SR 30 PRINT "CHANGES FROM OFF TO ON" 
KQ 40 PRINT: PRINT "PRESS X TO CONTINUE" 
GM 50 A$=CHR$(145) 
PB 60 A=PEEK( 37137 ) 

AE 70 IF (A AND 4) THEN PRINT "LIGHT IS 

{ SPACE }OFF" 
PQ 80 IF (A AND 4)=0 THEN PRINT "LIGHT I 

S ON " 
XA 90 GET B$ 
MH 100 IF B$="X"THEN130 
QB 110 PRINTA$A$ 
SQ 120 GOTO60 

PH 130 PRINT "{CLR} BREAK BEAM TO START" 
RP 140 IF ( PEEK ( 37137 )AND4)=0 THEN140 
KS 150 TI$="000000" 

RX 160 IF (PEEK (37 137) AND 4) THEN160 
JD 170 IF (PEEK( 37137) AND 4)= THEN170 



77 



CHAPTER 7 



MQ 180 PRINT "TIME IS " ; Tl/60 ; "SECONDS " 
HD 190 PRINT "PRESS X TO RESET TIMER" 
XA 200 GETG$:IFG$=""THEN200 
QX 210 GOTO130 



Program 7-2 — Atari 

AP110 REM TIMER PROBRAM 

KP 120 PRINT "TURN ON FLASHLIGHT AND 

ADJUST THE " 
LF 130 PRINT "POTENTIOMETER TILL THE 

MESSAGE JUST" 
KO 140 PRINT "CHANGES FROM OFF TO ON 

II 

FE 150 PRINT "PRESS X TO CONTINUE" 
GH 155 FOR J=l TO 2500:NEXT J 
KE 170 IF STICK<0>=15 THEN PRINT "OF 
F" 

BK 175 IF STICK(0>=14 THEN PRINT "ON 

II 

MB 180 REM CHECK IF X KEY PRESSED 
KI 190 IF PEEK<764)=22 THEN 215 
SE210 GOTO 170 

B6 212 REM CLEAR OUT PREVIOUS KEYSTR 
OKE 

0ft215 POKE 764,255 

JB 220 PRINT "BREAK BEAM TO START TI 
MER" 

IJ 230 IF STICK(0)=14 THEN 230 

OA 240 POKE 1S,0:POKE 19,0:POKE 20,0 

10 250 IF STICK(0)=15 THEN 250 

IP 260 IF STICK<0)=14 THEN 260 

BG 270 PRINT "TIME IS " ; < ( PEEK < 1 8 ) * 2 

55*255) + (PEEK < 19) *255) + < PEEK ( 

20) ) ) /60; " SECONDS" 

For something a little different, modify Program 7- 
2 to count (COUNT = COUNT + 1) every time 
the beam is interrupted. 



78 



CHAPTER 8 





An Electronic 
Switch 



An Electronic Switch 



So far, all the projects you've completed have 
been sensors — devices that transfer information 
about the outside world into your computer. But 
your computer can also be used to control outside 
devices through electronic signals. 

While exploring the control port, you saw how 
information in the form of electronic on/off sig- 
nals can be sent to your computer using the data 
(I/O) lines. These same wires can also be used by 
your computer to send digital signals out. Whether 
your computer is using the data lines for input or 
output, two registers are involved. 

The first register, called the data port, contains 
the actual data being transferred. The signal on 
each data line corresponds with a bit stored at this 
location. When receiving data, your program sim- 
ply checks the bit which corresponds to the af- 
fected I/O line. Suppose you wish to see whether 
pin 1 of control port 1 is set low, as it is if the joy- 
stick is pushed to the up position. For the Com- 
modore 64/128, you could use the following 
statement: 

10 IF (PEEK(56321) AND 2T0) = THEN PRINT "YES" 

On the VIC-20, you'd use this instead: 

10 IF (PEEK(37137) AND 2T0) = THEN PRINT "YES" 

Since the zero bit in the memory location (the reg- 
ister) corresponds with pin 1 (the I/O line), the 
word YES is printed if this bit is set low. 

When outputting data, your program must alter 
the contents of the data port and set the port for 
output. Suppose you want to set pin 1 of port 2 to 
output a logic high signal. To do this, your pro- 
gram must set bit in the data direction register 
to a 1 for output: 

81 



CHAPTER 8 



For Commodore 64/128: 

10 POKE 56321,PEEK(56321)OR(2T0) 

For Commodore VIC-20: 

10 POKE 37137,PEEK(37137)OR(2t0) 

Each I/O pin of the control port has a cor- 
responding bit in the data direction register. When 
a control port pin is to be used for input, its bit in 
this register must be set low. Setting a data direc- 
tion register bit high, on the other hand, makes its 
corresponding control port pin an ouput line. The 
data lines are normally set for input — that's why 
you could ignore this register when you were first 
exploring the control port. 

However, when you want the computer to out- 
put signals, this register must first be set. The data 
direction registers are located at memory locations 
56322 ($DC02 in hexadecimal) for joystick port 2 
and 56323 ($DC03) for joystick port 1 on the 
Commodore 64 and 128, and location 37139 
($9113) for the VIC-20. 

The Atari Computers 

The Atari computers are a little different when it 
comes to sending and receiving data. A data regis- 
ter and data direction register are still used, but 
unlike the Commodore computers, the Atari's reg- 
isters are both at the same memory location. 

Though you previously used the BASIC STICK 
command to check input to the control port, you 
can also use one of the computer's registers di- 
rectly to obtain the same information. Bits 0-3 of 
memory location 54016 ($D300) correspond to 
pins 1-4 of control port 1, respectively, while bits 
4-7 correspond to pins 1-4 of control port 2. By 
PEEKing this memory location, you can see what 
data has been input through the control ports. 
This same register is used to send information out 
of the computer using the control ports' lines. This 



82 



An Electronic Switch 



is done by POKEing values into the register to set 
the bits corresponding to the control ports' pins 
either high or low. Memory location 54016 is used 
as a data register and contains the information be- 
ing either sent or received. 

Memory location 54016 acts as a data register, 
accepting incoming data, as long as bit 2 of mem- 
ory location 54018 ($D302) is set to 0. If bit 2 of 
memory location 54018 is set to 1, location 54016 
acts as a data direction register. Outgoing data can 
now be sent. The control ports' pins are set as 
either input or output lines, depending on 
whether their corresponding bits of the data direc- 
tion register are 0's or l's. You can set memory lo- 
cation 54016 to be the data direction register by 
POKE 54018,48 

and return it to acting as a data register with 
POKE 54018,52 




Note: With Atari BASIC, you cannot mask or force 
bits using ANDs and ORs in POKE statements as 
with Commodore computers. To set an individual 
bit in a memory location high, you can POKE the 
value directly, such as 

POKE location, Tbit 

where location is the memory address you wish to 
change and bit is the bit within that address that 
you wish to set. For example, to set bit 2 of loca- 
tion 54016, you would use 
POKE 54016,4 

Without AND and OR, there's no easy way to 
change a single bit without affecting the current 
settings of the other bits in the location. For ex- 
ample, if location 54016 already has bits 6 and 7 
set (corresponding to a value of 192 in the loca- 
tion) and you wish to set bit 3 without affecting 
the others, then the value you must POKE into 
54016 is 200, 192 + (2 A 3). 

83 



Using a Computer's Output Signals 

How can an on/off signal from the computer con- 
trol events in the outside world? An electronic cir- 
cuit is required to take the digital signals that the 
computer outputs and perform some useful task. 
One example of this type of circuit is the elec- 
tronic switch you'll make. It allows your computer 
to switch things on and off under the control of a 
computer program. 

Building the Electronic Switch 

You'll need these parts to construct your electronic 
switch: 





Part 


Quantity Part 


Number 


1 9-pin D-subminiature female 276-1538 


1 2N2222 NPN transistor 


276-1617 


1 2.2K ohm resistor 


271-8027 


1 IN914 diode 


276-1620 


1 5 -volt SPDT DIP relay 


275-243 


1 LED 


276-041 


1 Solderless breadboard 


276-175 


1 7400 IC (Atari) 


276-1801 


You'll also need some solid copper 


wire for con- 


nections to the 9-pin plug, as well 


as for jumper 


connections on the solderless breadboard. 



Follow these steps to build your electronic 
switch if you have a Commodore computer (the 
steps are identical for the Atari, though some ad- 
ditional steps are listed below). 



1. The first step in constructing the electronic 
switch is to wire the 9-pin plug. Cut three 
pieces of wire about four inches long and re- 
move about 1/4 inch of the insulation from 
each end. 



An Electronic Switch 



2. Solder wires to pins 1, 7, and 8. 

3. Connect the three wires as follows: The wire 
from pin 8, the ground wire, connects to point 
Yl on the solderless breadboard. The +5- volt 
wire from pin 7 connects to point XI of the 
solderless breadboard. The data line from pin 
1 connects to location B4 on the board (except 
for the Atari version — see below). 

4. Connect the 2.2K ohm resistor between points 
A4 and F4 on the solderless breadboard. 

5. Mount the 2N2222 transistor so that its base 
inserts into point H4, its emitter into point H3, 
and its collector into point H5. 

Figure 8-1 . Pin Diagrams for Typical 2N2222 NPN 
Transistors 




Pin 

1. Emitter 

2. Base 

3. Collector 

Here are three of the most common 2N2222 NPN transistor con- 
figurations you'll find. 



6. The diode is connected so that its cathode lead 
inserts into point X5 of the solderless bread- 
board and its anode lead connects to point B5. 
(A band around one end of the diode is gener- 
ally used to identify the cathode lead.) 

7. The SPDT relay is inserted so that its normally 
open and normally closed pins attach to points 
F9 and E9 respectively. The common pin con- 
nects to point E14. 

Continue with step 8 on page 88. 



85 



CHAPTER 8 



u 



n ; Q X 
Z Z w ^ „ 



s 

3 

tn 

H 
O 



a o d « 



o 

I 

co 
O 

c 
o 

o 

CD 



H 
D 

a- 
1/5 



O 
Z 



u 
z 

o 



o 

O) 
c 

> 

D 
Q 
O 

o 
E 

CD 
.C 
O 
co 

c\i 
© 

ZD 



D 



ft m 




An Electronic Switch 



< 
-• 



p 



§ 



*-nm-» 

•-f— \A/W v 




D 
Z 

o 



co u D « 



u. O S i4 



-C 



CHAPTER 8 



8. The following jumper connections are required 
to complete the electronic switch. 

Wire From To 

1 J3 Y3 

2 J5 J10 

3 E5 F5 

4 X10 A10 

Additional Steps for Atari Version Only 

9. Insert the 7400 IC into the solderless bread- 
board so that its pins 1 and 8 go into plug 
points F16 and E22 respectively. 

10. Insert the wire from pin 1 of the 9-pin plug 
into point J16 of the solderless breadboard. 

11. Add the following jumper connections. 

Wire From To 

5 X16 A16 

6 J22 Y22 

7 H16 G17 

8 G18 G19 

9 H19 G20 
10 G21 B4 

Switch Is On 

The 9-pin plug connects to control port 1 of your 
computer. The circuit draws its power from the 
computer's power supply through the wires from 
pins 7 and 8. The wire from pin 1 provides the 
circuit with a digital signal. This signal can be set 
by the program to be either logic high or logic low. 

Pin 1 of the control port is connected to the 
base of the transistor through a current-limiting 
resistor. If the signal from the computer is +5 
volts (logic high), current flows from this pin 
through the base of the transistor. This base cur- 
rent causes the transistor to act as a closed switch 
between its emitter and collector leads. When the 




88 



An Electronic Switch 




CHAPTER 8 



transistor acts as a closed switch, current flows 
from the + 5 volts of the power supply through 
the coil of the relay to ground. The relay turns on 
due to this coil current. The Atari version of the 
circuit uses two NAND gates as a noninverting 
buffer. This buffer is required since the signal 
from the Atari's control port is not sufficient to 
turn on the transistor. Refer to Chapter 10, "Digi- 
tal Logic," for more on buffers and gates. 

When a logic low signal (0 volts) is present at 
pin 1, no base current flows in the transistor. As a 
result, the transistor acts as an open switch across 
its emitter and collector leads. Consequently, the 
relay assumes its off position since no current 
flows through its coil. 

The relay is an electromechanical switch. The 
device to be controlled is connected to the relay 
via its common, normally open and normally 
closed terminals. The circuit which controls the 
device is attached to the coil terminals of the relay. 

When the relay is off, a metal lever bridges the 
gap between its common and normally closed ter- 
minals. The coil of the relay is part of an electro- 
magnet. When current flows through this coil (to 
turn the relay on), the electromagnet pulls the 
metal lever so that it bridges the gap between the 
common and normally open terminals instead. 

Many electric devices can be switched on and 
off by this circuit. A description of using the cir- 
cuit to turn on an LED appears below. To use this 
circuit to control other devices, connect the de- 
vices between points G9 and D14, the two points 
marked A in Figure 8-3. Other devices should 
have their own power supply, such as a battery 
connected in series with point G9 or D14 and the 
device itself. (You can see the connection from the 
breadboard to a 6-volt battery in Figure 8-4.) Cau- 
tion should be exercised not to exceed the current 
rating of the SPDT DIP relay. 



90 



An Electronic Switch 



Figure 8-5. Through with the Breadboard 





. . ■ 

* * * w *■ 



iyi if 



* * v •«.«» ... 



* «' » ■ 



The electronic switch can be used to control a variety of devices. 



Using the Electronic Switch — Flashing an LED 

Here's one application for your electronic switch — 
a computer-controlled LED. The computer pro- 
gram, with the aid of the electronic switch, turns 
on the LED after a specified time delay. For this 
application, you'll need to connect two jumper 
wires and the LED. 

1. Connect a wire between points X8 and G9 on 
your solderless breadboard. 

2. Also connect a jumper between points Y15 and 
J15. 

3. Plug the cathode of the LED into point D15 and 
its anode into D14. 

First of all, insert the 9-pin plug of the electronic 
switch circuit into control port 1 of your computer. 
Next, turn on your computer. 




91 



CHAPTER 8 



Enter and run the appropriate version of Program 
8-1. The program prompts you to enter the hours, 
minutes, and seconds of the delay. After you enter 
the delay, the computer will wait that length of 
time before turning on the LED — the LED will re- 
main on for only about five seconds. 

To turn on the LED, the program sets pin 1 of 
the control port to logic low. This turns off the re- 
lay, closing the connection between its common 
and normally closed terminals. 

Program 8-1 — Commodore 64/128 

KR 10 PRINT "ENTER HOURS"; 
BK 20 INPUTA 

SS 30 PRINT "ENTER MINUTES"; 
DP 40 INPUTB 

SG 50 PRINT "ENTER SECONDS"; 
RR 60 INPUTC 

GP 70 D=(A*216000)+(B*3600)+(C*60) 
QE 80 REM START TIMER 
QR 90 TIS="000000" 
RM 100 IFTI > DTHEN1 30 
QH 110 GOTO100 

KX 120 REM SET DATA LINES FOR OUTPUT 
JJ 130 POKE 56323, PEEK(56323)OR(2T0) 
DH 140 REM SET DATA LINES TO LOGIC LOW T 

O TURN ON BUZZER 
CF 150 POKE 56321 , PEEK ( 56321 )ANDNOT( 2l0) 
FX 160 REM KEEP BUZZER ON FOR FIVE SECON 

DS 

AA 170 TI$="000000" 

DK 180 IF TI>300 THEN210 

HB 190 GOTO180 

SQ 200 REM SET DATA LINE TO LOGIC HIGH T 

O TURN OFF BUZZER 
XJ 210 POKE 56321, PEEK ( 5632 1 ) OR{ 2 ?0 ) 
FC 220 REM RESET DATA LINE FOR INPUT 
QQ 230 POKE 56323, PEEK ( 563 2 3 ) ANDNOT ( 2 t ) 



Program 8-1 — VIC-20 

KR 10 PRINT "ENTER HOURS " ; 

BK 20 INPUTA 

SS 30 PRINT "ENTER MINUTES"; 

DP 40 INPUTB 



92 




An Electronic Switch 



SG 50 PRINT "ENTER SECONDS"; 
RR 60 INPUTC 

GP 70 D=(A*216000)+(B*3600)+(C*60) 
QE 80 REM START TIMER 
QR 90 TI$="000000" 
RM 100 IFTI>DTHEN130 
QH 110 GOTO100 

KX 120 REM SET DATA LINES FOR OUTPUT 
BM 130 POKE 37139, PEEK ( 37 1 39 ) OR( 2? 2 ) 
DH 140 REM SET DATA LINES TO LOGIC LOW T 

TURN ON BUZZER 
BD 150 POKE 37137, PEEK ( 371 37 ) ANDNOT ( 2T2 ) 
FX 160 REM KEEP BUZZER ON FOR FIVE SECON 

DS 

AA 170 TI$="000000" 

DK 180 IF TI>300 THEN210 

HB 190 GOTO180 

SQ 200 REM SET DATA LINE TO LOGIC HIGH T 

O TURN OFF BUZZER 
GM 210 POKE 37137, PEEK( 37137 )OR( 2?2 ) 
FC 220 REM RESET DATA LINE FOR INPUT 
RM 230 POKE 37139, PEEK ( 37 139 ) ANDNOT ( 2T 2 ) 



Program 8-1 — Atari 

IS 100 REM TIME BUZZER 
KO120 PRINT "ENTER HOURS"; 
6F 130 INPUT A 

EE 140 PRINT "ENTER MINUTES"; 
GI 150 INPUT B 

DA 160 PRINT "ENTER SECONDS"; 
GL 170 INPUT C 

PP 1S0 D= (A*2 16000) + (B*3600) + (C*60) 
OE190 POKE 18,0:POKE 19,0:POKE 20,0 
OJ 200 IF ( (PEEK ( IB) #255*255) + (PEEK < 

19) *255) + (PEEK (20) 5 ) >D THEN 2 

20 

FO210 SOTO 200 

NF215 REM SET DATA LINES FOR OUTPUT 
FN 220 POKE 54018,48 
JA 225 POKE 54016,255 
FJ 230 POKE 54018,52 

UK 235 REM SET DATA LINES LOGIC LOW 

TO TURN ON BUZZER 
CB 240 POKE 54016,0 

OF 245 POKE 18,0:POKE 19,0:POKE 20,0 
EC 250 IF < (PEEK ( 18) *255*255) + (PEEK ( 
19) #255)+ (PEEK (20) ) ) >300 THEN 
270 



93 



CHAPTER 8 



SI 260 GOTO 250 

ML 265 REM SET DATA LINES HISH TO TU 

RN OFF BUZZER 
JA270 POKE 54016,255 

AN 280 REM RESET DATA LINES FOR INPU 
T 

6E290 POKE 54018,48 
BO 300 POKE 54016,0 
FI 310 POKE 54018, 52 

Other Applications 

The LED flasher is just one application of the elec- 
tronic switch. You can use your electronic switch 
to turn on any electric device, anything from an 
alarm to a light, so long as the ratings of the relay 
and solderless breadboard are not exceeded. Sim- 
ply wire the device and its power supply to the 
relay as if you were using an ordinary switch. 




Warning: If you're planning on using the switch to 
turn on lights, a coffee pot, or any appliance con- 
nected to house line voltage, remember that the 



relay must be rated to handle the current needed 
by the appliance. Potentially lethal voltages will be 
present at the relay. The relay should be housed in 
a container to prevent accidental contact, and 
good electrical practices should be employed. For 
additional safety, a buffer circuit should be em- 
ployed to further isolate your computer (and your- 
self) from high voltages. 



94 



A Burglar Alarm 



A burglar alarm is supposed to detect an intruder. 
To do that, though, the alarm must be as sophisti- 
cated as possible to detect and act upon a variety 
of situations. A computer, equipped with the 
proper sensors and actuators, can do just this and 
become an effective burglar alarm. 

Intruders may reveal their presence to a 
computer-controlled burglar alarm in a number 
of ways. First of all, the intruder must somehow 
enter the building — a door or window is the most 
logical means of entry. If the computer's sensors 
are set to detect use of these entrances, an alarm 
can be triggered when someone passes through 
them. 

Sensors could also be set to detect anyone in 
areas considered off-limits. For instance, if a sen- 
sor detects someone in the living room when all 
rightful occupants are sleeping upstairs, the bur- 
glar alarm can safely assume that an unauthorized 
person is in the protected area. 

Another possibility is to have the alarm sensors 
detect movement of particular objects. Most car 
alarms work on this principle. The sensors can be 
set to tell whether your stereo, television, or any- 
thing else has been moved. If an intruder tries to 
steal something, the burglar alarm can alert you, 
or even alert the police. 

Using What You Know 
The previous projects in this book laid the 
groundwork for a burglar alarm. In particular, the 
joystick project in Chapter 3 and digital light sen- 
sor project in Chapter 7 will be used as the sen- 



97 



CHAPTER 9 



sors. The electronic switch project, found in 
Chapter 8, is the actuator required by the alarm. If 
you didn't put them together earlier, turn back 
now and try them. Be sure you have a basic un- 
derstanding of these circuits before proceeding. 
You'll need to refer to these chapters as you con- 
struct this burglar alarm. 

As you saw in Chapters 2 and 3, a computer 
joystick is actually a set of switches. Many types 
of burglar alarm sensors are switches as well. 
These sensors can be connected to your computer 
in the same way as a joystick — through the I/O 
lines of the control port. 

One type of switch sensor is a thin, adhesive, 
metallic tape that can be stuck on windows and 
other glass. This tape normally acts as a closed 
switch, allowing current to flow through a circuit. 
If the glass is broken, the fragile tape breaks, too, 
and the circuit is interrupted. Another type of 
switch sensor is a magnetic switch. This sensor is 
generally used to detect doors and windows being 
opened or closed, but it could also be installed on 
desk drawers. A typical application is a magnet 
mounted on a door, with the magnetic switch 
mounted on the door frame. When the door 
closes, the magnetic switch either closes or opens, 
depending on the type of switch. When the door 
opens, the magnetic switch changes. 

Other types of sensor switches include vibration 
detectors, ultrasonic sensors, and even infrared 
sensors. Most of these "switch" alarm sensors can 
be purchased at electronic stores such as Radio 
Shack. 

Your alarm will use the digital light sensor 
project built earlier to detect entry into an off-limits 
area. The light source and sensor should be set up 
so that any light in the controlled area will trigger 
the sensor. 



98 



A Burglar Aiarm 



The computer will use the electronic switch to 
turn on the alarm itself. The alarm can be a buzzer 
or a louder alarm (providing it doesn't exceed the 
ratings of the relay or solderless breadboard). With 
the proper programming, your computer could 
even use a modem to call the police, and then 
play a tape recording announcing your address 
and reporting a break-in. 



Setting Up the Alarm 

To set up your computer as a burglar alarm, plug 
the electronic switch into control port 1. 

Before placing the digital light sensor's 9-pin plug 
into control port 2, solder wires for switch sensors 
to its pins 2, 3, 4, and 6. 

Figure 9-1 . Atari and Commodore 64/1 28 Burglar Alarm 
Switches 




r 



Normally closed switches 
represent switch sensors 



Pin 2 



To 

9-pin 

Plug J 
of \ 
light 



Pin 3 



Pin 4 



Pin 6 



To Pin 8 



"Q l_£T 



(or any ground connection) 
Notes 

Digital light sensor plug inserts into control port 2. 

Only additions to this circuit are sensors illustrated above. 

Electronic switch circuit plugs into control port 1 unaltered. 

The alarm sensors are wired to the digital light project's 9-pin plug. 



99 



CHAPTER 9 



If you have a VIC-20, you need a new connec- 
tor since both the electronic switch, the digital 
light sensor, and the other switch sensors must be 
plugged into the single control port. 

To do this, you need to make a new connector: 

1. Solder wires to pins 1, 2, 3, 4, and 6 of a 9-pin 
plug. Solder two wires each to pins 7 and 8. 

2. Remove the old connectors from the electronic 
switch and light sensor cicuits. 

3. The wire from pin 1 of the new connector in- 
serts into point A4 of the electronic switch cir- 
cuit. It provides the digital signal required to 
turn the electronic switch on or off. 

4. The wire from pin 2 connects to point 14 of the 
light sensor circuit to receive its digital output 
signal. 

5. The wires from pins 7 and 8 provide the power 
to the two circuits. One set of two wires from 
pins 7 and 8 connects to points Yl and XI re- 
spectively of the light sensor circuit board. The 
other set of two wires from pins 7 and 8 con- 
nects to points XI and Yl respectively on the 
electronic switch circuit. The remaining wires 
from the control port are used for switch sensors. 

Whichever type (or types) of switch sensors you 
choose for your burglar alarm, they must be nor- 
mally closed. They're set up so that they ordinarily 
form a closed loop between the ground pin of the 
control port and one of the I/O pins. The Commo- 
dore 64, 128, and Atari computers can each have 
four switch sensors connected to them in addition 
to the light sensor. The VIC-20 can have three 
switch sensors in addition to the light sensor. For 
any of the machines, there's no need to wire one 
end of the switch sensors directly to pin 8 of the 
control port — any connection to ground, such as 
the x row of the light sensor circuit, will do. 




100 



A Burglar Aiarm 



Figure 9-2. VIC-20 Burglar Alarm Switches 



To point A4 of electronic 
switch solderless breadboard 



Pin 1 



To point 14 of digital light 
sensor solderless breadboard 



Pin 2 



. Normally closed switches represent 
jf switch sensors 



Pin 3 - 



Pin 4 



Pin 6 



Pin 8 






o 


o 










o 


< 

1 










fl — 





(or any ground) 



Notes 

One wire from pin 7 inserts to point Yl of electronic switch solderless breadboard. 
One wire from pin 8 inserts to point XI of electronic switch solderless breadboard. 
Second wire from pin 7 inserts to point XI of digital light sensor. 
Second wire from pin 8 plugs into point Yl of digital light sensor. 



You must have special connector to build the burglar alarm for the VIC-20 since 
the computer has only one control port. 



CHAPTER 9 



Since, in normal conditions, the switch sensors 
form a closed loop between ground and their par- 
ticular I/O lines, these lines are at a logic low 
level. Similarly, the digital light sensor circuit out- 
puts a logic high signal as long as no light is de- 
tected. The computer program of the burglar 
alarm can tell if things are as they should be just 
by checking to make sure that the bits in the data 
register corresponding to the sensors are off. 

If one of the sensor bits of the data register has 
changed, this means one of the sensors has been 
activated — its corresponding I/O line no longer 
forced to ground. The burglar alarm program must 
detect if this happens and send a signal to the 
electronic switch to turn on the alarm. 

You may want to experiment with infrared 
emitters and detectors, such as those used in the 
digital timer project of Chapter 7. In a darkened 
hallway, you might be able to use the digital timer 
as a switch for an intruder alert. Other infrared 
detectors and emitters could be purchased. 

Program 9-1 is a simple demonstration program il- 
lustrating the use of your computer-controlled 
burglar alarm. Once you have the basic circuitry 
working, you can modify the program and circuit 
to add additional sensors as necessary. If you need 
more sensors than this simple alarm allows, refer 
to the multiplexer project of Chapter 12. 

Program 9-1 —Commodore 64/1 28 

MH 120 PRINT " { CLR } ADJUST THE INFRARED BE 

AM AND THE" 
FA 130 PRINT "POTENTIOMETER UNTIL THE MES 

SAGE JUST" 
GQ 140 PRINT "CHANGES FROM OFF TO ON" 
KX 150 PRINT: PRINT "PRESS X TO CONTINUE" 
SF 160 AS=CHR$(145) 
PM 165 A=PEEK( 56320) 

BJ 170 IF (A AND 2?0) THEN PRINT "OFF" 
XM 175 IF (A AND 2?0)=0 THEN PRINT "ON " 




102 



A Burglar Alarm 



KE 180 GET B$ 

FK 190 IF B$="X"THEN220 

PH 200 PRINTA$A$ 

AD 210 GOT0165 

EK 220 PRINT "TRIGGER A SENSOR TO START A 
LARM " 

HQ 225 REM CHECK SENSOR STATUS 
MX 230 B=PEEK(56320) 
QH 240 IF B=A THEN 230 

JQ 250 PRINT "WARNING-ALARM TRIGGERED" 
AG 260 FOR 1=0 TO 4 

AA 270 IF (B AND 2TD THEN PRINT "SENSOR 

";I+1;" DETECTS VIOLATION" 
EH 280 NEXT I 
MM 340 TI$=" 000000" 
QM 370 REM TURN ON ALARM 

SQ 375 REM SET DATA DIRECTION REGISTER F 

OR OUTPUT 
XJ 380 POKE 56323,PEEK(56323)OR(2T0) 
AM 385 REM SET DATA LINE LOGIC LOW TO TU 

RN ON ALARM 
HF 390 POKE 56321, PEEK ( 56321 ) ANDNOT ( 2T0 ) 
QC 395 REM ALARM ON FOR 2.5 SECONDS 
KE 400 IF TI>3600/24 THEN 420 
GP 410 GOTO 400 

BP 420 REM SET DATA LINE LOGIC HIGH TO T 

URN OFF ALARM 
AK 430 POKE 56321, PEEK ( 5632 1 ) OR ( 2 T0 ) 
JR 440 REM RESET DATA DIRECTION REGISTER 
FOR INPUT 

PM 450 POKE56323,PEEK(56323)ANDNOT(2T0) 



Program 9-1 — VIC-20 

GE 10 PRINT "TURN ON FLASHLIGHT AND ADJUS 
T THE" 

GG 20 PRINT "POTENTIOMETER TILL THE MESSA 
GE JUST" 

SR 30 PRINT "CHANGES FROM OFF TO ON" 
KQ 40 PRINT: PRINT "PRESS X TO CONTINUE" 
GM 50 A$=CHR$(145) 
PB 60 A=PEEK( 37137 ) 

HS 70 IF (A AND 2T3) THEN PRINT "OFF" 

FH 80 IF (A AND 2?3)=0 THEN PRINT "ON " 

XA 90 GET B$ 

MH 100 IF B$="X"THEN130 

QB 110 PRINTA$A$ 

SQ 120 GOTO60 



103 



CHAPTER 9 



DX 130 PRINT "TRIGGER A SENSOR TO START A 
LARM " 

QG 140 Z? = " DETECTS VIOLATION" 
MG 150 REM CHECK SENSOR STATUS 
ES 160 B=PEEK( 37137) 

FS 170 POKE37154,0:IF(PEEK(37152)AND(2T7 
) ) THEN PRINT "SENSOR 3 " ; Z$ :GOTO230 
EF 180 IF B=A THEN160 

RP 190 PRINT "WARNING- ALARM TRIGGERED" 
GG 200 IF (B AND 2?3) THEN PRINT "SENSOR 
1";Z$ 

MM 210 IF (B AND 2?4) THEN PRINT "SENSOR 
2";Z$ 

DX 220 IF (B AND 2T5) THEN PRINT "SENSOR 
4";Z$ 

HB 230 POKE 37154,255 

XE 240 TI$="000000" 

PC 250 REM TURN ON ALARM 

GH 260 REM SET DATA DIRECTION REGISTER F 
OR OUTPUT 

HB 270 POKE 37139,PEEK(37139)OR(2T2) 

PR 280 REM SET DATA LINE LOGIC LOW TO TU 

RN ON ALARM 
PM 290 POKE 37137,PEEK(37137)ANDNOT(2T2) 
RM 300 REM ALARM ON FOR 2.5 SECONDS 
BC 310 IF TI>3600/24 THEN330 
SG 320 GOTO310 

HB 330 REM SET DATA LINE LOGIC HIGH TO T 

URN OFF ALARM 
CB 340 POKE 37137,PEEK(37137)OR(2T2) 
AC 350 REM RESET DATA DIRECTION REGISTER 
FOR INPUT 

EF 360 POKE37139,PEEK( 37 1 39 ) ANDNOT ( 2T2) 



Program 9-1 — Atari 

PL 110 REM ALARM PROGRAM 

KP120 PRINT "TURN ON FLASHLIGHT AND 

ADJUST THE" 
LF 130 PRINT "POTENTIOMETER TILL THE 

MESSAGE JUST " 
K0 140 PRINT "CHANGES FROM OFF TO ON 

It 

FE 150 PRINT " PRESS X TO CONTINUE" 

6H 155 FOR J = l TO 2500:NEXT J 

BP 160 IF STICK(1)=1 THEN PRINT "OFF 

II 

DB 170 IF STICK<1>=0 THEN PRINT "ON 



104 



A Burglar Alarm 



(IB 180 

KD 190 

6C 200 

ML 2 1 

CH 220 

DD 230 

NI 240 

611 250 

LS 260 

OC 270 

OF 280 

OJ 290 

PA 292 

ON 294 

CF 300 

NK 305 

NO 310 

NC 320 

FP 330 

10 340 

Ffl 350 

OG 360 

CF 370 

AM 380 



HA 390 
OF 400 

IH 410 
AJ 420 

6A 430 
CD 440 
FN 450 



REM CHECK IF X KEY PRESSED 
IF PEEK(764)=22 THEN 210 
GOTO 160 

REM CLEAR OUT LAST KEYSTROKE 
POKE 764,255 

PRINT "TRIGGER A SENSOR TO ST 
ART ALARM " 

A=STICK(1) :B=STRIG(1) 

IF (A = AND B=0) THEN 240 

PRINT "WARNING - ALARM TRIGGE 

RED" 

IF A=l THEN PRINT "SENSOR 1" 
IF A=2 THEN PRINT "SENSOR 2" 
IF A=4 THEN PRINT "SENSOR 3" 
IF A=8 THEN PRINT "SENSOR 4" 
IF B=l THEN PRINT "SENSOR 5" 
PRINT "DETECTS VIOLATION" 
REM INITIALIZE CLOCK 
POKE 18,0:POKE 19,0:POKE 20,0 
REM SET DATA LINES FOR OUTPUT 
POKE 54018,48 
POKE 54016,255 
POKE 54018,52 

REM SET DATA LINES LOW TO TUR 
N ON ALARM 
POKE 54016,0 

IF ( (PEEK ( 18) #255*255) + (PEEK ( 
19) *255> + (PEEK (20) ) ) >3600/24 
THEN 400 
GOTO 380 

REM TURN OFF ALARM BY SETTING 

DATA LINES LOGIC HIGH 
POKE 54016,255 

REM RESET DATA LINES FOR INPU 
T 

POKE 54018,48 
POKE 54016,0 
POKE 54018,52 



Before mounting sensors, you should first check 
your burglar alarm. The switch sensors can be 
simulated by connecting their I/O pin wires to the 
ground of either of the circuits. When you run the 
appropriate version of Program 9-1, you're in- 
structed to carry out the necessary adjustment to 
the digital light sensor. Once you do this, your 
burglar alarm is operational. 



105 



CHAPTER 9 



To trigger the alarm, shine a light on the light 
sensor or disconnect a switch sensor wire from 
ground. The program prints on the screen which 
sensor was triggered and turns on the alarm after 
a delay of several seconds (so that an authorized 
person could disable the alarm). The alarm stays 
on for a couple of seconds before shutting off. 
You'll probably want to increase the delay of tim- 
ers when you install the system. (Of course, a 
power failure will disable the alarm. The program 
will have been removed from your computer's 
memory.) 

Other Applications 

Not all the applications for this project are as seri- 
ous as a burglar alarm. You could mount a mag- 
netic switch on the refigerator door to make sure 
someone isn't cheating on a diet. If you have a 
small store, you could use this project to sound a 
buzzer when a customer enters. With some 
thought, you can modify the program and circuit 
for almost any application. 



106 



CHAPTER 10 

Digital Logic 




Until now, whenever a digital output signal was 
required, you took it directly from one of the com- 
puter's control port I/O lines. Similarly, all the 
sensors sent their digital output signals directly to 
a control port pin. Every digital signal, whether 
input or output to the computer, needed its own 
I/O line. 

Advanced projects cannot be interfaced to your 
computer like this — there simply are not enough 
I/O lines available. The control port gives you ac- 
cess to five I/O lines. But what if you need to 
control 12 electronic switches or monitor 15 sen- 
sors? Or even do both at the same time? The solu- 
tion to this predicament is to use digital circuitry 
to manipulate the signals the computer sends and 
receives. 

Digital circuitry is the same type of circuitry 
your computer uses. The uses of these types of 
circuits include performing calculations, storing 
information, and controlling the flow of digital 
signals. The behavior of digital circuits is de- 
scribed by what is known as Boolean algebra. 

Even the most complex digital circuits, like the 
microprocessor of your computer, are created from 
basic building blocks. These building blocks are 
called gates. A gate has one or more input lines 
and only a single output line. The input lines are 
used to input binary data in the form of on/off 
signals. A gate combines these signals to produce 
an output. The output signal is either logic high 
(on) or logic low (off). The relationship between 
the input signals and the output signal of a gate is 
given by its truth table. 



109 



CHAPTER 10 



In the following descriptions, you'll see H and L 
listed. They represent: 

H = Logic high On 1 signal 
L = Logic low Off signal 

The main types of gates, along with their truth 
tables, follow. 

Noninverting Buffer 

This is the simplest of all gates. The signal that 
appears at its input is the same as the signal on its 
output. 

Figure 10-1 . Symbol for a Noninverting Buffer 



NOT Gate 

NOT gates are often called inverters. A NOT 
gate's output signal is the opposite of its input sig- 
nal. Note that the symbol of the NOT gate is the 
same as that of the buffer, except for the small cir- 
cle near its output. Small circles at input or output 
lines of a gate's schematic symbol denote the fact 
that the signal is inverted. 

Figure 1 0-2. Symbol for a NOT Gate 




Output 



Input 

L 
H 



Output 

L 
H 




Output 



110 



Digital Logic 



Input Output 

L H 
H L 



AND Gate 

This gate has two or more inputs. Its output goes 
logic high only if all the inputs are logic high. 

Figure 10-3. Symbol for an AND Gate 



A 

B 

Input Output 
A B 

L L L 
L H L 
H L L 
H H H 



Output 



NAND Gate 

This gate has two or more inputs and only one 
output. Its output goes logic low only if all the in- 
puts are logic high. For all other input conditions, 
the output is logic high. Note that the output of 
the NAND gate is the opposite of that of the AND 
gate for indentical input signals. 

Figure 1 0-4. Symbol for a NAND Gate 



Output 



Input 


Output 


A B 




L L 


H 


L H 


H 


H L 


H 


H H 


L 




111 



CHAPTER 10 



OR Gate 

The output of an OR gate goes high if any of its 
two or more input lines are set high. 

Figure 1 0-5. Symbol for an OR Gate 



Output 



Input Output 
A B 

L L L 
L H H 
H L H 
H H H 

NOR Gate 

A NOR gate is identical to an OR gate with its 
output inverted. The output of a NOR gate is logic 
high only if all the inputs to the gate are logic 
low. 

Figure 1 0-6. Symbol for a NOR Gate 



Output 



Input Output 
A B 

L L H 
L H L 
H L L 
H H L 



Exclusive OR Gate 

The output of this gate goes high if one input (but 
not more) goes logic high. 




r> 



112 



Digital Logic 



Figure 10-7. Symbol for an Exclusive OR Gate 




Output 



Input Output 
A B 

L L L 
L H H 
H L H 
H H L 



Exclusive NOR Gate 

The exclusive NOR gate has a logic low output 
when one (but not more) of the input lines is logic 
high. Its output is the same as that of an exclusive 
OR gate with its output inverted. 

Figure 10-8. Symbol for an Exclusive NOR Gate 




Output 



Input Output 
A B 

L L H 
L H L 
H L L 
H H H 



Combining Gates 

Logic gates can be combined in various ways. Two 
input gates can be combined to make three (or 
more) input gates. Figure 10-9 shows how three 
two-input AND gates can be used to produce a 
four-input AND gate. 



113 



CHAPTER 10 



Figure 1 0-9. Three Two-Input AND Gates Form a Four-Input 
AND Gate 



Output 



Its function can be verified by using the following 
truth table: 



Input 






Intermediate 


Output 


A B 


C 


D 


E 


F 




L L 


L 


L 


L 


L 


L 


L L 


L 


H 


L 


L 


L 


L L 


H 


L 


L 


L 


L 


L L 


H 


H 


L 


H 


L 


L H 


L 


L 


L 


L 


L 


L H 


L 


H 


L 


L 


L 


L H 


H 


L 


L 


L 


L 


L H 


H 


H 


L 


H 


L 


H L 


L 


L 


L 


L 


L 


H L 


L 


H 


L 


L 


L 


H L 


H 


L 


L 


L 


L 


H L 


H 


H 


L 


H 


L 


H H 


L 


L 


H 


L 


L 


H H 


L 


H 


H 


L 


L 


H H 


H 


L 


H 


L 


L 


H H 


H 


H 


H 


H 


H 



Logic gates can even be combined to form other 
logic gates. A NAND gate or a NOR gate acts as 
an inverter (NOT) if both the input lines are 
joined together. 

Figure 1 0-1 0. NAND Gate As a NOT Gate 

A 

Input 



A 
6 




C 
D 




Output 



114 



Digital Logic 



Figure 10-11. NOR Gate As a NOT Gate 

A 

Input 



B 



Output 



Three two-input NAND gates can be hooked up 
to form an OR gate. 

Figure 10-12. Three Two-Input NAND Gates As OR Gate 




Output 



NAND and NOR gates are extremely useful 
since they can be wired to operate as any type of 
gate. 

These gates can be combined in an unlimited 
number of ways. Once you understand the basic 
functions of the gates, putting together a digital 
circuit to meet specific requirements is fairly easy. 



Decoders and Encoders 

Also referred to as demultiplexers and multiplexers, 
decoders and encoders can be used by your com- 
puter to send or receive digital signals on many 
different lines using fewer pins of the control port. 
These circuits can help you solve the problem of 
controlling and sensing several different devices 
using a limited number of I/O lines. Like all digi- 
tal circuits, decoders and encoders are constructed 
from the basic gates discussed earlier. 

The decoder circuit in Figure 10-13 lets your 
computer output digital signals on four lines using 



115 



CHAPTER 10 



only two lines of the control port. The two control 
port lines can output the binary numbers 00 (0 
decimal) to 1 1 (3 decimal) in the form of high and 
low signals. One of the four output lines of the 
demultiplexer outputs a logic high signal depend- 
ing on the input combination received from the 
control port. The other three outputs remain logic 
low. While the decoder allows you to turn on four 
electronic switches (or whatever) using two con- 
trol port lines, there is a catch — you can switch on 
only one device at a time. In many applications 
this tradeoff between control port lines and flex- 
ibility will work to your advantage. 

Try tracing the logic of the demultiplexer in Fig- 
ure 10-13. You'll see that the inputs of the AND 
gates are wired to the input lines and inverted in- 
put lines from the control port in a way that al- 
ways produces the expected output. 

The number of outputs you can design in a de- 
coder depends upon the number of control port 
lines you have available. If you have X control 
lines, you can make a demultiplexer with 2~X out- 
puts. Of course, you would also need X inverters 
(NOT gates) and TX AND gates to build it. 

Multiplexers, or encoders, perform the opposite 
function of decoders. They let you input digital 
signals from several lines to a single control port 
pin. As you can see from Figure 10-14, the cir- 
cuitry for an encoder is similar to a decoder, with 
some additions. Each output of the demultiplexer 
section (the part on the left in Figure 10-14) is con- 
nected to an AND gate. The other lead of the 
AND gate is connected to one of the four lines 
carrying information from the sensors to the 
computer. 



116 



Figure 10-13. Decoder (Demultiplexer) Circuit 

(from computer's control port) 



Input A 



Input B 




Output signals 
(to control port) 



Output Z 



Output Y 



Output X 



Output W 



Truth Table 

Input Output 

A B Z Y X W 

L L H L L L 
L H L H L L 



H L 
H H 



L L H L 
L L L H 



CHAPTER 10 



The demultiplexer part of this circuit is used to 
select which of the four sensor lines is effectively 
connected to the control port pin. The line con- 
nected to the AND gate whose other input is logic 
high (from the demultiplexer part) has its signal 
passed to the OR gate and through to the control 
port. The signals from the lines connected to AND 
gates whose other inputs (from the demultiplexer 
section) are low are in essence blocked from the 
inputs of the OR gate. 

The only data line signal therefore "seen" by 
the control port is the one selected by the demulti- 
plexer circuit. A multiplexer with X control port 
pins available can be designed to allow 2*(X — 1) 
digital input lines to be connected to the com- 
puter. The value X— 1 comes from the fact that 
one pin must be used to input the actual data, 
while the remaining pins are used to select the 
data line. 

These encoder and decoder circuits may seem 
too large to set up on a solderless breadboard. 
Using individual chips, they would be. Fortunately 
entire multiplexers and demultiplexers are avail- 
able on integrated circuit "chips." All you need to 
do is properly connect their pins to the control 
port. In fact, this procedure is described in Chap- 
ter 12, "More Ideas." 

Experimenting with Digital Logic 
The best way to learn and understand how digital 
circuitry works is to do some hands-on experi- 
menting. All the different types of gates are avail- 
able on integrated circuit (IC) chips. All you need 
are a few chips, a solderless breadboard, a power 
supply, some wire, and a logic probe to get 
started. 



118 



Digital Logic 



3 
3 

o 



o h n n 

"3 3 "3 "3 

Dh Ph Dh Ph 

c c c c 



nj nj nj nj 

-*— ' -4— ' -4— » -4— » 

'5b'5b'5b'3b 
QQQQ 



£ "3 PQ 
3 



60 



3 

o 

© 

X 

® 

Q. 




Et=tJ 




o 



ZD 



.£P§ § 



pa 



CHAPTER 10 



The integrated circuits you should use are TTL 
or LS types. These chips usually contain one or 
more gates. The 7400, for instance, is four two- 
input NAND gates in one IC package. It's a TTL 
(Transistor-Transistor Logic) IC. The 74LS00 is 
identical to the 7400 IC, except it uses less power 
(LS stands for Low-power Schotkey). In fact, most 
TTL ICs have LS versions. 

TTL IC names start with the digits 74. Low- 
power Schotkey ICs follow this identifier with the 
letters LS. The remaining part of the names are the 
same for TTL and LS ICs which are functionally 
identical. 

The pin layouts for the integrated circuits used 
in this book, as well as some additional basic ICs, 
appear in Appendix B. 

Simply connect the ground and Vcc pins of the 
chip to a power supply. Be careful wiring the ICs 
to the power. If you reverse the connections, you 
could destroy the IC. 

If you're using only a couple of chips, you can 
tap your computer's control port for power. Pin 7 
can supply +5 volts with up to 50 mA (milliam- 
peres) of current. Pin 8 is attached to the ground 
terminals of the computer's power supply. 

If you're using several ICs, you'll need an exter- 
nal 5 -volt power supply. When you use a separate 
external power supply for a digital circuit and in- 
terface it with your computer, remember to pro- 
vide a common ground line by connecting the 
external power supply ground terminal to pin 8 of 
the control port. 



120 



a CHAPTER 1 1 

" A Better Logic 

Probe 




A Better Logic 
Probe 



To experiment with digital logic circuits, you'll 
need a logic probe better than the simple one you 
built earlier. The logic probe illustrated here is ca- 
pable of detecting both logic high and logic low 
states in a circuit. (If you're really serious about 
experimenting with digital circuits, you should 
definitely consider buying a commercial logic 
probe.) 

To put together this more sophisticated logic 
probe, you'll need these components: 







Part 


Quantity Part 


Number 


2 


IK ohm resistors 


271-8023 


1 


Green LED 


276-022 


1 


Red LED 


276-041 


3 


Alligator clips 


270-378 


1 


74LS367 IC 


None 


1 


Solderless breadboard 


276-175 


You'll also need some solid copper wire 


for the 


jumpers 


and some stranded copper wire 


for probe 


leads. 







Here's how to put together the "better" logic 
probe: 



1. Cut three pieces of stranded copper wire about 
8 inches long and remove about 1 /4 inch of in- 
sulation from each end. Attach an alligator clip 
to one end of each of these wires. 

2. Connect the other end of one wire to point Yl 
of the solderless breadboard. This lead is the 
ground wire. 



123 



CHAPTER 1 1 



<N 
(S 

o 




3. Insert one end of another wire, the +5 -volt 
lead, to point XI of the breadboard. 

4. The third wire is the probe lead and is inserted 
into point 16 of the board. 

5. Insert the 74LS367 IC into the breadboard so 
that its pin 1 goes into point F6, and its pin 9 
goes into point E13. 

6. Connect three jumper wires as follows: 

Jumper From To 

1 G7 X7 

2 J13 Y13 

3 X5 A6 

7. The IK ohm resistors bridge the following 
points: 

Resistor From To 

1 H2 H6 

2 H7 H14 

8. The red LED is mounted on the breadboard so 
that its cathode plugs into point Y2 and its an- 
ode into point J2. 

9. The cathode of the green LED inserts into point 
Y14, while its anode plugs into point J14. 

Figure 11-2. Better Logic Probe 




• \. • • • • 



It's easy to see the various parts which make up this better logic 
probe. 

125 



CHAPTER 1 1 



Probing 

To use the logic probe, connect the ground wire 
and +5 -volt wire to the power supply ground and 
+ 5-volt terminals of the circuit you're checking. 
Touch the probe lead to the point of the circuit 
you want to check. If the green LED turns on, the 
point is at a logic low level, but if the red LED 
lights, the point is at a logic high level. (If neither 
LED lights, the point is neither at a logic high nor 
low state.) 

When the probe is touched to a logic high point 
of the circuit, current flows through the red LED, 
causing it to light. The probe is also connected to 
the enable input pin of the 74LS367 IC. When this 
pin is high, all the buffer outputs in the chip enter 
the high impedance state. Since the green LED is 
connected to the output of a buffer, it remains off. 
The green LED is effectively disconnected from 
the circuit since one of its leads is connected to 
the buffer output, which is acting like a very large 
resistor (open circuit). 

When the probe is touched to a logic low point 
of the circuit, no current flows through the red 
LED since both its leads are at the same voltage 
(ground). The low signal, however, enables the 
74LS367 IC so that its buffers act normally. Since 
the buffer (whose output is connected to the green 
LED) input is attached to + 5 volts, the green LED 
lights up. This happens because the output of the 
buffer is logic high, and as a result, a current 
flows through the green LED causing it to 
illuminate. 

Note that due to low current levels, the LEDs 
may be dim and difficult to see at times. 

This circuit is very handy for exploring and 
troubleshooting digital circuits. It's also a worthy 
candidate for "permanent" mounting on a printed 
circuit board, perhaps, as you'll probably use it 
often. 




126 



CHAPTER 12 

More Ideas 




More Ideas 



You've built the simple circuits in this book, tried 
out the programs that accompanied them, and 
you're ready for more. Now what? 

Since you've done the work already let's take a 
look at some more ways to put these circuits to 
work. Once you start thinking about it, you'll 
quickly find that there's a very wide range of pos- 
sible applications for these circuits. And the circuits 
can even be expanded to perform additional, more 
complex functions. Here are just a few projects 
you can create with the circuits you've built. 

A Two-Beam Digital Timer Circuit 

To make a two-beam digital timer, you'll need 
two digital light sensors (see Chapter 7). 

The two-beam timer begins timing when the 
first light beam is broken and stops timing when 
the second light beam is broken. A light sensor is 
required to monitor each of these light beams. The 
elapsed time between the two events (breaking 
the paths of the two light beams) is displayed on 
the computer's screen. This project is ideal for tim- 
ing races. It may also be useful in classroom sci- 
ence experiments where the speed of an object 
must be measured by timing how long it takes for 
something to move from point A to point B. 

You've already built one sensor — the second 
sensor can be put on the same solderless bread- 
board as your original circuit. Both light sensors 
operate in the same way, and the digital sensors 
even share one major circuit component, the 3900 
op amp IC. The 3900 IC has four operational am- 
plifiers (op amps) built in. Each digital light sensor 



129 



CHAPTER 12 



requires the use of one operational amplifier. The 
second sensor just uses one of the three unused 
op amps. In fact, you could build four digital light 
sensors using a single 3900 IC. 

Figure 12-2 is the schematic diagram of the two- 
beam digital timer circuit. For a more reliable 
switch, infrared sources are recommended. 

Assuming you have the first digital light sensor 
at hand (see Chapter 7), here's a list of additional 
parts you'll need to build this circuit. 








Part 


Quantity Part 


Number 


1 


500K potentiometer 


271-210 




(Commodore) 




1 


1M potentiometer 


271-211 




(Atari) 




1 


100K ohm resistor 


271-8045 


1 


10K ohm resistor 


271-8034 


1 


IK ohm resistor 


271-8023 


1 


TIL 414 infrared photo- 


276-130 




transistor 





Here's how to construct your two-beam digital 
timer. 

1. Take the solderless breadboard you used to cre- 
ate the digital light sensor in Chapter 7. Make 
sure all the components are still on the board 
and in their proper places. 

2. Solder a 4-inch length of copper wire to pin 2 
of the 9-pin plug. This wire will provide the 
computer with the digital signal from the sec- 
ond sensor. 

3. Insert the other end of this wire into point 16 of 
the solderless breadboard. 

4. Solder two wires to the middle and one of the 
outside leads of the 500K potentiometer. 



130 



More Ideas 



5. The other end of the middle wire goes to point 
A2 of the breadboard. 

6. The wire from the outside lead goes to location 
X2 of the board. 

7. Solder wires to the emitter and collector of the 
TIL 414 infrared phototransistor. The wires 
should be long enough so that the phototransis- 
tor can be mounted properly. Insert the emitter 
and collector leads into points J2 and Y2 
respectively. 

8. Bridge the three additional resistors between the 
following sets of points: 

Resistor From To 

Rl (10K ohm) G2 G9 

R3 (100K ohm) H9 H10 

R4 (IK ohm) 16 110 

9. Make the following jumper wire connections (in 
addition to the jumpers which already exist on 
the digital light sensor solderless breadboard 
which you built in Chapter 7) to complete the 
hardware for the two-light-beam timer: 

Jumper From To 

1 G14 X19 

2 F2 E2 



Figure 1 2-1 . Two-Beam Timer, the Final Look 




This mass of wires and electronic components is actually a two- 
beam timer. 

131 



CHAPTER 12 




More Ideas 




CHAPTER 12 



Using the Two-Beam Timer 




Plug the 9-pin connector into control port 2 for 
the Commodore 64/128, or into control port 1 for 
the Atari computers. To use the timer, set the sen- 



sors so that the light detect is interrupted when 
the object being timed passes them. Each sensor 
must be calibrated using its own potentiometer. 

Program 12-1 monitors the two digital inputs to 
the computer from the sensors. When the first 
sensor is triggered by the passing object, it starts 
timing. When the object blocks the light to the 
second sensor, the program stops timing and dis- 
plays the results. 

Program 1 2-1 —Commodore 64/128 

JF 10 FOR I=0TO1 

KF 20 PRINT "TURN ON FLASHLIGHT AND ADJUS 
T THE " 

XP 30 PRINT "POTENTIOMETER ";I+1;" TILL T 

HE MESSAGE JUST" 
DR 40 PRINT "CHANGES FROM OFF TO ON" 
CR 50 PRINT: PRINT "PRESS X TO CONTINUE" 
PM 60 A$=CHR$(145) 
HM 70 A=PEEK( 56320) 

DX 80 IF (A AND 2TD THEN PRINT "OFF" 

BE 90 IF (A AND 2tl)=0 THEN PRINT "ON " 

JS 100 GET B$ 

HE 110 IF B$="X"THEN140 

JA 120 PRINTA$AS 

CR 130 GOTO70 

AS 140 NEXT I 

BB 150 PRINT "BREAK BEAM 1 TO START TIMER 

II 

GM 160 REM CHECK DATA REGISTER TILL FIRS 

T SENSOR TRIGGERED 
MD 170 IF (PEEK(56320)AND(2T0) )=0 THEN17 



BH 180 REM START TIMER 
JD 190 TI$="000000" 

AG 200 REM CHECK DATA REGISTER TILL SECO 

ND SENSOR TRIGGERED 
EM 210 IF (PEEK(56320) AND(2U))=0 THEN2 

10 

KS 220 PRINT "TIME IS "; TI / 60 ;" SECONDS " 



134 



More Ideas 



Program 1 2-1 — VIC-20 

SH 10 FOR I=2T03 

KF 20 PRINT "TURN ON FLASHLIGHT AND ADJUS 
T THE" 

XP 30 PRINT "POTENTIOMETER ";I+1;" TILL T 

HE MESSAGE JUST" 
DR 40 PRINT "CHANGES FROM OFF TO ON" 
CR 50 PRINT: PRINT "PRESS X TO CONTINUE" 
PM 60 A$=CHR$(145) 
GB 70 A=PEEK( 37137 ) 

DX 80 IF (A AND 21 I) THEN PRINT "OFF" 

BE 90 IF (A AND 2?I)=0 THEN PRINT "ON " 

JS 100 GET B$ 

HE 110 IF B$="X"THEN140 

JA 120 PRINTA$A$ 

CR 130 GOTO70 

AS 140 NEXT I 

BB 150 PRINT "BREAK BEAM 1 TO START TIMER 

II 

GM 160 REM CHECK DATA REGISTER TILL FIRS 

T SENSOR TRIGGERED 
BM 170 IF (PEEK(37137)AND(2T2) ) =0 THEN17 



BH 180 REM START TIMER 
JD 190 TI$="000000" 

AG 200 REM CHECK DATA REGISTER TILL SECO 

ND SENSOR TRIGGERED 
QC 210 IF (PEEK(37137) AND(2?3))=0 THEN2 

10 

KS 220 PRINT "TIME IS "; Tl/60 ; "SECONDS " 



Program 12-1 — Atari 

FL110 REM TWO LIGHT SENSOR TIMER PR 
OGRAM 

FJ112 REM CALIBRATE BOTH SENSORS 
SI 115 FOR 1=0 TO 1 

KP 120 PRINT "TURN ON FLASHLIGHT AND 

ADJUST THE" 
BE 130 PRINT "POTENTIOMETER ";I + 1;" 

TILL THE MESSAGE JUST " 
KQ 140 PRINT "CHANGES FROM OFF TO ON 

II 

BL 150 PRINT : PRINT " PRESS X TO CONT 
INUE" 

6B 155 FOR J=l TO 1000.-NEXT J 

BE 160 A = STICK (0) 

KK 162 IF 1 = 1 THEN 174 



135 



CHAPTER 12 



PRINT 
PRINT 
PRINT 
PRINT 
X KEY 
= 22 THEN 220 



"OFF 
"OFF 
"ON 
"ON 

"OFF 1 
"OFF ' 
"ON 
"ON 

PRESSED 



OJ 164 IF A= 1 5 THEN PRINT 
OJ 166 IF A=13 THEN PRINT 
KO 168 IF A=14 THEN PRINT 
KF170 IF A=12 THEN PRINT 
6N 172 GOTO 190 
OK 174 IF A=15 THEN 
OL 176 IF A=14 THEN 
KO 178 IF A=13 THEN 
KG 180 IF A=12 THEN 
MC 190 REM CHECK IF 
JN 200 IF PEEK<764>= 
GD210 SOTO 160 
NE 220 REM CLEAR LAST 
CN 230 POKE 764,255 
BO 240 NEXT I 

NF 250 PRINT "BREAK BEAM 
TIMER" 

AO 260 REM CHECK FIRST SENSOR 

RIG6ERED 
HN 270 IF STICK(0X>13 THEN 270 
IN 280 REM START TIMER 

OF 290 POKE 18,0:POKE 19,0:POKE 20,0 
JE 300 REM CHECK SECOND SENSOR UNTIL 

TRIGBERED 
II310 IF STICK(0)=14 THEN 320 
S6315 GOTO 310 

BC 320 PRINT "TIME IS " ; < < PEEK ( 1 8 ) *2 
55*255)+(PEEK<19)*255)+<PEEK< 
20) ) ) /60; " SECONDS" 



KEYSTROKE 



1 TO START 



TILL T 



Light Switch 

This project combines the analog light sensor from 
Chapter 5 with the electronic switch you built in 
Chapter 8. The analog light sensor detects the 
level of outside light. As night approaches, the 
computer detects the change in light conditions 
and turns on a light via the electronic switch. 
Near dawn, the sensor detects the increase in 
light, and the computer switches off the light. (Of 
course, other things, from dark clouds during the 
day to car headlights at night, may also activate 
the switch.) 



136 



More Ideas 



The analog light sensor, a cadmium sulfide photo- 
cell, is connected between pins 9 and 5 of the 
electronic switch's 9-pin plug. Use leads long 
enough so that the sensor can be aimed easily. 
The electric light is connected to the relay of the 
electronic switch across its normally closed and 
common terminals (remember, the relay turns on 
as soon as you plug the circuit into the computer's 
port). Be sure that the ratings of the solderless 
breadboard or relay are not exceeded by the elec- 
tric light. The circuit is connected to control port 1 
of your computer. 

Program 12-2— Commodore 64/128 

GX 10 PRINT "SET LIGHTING LEVEL TO SWITC 
H ON" 

EG 20 PRINT "PRESS X TO CONTINUE" 

RA 30 A=PEEK( 3687 2 ) 

HR 40 GET B$ 

RR 50 IF BS="X" THEN70 

XE 60 GOTO30 

QG 70 REM 

HP 80 PRINT "SET LIGHTING LEVEL TO SWITC 
H OFF " 

PD 90 PRINT "PRESS X TO CONTINUE" 

AX 100 B=PEEK(36872) 

ES 110 GET B$ 

DF 120 IF B$="X" THEN140 

EJ 130 GOTO100 

MJ 140 PRINT "PRESS X TO START" 

FB 150 GET B$ 

HQ 160 IF B$="X" THEN180 

PS 170 GOTO150 

PR 180 REM CHECK IF LIGHT LEVEL LOWER TH 

AN FIRST SETTING 
FK 190 IF PEEK( 36872) <A THEN190 
SP 200 REM SET DATA DIRECTION REGISTER F 

OR OUTPUT 

XG 210 POKE 37139, PEEK ( 37139 ) OR( 2T 2 ) 
CC 220 REM SET OUTPUT LINE LOGIC LOW 
CG 230 POKE 37137, PEEK( 37137 )ANDNOT ( 2T2 ) 
HQ 240 REM CHECK IF LIGHTING LEVEL HIGHE 

R THAN SECOND SETTING 
FP 250 IF PEEK( 36872) >B THEN250 
HQ 260 REM SET OUTPUT LINE LOGIC HIGH 




137 



CHAPTER 12 



RG 270 POKE 37137, PEEK ( 371 37 ) OR( 2T2 ) 
DG 280 REM RESET DATA DIRECTION REGISTER 
FOR INPUT 

FB 290 POKE 37139, PEEK( 37139 )ANDNOT ( 2T2 ) 



Program 12-2— VIC 

GX 10 PRINT "SET LIGHTING LEVEL TO SWITC 
H ON" 

EG 20 PRINT "PRESS X TO CONTINUE" 

HD 30 A=PEEK( 54297 ) 

HR 40 GET B$ 

RR 50 IF B$="X" THEN70 

XE 60 GOTO30 

QG 70 REM 

HP 80 PRINT "SET LIGHTING LEVEL TO SWITC 
H OFF " 

PD 90 PRINT "PRESS X TO CONTINUE" 

MB 100 B=PEEK( 54297) 

ES 110 GET B$ 

DF 120 IF B$="X" THEN140 

EJ 130 GOTO100 

MJ 140 PRINT "PRESS X TO START " 

FB 150 GET B$ 

HQ 160 IF B$="X" THEN180 

PS 170 GOTO150 

PR 180 REM CHECK IF LIGHT LEVEL LOWER TH 

AN FIRST SETTING 
CM 190 IF PEEK( 54297 ) <A THEN190 
SP 200 REM SET DATA DIRECTION REGISTER F 

OR OUTPUT 
ED 210 POKE 56323, PEEK( 5632 3 ) OR ( 2 T0 ) 
CC 220 REM SET OUTPUT LINE LOGIC LOW 
CJ 230 POKE 56321, PEEK ( 56321 ) ANDNOT ( 2 ?0 ) 
HQ 240 REM CHECK IF LIGHTING LEVEL HIGHE 

R THAN SECOND SETTING 
BE 250 IF PEEK( 54297 ) >B THEN250 
HQ 260 REM SET OUTPUT LINE LOGIC HIGH 
GD 270 POKE 56321 ,PEEK( 56321 )OR( 2T0) 
DG 280 REM RESET DATA DIRECTION REGISTER 
FOR INPUT 

ED 290 POKE 56323, PEEK ( 563 2 3 ) ANDNOT ( 2 T ) 



138 



More Ideas 



Program 12-2 — Atari 

LP 100 REM LIQHT SWITCH 
HS 1 1 REM 

FC 120 PRINT "SET LIGHT LEVEL TO SWI 
TCH ON" 

FC 130 PRINT "PRESS X TO CONTINUE" 
DO 140 A=PADDLE (0) 

LO 150 REM CHECK IF X KEY PRESSED 
KG 160 IF PEEK (764) =22 THEN 180 
66 170 GOTO 140 

NN 175 REM CLEAR LAST KEYSTROKE 
DB 180 POKE 764, 255 

HF 190 PRINT "SET LIGHTING LEVEL TO 

SWITCH OFF" 
FA 200 PRINT "PRESS X TO CONTINUE" 
DN210 B = P ADDLE ( ) 

Lfl 220 REM CHECK IF X KEY PRESSED 
KD 230 IF PEEK(764)=22 THEN 260 
6C 240 GOTO 210 

NH 250 REM CLEAR LAST KEYSTROKE 
DA 260 POKE 764,255 

EI 262 PRINT :PRINT "PRESS X TO STAR 
T" 

LC 264 IF PEEK(764)=22 THEN 268 

HD 266 GOTO 264 

01 268 POKE 764, 255 

LE270 REM CHECK IF LIGHT LEVEL LOWE 

R THAN FIRST SETTING 
JK 280 IF PADDLE ( ) < A THEN 280 
SD290 REM SET DATA DIRECTION REG 1ST 

ER FOR OUTPUT 
FM 300 POKE 54018,48 
IL310 POKE 54016,255 
FJ 320 POKE 54018,52 

FL 330 REM SET DATA LINES LOGIC LOW 
CC 340 POKE 54016,0 

PD 350 REM CHECK IF LIGHTING LEVEL H 

IGHER THAN SECOND SETTING 
JN 370 IF PADDLE (0)>B THEN 370 
10 380 REM SET DATA LINES LOGIC HIGH 
JD 390 POKE 54016,255 

AH 400 REM RESET DATA LINES FOR INPU 
T 

FO410 POKE 54018,48 
CB 420 POKE 54016,0 
FL 430 POKE 54018,52 



139 



CHAPTER 12 



Enter and run the appropriate version of Program 
12-2. You'll be prompted to set the lighting condi- 
tion which will indicate that the switch is to turn 
on. Do this by exposing the analog light sensor to 
the amount of light at which you want the light to 
turn itself on. While the sensor is still exposed to 
this light level, press the X key on the computer. 
The computer stores this level of light as a num- 
ber and will turn on the electric light when the 
sensor sees less than this amount of light. 

The program also prompts you to set the light 
off condition. After the electric light has been 
turned on, when this second light level (or more 
light) is present, the electric light is turned off. 

Using this circuit requires that the sensor be 
mounted near a window where it can detect out- 
side light. 

Whatever you do, don't mount the sensor be- 
neath the electric light you're controlling. 



Multiplexer Circuit 

A multiplexer circuit lets your computer monitor 
many digital input signals using its limited num- 
ber of I/O lines. To make an eight-input multi- 
plexer, you'll have to have these components: 





Part 


Quantity Part 


Number 


2 9-pin D-subminiature female 


276-1538 


(only one necessary for VIC 




and Atari) 




1 74LS151 IC 


None 


1 IK ohm resistor 271-8023 




(not required for Atari) 




1 Solderless breadboard 


276-175 



140 



More Ideas 




CHAPTER 12 



Follow these steps to put together your 
multiplexer: 




1. Insert the 74LS151 IC so that its pin 1 goes into 
point F2 of the solderless breadboard, and its 
pin 9 into point E9. 



2. Solder a 4-inch-long wire to pin 1 of one of the 
9-pin plugs (for the Atari and VIC-20 versions, 
solder this wire to pin 6 of the single 9-pin plug 
required). This wire carries the selected data 
line's signal to the computer. 

3. Connect the other end of this wire to point J12 
of the breadboard. 

4. The IK ohm resistor bridges the points HI 2 to 
H6 of the board. (When building the Atari ver- 
sion, use a jumper wire in place of the resistor.) 

5. Solder wires about four inches long to pins 1, 2, 
3, 7, and 8 of the second 9-pin plug (in the case 
of the Atari and VIC versions, solder these 
wires to the same pins of the single 9-pin plug). 

6. The wires from pins 7 and 8 provide the power 
to the circuit. Connect the wire from pin 7 to 
point XI, and the wire from pin 8 to location Yl 
of the board. 

7. The wires from pins 1, 2, and 3 insert into plug 
points D7, D8, and D9 respectively. These last 
three pins are used to select the data line signal 
"seen" by the computer. 

8. Connect jumper wires as follows: 

Jumper From To 

1 Y9 J9 

2 X2 A2 

3 G8 G9 

Pins 1-4 and 12-15 of the 74LS151 IC are the 
input lines of the multiplexer. They can be con- 
nected to any sensor which provides an on/off 
signal. The sensors may be electronic (like the dig- 
ital light sensor) or simply switches between the 
pins and ground. 



142 



More Ideas 



Figure 1 2-5. Multiplexer Still Life 





• • » » - * >>•'*'•'<'' ' 



, , « » ■ ■ S - . . 




A congregation of wires from the multiplexer lead off to various 
digital sensors. 



If you've built a multiplexer for the Commodore 
64 or Commodore 128, the 9-pin plug with one 
wire attached is inserted into control port 2. The 
other 9-pin connector plugs into control port 1. 

Since you used only one 9-pin plug for the 
Atari version, insert it into control port 2. 

Program 12-3 allows the circuit to monitor eight 
digital inputs. It outputs three digital signals to the 
multiplexer circuit, which tell it to route one of the 
input signals to a pin of the computer's I/O port. 
The program sequentially selects each of the eight 
input lines and checks its condition. (This is called 
polling.) If any of the eight inputs is at a logic low 
state, the computer prints out such a message on 
the screen. 

Program 1 2-3 — Commodore 64/1 28 

PK 10 PRINT "PRESS X TO EXIT PROGRAM " 
GM 20 REM SET DATA DIRECTION REGISTER FO 

R OUTPUT 
QJ 30 POKE 56322,255 
RP 40 FOR 1=0 TO 7 




143 



CHAPTER 12 



PE 50 REM SET DATA OUTPUT 
SR 60 POKE 56320,1 

RG 70 IF (PEEK(56321)AND(2T0) )=0 THEN PR 

INT " SENSOR ";I 
RK 80 NEXT I 

EP 90 REM RESET DATA LINES FOR INPUT 

RQ 100 POKE 56322,0 

ES 110 GET B$ 

BX 120 IF B$="X" THEN END 

CP 130 GOTO30 



Program 12-3— VIC-20 

CM 10 PRINT " MONITORING SENSORS" 

HR 20 PRINT "PRESS X TO EXIT" 

DP 30 REM SET DATA DIRECTION REGISTER FO 

R OUTPUT 
QH 40 POKE 37139, ( 2 T 2+2 T 3 + 2 T 4 ) 
GM 50 FOR 1=0 TO 7 
SP 60 REM SET DATA OUTPUT 
GH 70 POKE 37137,1*4 

QC 80 IF (PEEK( 37137 )AND( 2T5) )=0 THEN PR 

INT " SENSOR ";I 
JM 90 NEXT I 
GJ 100 POKE 37139,128 
ES 110 GET B$ 
BX 120 IF B$="X" THEN END 
MQ 130 GOTO40 

GM 140 PRINT "TURN SWITCH OFF" 



Program 12-3 — Atari 

ME 100 REM MULTIPLE INPUTS 

JG110 PRINT "MONITORINB SENSORS " 

ON 120 PRINT :PRINT " PRESS X TO EXIT 

II 

FN 130 REM SET DATA DIRECTION RESIST 

ER FOR OUTPUT 
FO 140 POKE 54018, 48 
CI 150 POKE 54016, 7 
FL 160 POKE 54018, 52 

DB 170 REM CYCLE THROUGH OUTPUT COMB 

I NAT I ON 
Bfl 180 FOR 1=0 TO 7 
DO 190 POKE 54016, I 
AF 195 FOR J=l TO 10:NEXT J 
EH 200 IF (STRie(0)=0> THEN PRINT " S 

ENSOR " ; I 



144 



More Ideas 



LL210 REM CHECK IF X KEY PRESSED 

KB 220 IF PEEK (764) =22 THEN 250 

BN 230 NEXT I 

BH 235 GOTO 180 

NG 240 REM CLEAR LAST KEYSTROKE 

CP 250 POKE 764,255 

AL 260 REM RESET DATA LINES FOR INPU 
T 

GC 270 POKE 54018,48 

CF 280 POKE 54016,0 

FP 290 POKE 54018,52 



A Demultiplexer Circuit 
A demultiplexing circuit can be made using a 
74LS154 IC. This chip takes four input signals 
from the computer to output a signal to one of 16 
lines. The output line corresponding to the input 
signal combination goes logic low, while the other 
output lines of this IC remain high. 




Quantity Part 

1 9-pin D-subminiature female 

1 74LS154 IC 

1 Solderless breadboard 



Part 

Number 

276-1538 

None 

276-175 



You'll also need some solid copper wire for 
jumpers and some stranded copper wire for other 
connections. 



1. Insert the 74LS154 IC so that its pin 1 goes into 
point G6 of the solderless breadboard, and its 
pin 24 into point C6. 

2. Solder wires about four inches long to pins 1, 2, 
3, and 4 of the 9-pin plug. 



145 



CHAPTER 12 



These wires connect to the breadboard at these 
locations: 

Wire 

from Pin To Point 

1 A7 

2 A8 

3 A9 

4 A10 

3. Solder two wires to pins 7 and 8 of the 9-pin 
plug. Connect the wire from pin 7 to point XI, 
and the wire from pin 8 to location Yl of the 
board. 

4. Solder wires for the digital output lines to these 
points on the breadboard: 

Digital 

Output Line To Point 

J6 

1 J7 

2 J8 

3 J9 

4 J10 

5 Jll 

6 J12 

7 J13 

Digital 

Output Line To Point 

8 J14 

9 J15 

10 J16 

11 A17 

12 A16 

13 A15 

14 A14 

15 A13 

5. Connect jumper wires as follows: 

Jumper From To 

1 Y17 J17 

2 X6 A6 

3 A12 Y20 

4 Bll B12 



146 



More Ideas 




CHAPTER 12 




When you've finished, plug the 9-pin plug into 
control port 2. 

The 74LS154 is interfaced to the computer using 
four lines from the control port. These four lines 
output the signals that select which of the output 
lines goes logic low. The outputs from the de- 
multiplexer can be used to turn on electronic 
switches or other devices which require digital sig- 
nals. The power for the demultiplexer circuit, as 
for the multiplexer, is obtained from pins 7 and 8 
of the computer's control port. 

Sending signals to set an output line of the 
demultiplexer is very similar to sending the output 
required from the computer to select an input line 
of the multiplexer. The only difference is that four 
output lines from the computer are used instead of 
three. Try writing a program which will sequen- 
tially set each of the demultiplexer's output lines 
to a logic low state. You can verify your program 
using your logic probe. 



148 



CHAPTER 13 



Robotics 




Robotics 



One of the most exciting applications of digital 
electronics and computers is robotics. While a ro- 
botics control system is beyond the scope of this 
book, what you'll find here are some ideas to get 
you started. 

The actions of most robots are carried out by 
motors. To move, for instance, a mobile robot's 
wheels are turned; when a robot's arm goes up, 
the arm's joints are moved by motors. These mo- 
tors, in turn, are controlled by a computer. The 
computer is programmed to turn the motors on 
and off so that the robot moves in a coordinated 
fashion to perform a task. 

You already have enough expertise to control a 
dc motor with your computer. You can simply 
switch it on and off by using an electronic switch 
circuit. If you use a second electronic switch cir- 
cuit, with a DPDT relay in place of the SPDT, you 
can control a dc motor to turn in both directions. 

Though you've already built an electronic 
switch circuit in Chapter 8, it will be easier if you 
just begin from scratch when putting together a dc 
motor control circuit. Here's what you'll need: 







Part 


Quantity Part 


Number 


1 


9-pin D-subminiature female 


276-1538 


2 


2N2222 NPN transistors 


276-1617 


2 


2.2K ohm resistors 


271-8027 


2 


IN914 diodes 


276-1620 


1 


5 -volt SPDT DIP relay 


275-243 


1 


DPDT DIP relay 5 -volt coil 


275-215 


1 


Solderless breadboard 


276-175 



151 



CHAPTER 13 



c 
o 

I 

© 
o 

o 
E 

E 
o 
O 



D 

O 

D 

i 

"g 

b 
o 
n 
~o 
o 
o 

m 



o 
O 

Q 

CO 

© 
b 




* *, 60 
n c S 3 
H 3 D- &. 



Robotics 



Part 

Quantity Part Number 

1 7400 IC (Atari) 276-1801 
1 DC battery-powered motor None 

You'll also need some solid copper wire for con- 
nections to the 9-pin plug, motor, and battery, as 
well as for jumpers on the solderless breadboard. 

If you're building the Atari version of the con- 
trol circuit, you'll need a longer than normal 
solderless breadboard. 



The Commodore Version 

Here's how to build the Commodore version of 
the dc motor control circuit. 

1. Wire the 9-pin plug. Cut four pieces of wire, 
each about four inches long, and remove 
about 1/4 inch of the insulation from the 
wires' ends. 

2. Solder wires to pins 1, 2, 7, and 8 of the 9-pin 
plug. 

3. Connect the four wires as follows: The wire 
from pin 8 connects to point Yl on the solder- 
less breadboard. The wire from pin 7 connects 
to point XI of the solderless breadboard. The 
last two lines, from pins 1 and 2, connect to 
locations A3 and A6 respectively. 

4. Connect the two 2.2K ohm resistors between 
points C3 and F3, and points C6 and F6 on 
the solderless breadboard. 

5. Mount one 2N2222 transistor so that its base 
inserts into point H3, its emitter into point H2, 
and its collector into point H3. 

6. The second 2N2222 transistor should be 
mounted so that its base inserts into location 
H6, its emitter into point H7, and its collector 
into H5. 




153 



CHAPTER 13 



7. The first diode is connected so that its cathode 
lead inserts into point X4 of the solderless 
breadboard and its anode lead connects to 
point A4. (A band around one end of the di- 
ode is generally used to identify the cathode 
lead.) 

8. The second diode should be placed so that its 
cathode lead goes into location X7, while its 
anode lead connects to point A7. 

9. The SPDT relay is inserted so that its normally 
open and normally closed pins attach to points 
F9 and E9 respectively. The common pin con- 
nects to point E14. Its coil terminal should be 
connected to points E10 and F10. 

10. Insert the DPDT relay so that its normally 
open pins 1 and 2 attach to points E23 and 
F23 respectively. Its normally closed pins 1 
and 2 should be connected to points E21 and 
F21 respectively. The two common pins, 1 and 
2, are attached to locations E19 and F19. Fi- 
nally, the coil terminal is connected to points 
E16 and F16. 

11. The following jumper connections are required: 



Wire 


From 


To 


1 


X10 


A10 


2 


X16 


A16 


3 


E4 


F4 


4 


E7 


F7 


5 


A21 


J23 


6 


A23 


J21 


7 


H9 


H19 


8 


14 


110 


9 


J7 


J16 


10 


J2 


Y2 


11 


J5 


Y4 



12. Solder two wires to the battery you'll use, one 
wire to the positive pole, the other to the neg- 
ative pole. 



154 



Robotics 



13. Connect the positive pole wire to point 123 of 
the solderless breadboard. Connect the nega- 
tive pole wire to point B23. 

14. Solder two wires to the dc motor, one to its 
positive pole, the other to its negative pole. 

15. Connect the positive pole wire to point A19 of 
the breadboard and the negative pole wire to 
location A14. 



Figure 1 3-2. The Finished Commodore Board 




This solderless breadboard contains the most complex circuit 
project in this book. 

Changes When Constructing the Atari Version 
Refer to Figure 13-3 for the layout of the Atari 
version. 




Substitute the following steps in the Atari version: 

3. The wires from pins 1 and 2 connect to points 
J25 and A26 respectively. 



155 



CHAPTER 13 




Robotics 



11. These are the jumper connections for the Atari 
version: 



147' - 

Wire 


From 


To 


i 


vi n 
X10 


A10 


2 


Xl6 


A16 


3 


b4 


F4 


4 


fc.7 


prj 

F7 


5 


B3 


G30 


6 


B6 


B31 


7 


D26 


C27 


8 


D28 


D29 


9 


C29 


D30 


10 


H25 


G26 


11 


G27 


G28 


12 


H28 


G29 


13 


A21 


J23 


14 


A23 


J21 


15 


J31 


Y31 


16 


H9 


H19 


17 


14 


110 


18 


J7 


J16 


19 


J2 


Y2 


20 


J5 


Y4 



13. Connect the positive pole wire from the bat- 
tery to point 123 of the solderless breadboard. 
Connect the negative pole wire to point 121. 

16. Insert the 7400 IC into the solderless bread- 
board so that its pins 1 and 8 go into plug 
points F25 and E31 respectively. 




Warning: If you use a larger motor, remember to 
mind the ratings of the solderless breadboard and 
its relays. 



The circuit uses two signals from the com- 
puter — one to switch on the motor and the other 
to reverse the battery polarity to the motor. Re- 
versing the battery polarity to a dc motor causes 
its shaft to rotate in the opposite direction. 

The motor can be used to turn the wheels of a 
small mobile "turtle" robot. If you use a dc gear 
motor with a reasonably low rpm speed and 
enough torque, you can even control a joint of a 

157 



CHAPTER 13 



robot, such as the elbow or shoulder of a mechan- 
ical arm. You can use several of these motor con- 
trol circuits to operate a multijoint robot. Consider 
using a demultiplexer to send the digital signals to 
different motor control circuits. 

Some robots simply turn on their motors for a 
certain amount of time, assuming that the parts 
manipulated by the motors reach particular points. 
But if, for example, something obstructs their 
movements, these robots continue working, oblivi- 
ous to their situations. More intelligent robots use 
sensors to inform them about their environments. 
If you build a mobile robot, you can use micro- 
switches to check whether your robot has bumped 
into a wall. If it requires several such sensors, you 
may have to use a multiplexing circuit. You can 
also mount potentiometers to turn with the joints 
of a mechanical-arm robot. The values returned by 
the A/D converter of your computer allow you to 
keep track of the arms' positions. 

Once you build the motor control circuit, you 
can control it from your computer in much the 
same way as the following demonstration program 
does. Plug the circuit into control port 1 of your 
computer. (The Commodore 64/128 version of the 
program requires that you insert a joystick into 
control port 2.) 

Program 1 3-1 — Commodore 64/1 28 

AK 100 REM MOTOR CONTROL DEMONSTRATION 
SS 110 REM REQUIRES A JOYSTICK 
HC 115 PRINT "JOYSTICK CONTROLS " : PRINT 
SA 120 PRINT "UP - MOTOR TURNS IN ONE DIR 
ECTION " 

CH 130 PRINT "DOWN - MOTOR TURNS IN OPPOS 

ITE DIRECTION" 
CE 132 PRINT : PRINT "PRESS FIRE BUTTON TO 

I SPACE] EX IT DEMO" 
DB 135 B=0 
HK 140 A=PEEK( 56320) 

CG 150 IF (A AND 2T0)=0 THEN GOSUB 1000: 
GOTO 140 



158 



Robotics 



EP 160 IF (A AND 2TD=0 THEN GOSUB 2000: 

GOTO 140 
CQ 170 GOSUB 3000 

PM 180 IF (A AND 2T4)=0 THEN END 
JX 190 GOTO 140 

CB 1000 REM TURN MOTOR ON IN ONE DI RECTI 
ON 

CM 1010 REM CHECK IF THIS HAS ALREADY BE 

EN DONE 
FK 1020 IF B=l THEN 1100 

MA 1030 REM SET FIRST DATA LINE FOR OUTP 
UT 

SM 1040 POKE 56323, PEEK ( 56323 ) OR ( 2 T0 ) 
GD 1050 REM SET FIRST DATA LINE LOGIC LO 

W TO TURN ON MOTOR 
EG 1060 POKE 56321, PEEK( 56321 )ANDNOT(2T0 

) 

KD 1070 B=l 
RF 1100 RETURN 

JJ 2000 REM TURN ON MOTOR IN OTHER DIREC 
TION 

KJ 2010 REM CHECK IF THIS HAS ALREADY BE 

EN DONE 
KK 2020 IF B=2 THEN 2100 

CR 2030 REM SET BOTH DATA LINES FOR OUTP 
UT 

QX 2040 POKE 56323, PEEK( 56323 )OR( 2T0+2T1 
) 

CM 2050 REM SET BOTH DATA LINES LOGIC LO 
W TO TURN ON MOTOR AND REVERSE P 
OLARITY 

MQ 2060 POKE 56321, PEEK ( 563 21 ) ANDNOT ( 2 T0 

+ 2U) 
RC 2070 B=2 
MC 2100 RETURN 
MC 3000 REM TURN MOTOR OFF 

EC 3010 REM CHECK AND SEE IF THIS HAS BE 

EN DONE 
JP 3020 IF B=0 THEN 3100 

KM 3030 REM TURN BOTH DATA LINES LOGIC H 
IGH 

BM 3040 POKE 56321, PEEK(56321)OR(2T0+2Tl 
) 

SG 3050 REM RESET BOTH DATA LINES FOR IN 
PUT 

PX 3060 POKE 56323, PEEK( 56323 ) ANDNOT ( 210 

+ 2TD 
XS 3070 B=0 

HA 3100 RETURN 



159 



CHAPTER 13 



Program 13-1— VIC-20 

XS 10 PRINT "KEYBOARD CONTROLS ": PRINT 
SB 20 PRINT "< - MOTOR TURNS IN ONE DIREC 
TION" 

KR 30 PRINT "> - MOTOR TURNS IN OPPOSITE 

[SPACE } DIRECTION" 
DE 40 PRINT: PRINT "PRESS SPACE BAR TO EXI 

T DEMO" 
CH 50 B=0 
EH 60 A=PEEK(197) 

MS 70 IF A=29 THEN GOSUB1 20 : GOTO60 
PS 80 IF A=37 THEN GOSUB210 :GOTO60 
MK 90 GOSUB300 

XD 100 IF A=32 THEN POKE 198,0:END 
CP 110 GOTO60 

FJ 120 REM TURN MOTOR ON IN ONE DIRECTIO 
N 

PP 130 REM CHECK IF THIS HAS ALREADY BEE 

N DONE 
SE 140 IF B=l THEN200 

XK 150 REM SET FIRST DATA LINE FOR OUTPU 
T 

FJ 160 POKE 37139, PEEK ( 37 1 39 ) OR ( 2 T 2 ) 

CS 170 REM SET FIRST DATA LINE LOGIC LOW 

TO TURN ON MOTOR 
RF 180 POKE 37137, PEEK(37137)ANDNOT(2T2) 
FF 190 B=l 
MC 200 RETURN 

JQ 210 REM TURN ON MOTOR IN OTHER DIRECT 
ION 

QR 220 REM CHECK IF THIS HAS ALREADY BEE 

N DONE 
QC 230 IF B=2 THEN290 

PR 240 REM SET BOTH DATA LINES FOR OUTPU 
T 

PR 250 POKE 37139, PEEK ( 37 1 39 ) OR ( 2 T 2+ 2 T 3 ) 
PX 260 REM SET BOTH DATA LINES LOGIC LOW 

TO TURN ON MOTOR AND REVERSE POL 

ARITY 

AG 270 POKE 3 7137 , PEEK ( 37137 ) ANDNOT ( 2 T 2+ 

2T3) 
MM 280 B=2 
SK 290 RETURN 
RP 300 REM TURN MOTOR OFF 

CR 310 REM CHECK AND SEE IF THIS HAS BEE 

N DONE 
EG 320 IF B=0 THEN380 

BM 330 REM TURN BOTH DATA LINES LOGIC HI 
GH 



160 



Robotics 



QQ 340 POKE 37137 f PEEK(37137)OR(2T2+2T3) 
FH 3 50 REM RESET BOTH DATA LINES FOR INP 
UT 

CQ 360 POKE 37139,PEEK(37139)ANDNOT(2T2+ 

2T3) 
KX 370 B=0 
HS 380 RETURN 



Program 13-1 — Atari 



AO 100 REM MOTOR CONTROL DEMONSTRAT I 
ON 

NF110 PRINT "KEYBOARD CONTROL" 
Cft 120 PRINT 

BF130 PRINT "< - MOTOR TURNS IN ONE 

DIRECTION" 
KJ 140 PRINT "> - MOTOR TURNS IN OPP 

OSITE DIRECTION" 
LO 150 PRINT "S - STOP MOTOR " 
AK 155 PRINT :PRINT "X - EXIT PROBRA 

M" 

EB 160 B = 

CN 170 A = PEEK (764) 

IK 180 IF A = 54 THEN GOSUB 1000:BOTO 
170 

IN 190 IF A = 55 THEN BOSUB 2000:BOTO 
170 

NF 200 GOSUB 3000 

AK210 IF A = 22 THEN END 

6F 220 SOTO 170 

06 1000 REM TURN MOTOR ON IN ONE DIR 
ECTION 

OJ 1010 REM CHECK IF THIS HAS ALREAD 

Y BEEN DONE 

PD 1020 IF B=l THEN 1100 

AB 1030 REM SET DATA LINES FOR OUTPU 
T 

IP 1032 POKE 54018, 48 
FG 1034 POKE 54016, 3 
10 1036 POKE 54018,52 

NJ 1040 REM SET FIRST DATA LINE LOGI 

C LOW TO TURN ON MOTOR 
FD 1050 POKE 54016, 2 
HH 1060 B=l 
KC 1 100 RETURN 

NH2000 REM TURN ON MOTOR IN OTHER D 
IRECTION 

OK 2010 REM CHECK IF THIS HAS ALREAD 

Y BEEN DONE 



161 



CHAPTER 13 



PS 2020 IF B = 2 THEN 2100 

CP 2030 REM SET BOTH DATA LINES FOR 

OUTPUT 
JA 2032 POKE 54018,48 
FH 2034 POKE 54016,3 
IP 2036 POKE 54018,52 

DF 2040 REM SET BOTH DATA LINES L06I 
C LOW TO TURN ON MOTOR AND R 
E VERSE POLARITY 

FC 2050 POKE 54016,0 

HJ 2060 B = 2 

KD2100 RETURN 

FN 3000 REM TURN MOTOR OFF 

JJ3010 REM CHECK AND SEE IF THIS HA 

S BEEN DONE 
PS 3020 IF B = THEN 3100 
JD 3030 REM SET BOTH DATA LINE LOGIC 
HIGH 

FF 3040 POKE 54016,3 

DL 3050 REM RESET DATA LINES FOR INP 
UT 

JC 3060 POKE 54018,48 
FF 3070 POKE 54016,0 
JA 3090 POKE 54018,52 
IA 3095 B = 
KE3100 RETURN 



162 



Appendices 




COMPUTE !'s Guide to 

Typir iy ill r i uyivji i lo 



Computers are precise — type each program in this 
book exactly as it's listed, including the necessary 
punctuation and symbols, except for special char- 
acters noted below. We've provided a special list- 
ing convention as well as a program to check your 
typing — "The Automatic Proofreader." 

Programs for Commodore and Atari 800/XL/XE 
computers may contain some hard-to-read special 
characters, so we have a listing system which indi- 
cates these control characters. You'll find these 
Commodore and Atari characters in curly braces; 
do not type the braces. For example, {CLEAR} or 
{CLR} instructs you to insert the symbol which 
clears the screen on the Atari or Commodore ma- 
chine. A complete list of these symbols is found in 
the table below. For Commodore and Atari com- 
puters, a single symbol by itself within curly 
braces is usually a control key or graphics key. If 
you see {A}, hold down the CONTROL key and 
press A. This will produce a reverse video charac- 
ter on the Commodore (in quote mode) or a 
graphics character on the Atari. 

Graphics characters entered with the Commo- 
dore logo key are enclosed in a special bracket: 
f<A>]. In this case, you would hold down the 
Commodore logo key as you type A. Our Com- 
modore listings are in uppercase, so shifted sym- 
bols are underlined. A graphics heart symbol 
(SHIFT-S) would be listed as S. One exception is 
{SHIFT-SPACE}. When you see this, hold down 
SHIFT and press the space bar. If a number pre- 
cedes a symbol, such as {5 RIGHT}, {6 S}, or 
f<8 Q>], you would enter five cursor rights, six 
shifted S's, or eight Commodore-Q's. On the 



165 



APPENDIX A 



When You 
Read: 

{CLR} 

{HOME} 

{UP} 

{DOWN} 

{LEFT} 

{RIGHT} 

{RVS} 

{OFF} 

{BLK} 

{WHT} 

{RED} 

{CYN} 

{PUR} 

{GRN} 

{BLU} 

{YEL} 



Atari, inverse characters (white on black) should 
be entered with the inverse video key (Atari logo 
key on 400/800 models). 



Press: 



SHIFT 



CLR/HOME 



CLR HOME 



SHIFT 



t CRSR J 



t CRSR i 



SHIFT 



«— CRSR — 



— CRSR- 



CTRL 



CTRL 



CTRL 



CTRL 



CTRL 



CTRL 



CTRL 



CTRL 
CTRL 



CTRL 



See: 

m 

□ 

m 



□ 



When You 
Read: 

& 3 2 
i 4 § 

& *3 

g 7§ 

! Fl } 

{ n } 

{ F3 } 
{ F4 } 

{ re } 

{ F6 } 
{ F7 } 
{ F8 } 



Press: 



COMMODORE 



COMMODORE 



COMMODORE 



COMMODORE 



COMMODORE 



COMMODORE 



COMMODORE 



COMMODORE 



SHIFT 



SHIFT 



SHIFT 



SHIFT 



See: 

EH 

BIB 

Bffl 

00 

E 

Ell 

□ 
■ ■ 



■ 



Whenever more than two spaces appear in a 
row, they are listed in a special format. For ex- 
ample, {6 SPACES} means press the space bar six 
times. Our Commodore listings never leave a sin- 
gle space at the end of a line, instead moving it to 
the next printed line as {SPACE}. 



The Automatic Proofreader 
Type in the appropriate program listed below, 
then save it for future use. The Commodore 
Proofreader works on the Commodore 128, 64, 



166 



COMPUTE! 's Guide to Typing In Programs 



and VIC-20. Don't omit any lines, even if they 
contain unfamiliar commands or you think they 
don't apply to your computer. When you run the 
program, it installs a machine language program 
in memory and erases its BASIC portion automati- 
cally (so be sure to save several copies before run- 
ning the program for the first time). If you're 
using a Commodore 128, do not use any 
GRAPHIC commands while the Proofreader is ac- 
tive. You should disable the Commodore Proof- 
reader before running any other program. To do 
this, either turn the computer off and on or enter 
SYS 64738 (for the 64), SYS 65341 (128), or SYS 
64802 (VIC-20). To reenable the Proofreader, re- 
load the program and run it as usual. Unlike the 
original VIC/64 Proofreader, this version works 
the same with disk or tape. 

On the Atari, run the Proofreader to activate it 
(the Proofreader remains active in memory as a 
machine language program); the BASIC loader 
automatically erases itself. Pressing SYSTEM RE- 
SET deactivates the Atari Proofreader; enter 
PRINT USR(1536) to reenable it. 

Once the Proofreader is active, try typing in a 
line. As soon as you press RETURN, a pair of let- 
ters appears. The pair of letters is called a 
checksum. 

Compare the value displayed on the screen by 
the Proofreader with the checksum printed in the 
program listing in the book. The checksum is 
given to the left of each line number. Just type in 
the program a line at a time (without the printed 
checksum), press RETURN or Enter, and compare 
the checksums. If they match, go on to the next 
line. If they don't, check your typing; you've made 
a mistake. Because of the checksum method used, 
do not type abbreviations, such as ? for PRINT. 
On the Atari Proofreader, spaces are not counted 



167 



APPENDIX A 



as part of the checksum, so be sure you type the 
right number of spaces between quotation marks. 
The Atari Proofreader does not check to see that 
you've typed the characters in the right order, so 
if characters are transposed, the checksum still 
matches the listing. The Commodore Proofreader 
catches transposition errors and ignores spaces un- 
less they're enclosed in quotation marks. 

Program 1 . Commodore Proofreader 

10 VEC=PEEK(772)+256*PEEK(773) :LO=43 :HI=44 

20 PRINT" { CLR} I WHT J AUTOMATIC PROOFREADER FOR ";:IF 

VEC=42364 THEN PRINT "C-64" 
30 IF VEC=50556 THEN PRINT "VIC-20 { BLU } " 
40 IF VEC=35158 THEN WAIT CLR: PRINT "PLUS / 4 & 16" 
50 IF VEC=17165 THEN LO=45 :HI=46 :WAIT CLR:PRINT"12 
8 1 WHT j " 

60 SA=(PEEK(LO)+256*PEEK(HI ) )+6:ADR=SA 

70 FOR J=0 TO 166: READ BYT: POKE ADR, BYT : ADR=ADR+1 : 

CHK=CHK+BYT :NEXT 
80 IF CHK<> 20570 THEN PRINT "*ERROR* CHECK TYPING 

I SPACE j IN DATA STATEMENTS ": END 
90 FOR J=l TO 5 : READ RF, LF, HF : RS=SA+RF :HB=INT ( RS/2 

56) :LB=RS-(256*HB) 
100 CHK=CHK+RF+LF+HF : POKE SA+LF, LB : POKE SA+HF , HB : N 

EXT 

110 IF CHKO22054 THEN PRINT "* ERROR* RELOAD PROGR 

AM AND CHECK FINAL LINE": END 
120 POKE SA+149, PEEK (772) : POKE SA+150 , PEEK ( 77 3 ) 
130 IF VEC=17165 THEN POKE SA+14 , 22 : POKE SA+18,23: 

P0KESA+29 , 224 : POKESA+1 39 , 2 24 
140 PRINT CHR$ ( 147 ) ;CHRS (17 ); "PROOFREADER ACTIVE": 

SYS SA 

150 POKE HI , PEEK ( HI ) +1 : POKE ( PEEK ( LO ) +256*PEEK ( HI ) 
)-l,0:NEW 

160 DATA 120,169,73,141,4,3,169,3,141,5,3 

170 DATA 88,96,165,20,133,167,165,21,133,168,169 

180 DATA 0,141,0,255,162,31,181,199,157,227,3 

190 DATA 202,16,248,169,19,32,210,255,169,18,32 

200 DATA 210,255,160,0,132,180,132,176,136,230,180 

210 DATA 200,185,0,2,240,46,201,34,208,8,72 

220 DATA 165,176,73,255,133,176,104,72,201,32,208 

230 DATA 7,165,176,208,3,104,208,226,104,166,180 

240 DATA 24,165,167,121,0,2,133,167,165,168,105 

250 DATA 0,133,168,202,208,239,240,202,165,167,69 

260 DATA 168,72,41,15,168,185,211,3,32,210,255 



168 



COMPUTE! 's Guide to Typing In Programs 



270 DATA 104,74,74,74,74,168,185,211,3,32,210 
280 DATA 255,162,31,189,227,3,149,199,202,16,248 
290 DATA 169,146,32,210,255,76,86,137,65,66,67 
300 DATA 68,69,70,71,72,74,75,77,80,81,82,83,88 
310 DATA 13,2,7,167,31,32,151,116,117,151,128,129, 
167,136,137 



Program 2. Atari Proofreader 



100 GRAPHICS 

110 FOR 1=1536 TO 1700:READ A : POKE I,A:CK=CK 
+A: NEXT I 

120 IF CKO19072 THEN ? "Error in DATA State 

ments. Check Typing. ":END 
130 A=USR<1536) 

140 ? :? "Automatic Proofreader Now Activate 

d. " 
150 NEW 

1536 DATA 104,160,0,185,26,3 
1542 DATA 201,69,240,7,200,200 
1548 DATA 192,34,208,243,96,200 
1554 DATA 169,74,153,26,3,200 
1560 DATA 169,6,153,26,3,162 
1566 DATA 0,189,0,228,157,74 
1572 DATA 6,232,224,16,208,245 
1578 DATA 169,93,141,78,6,169 
1584 DATA 6,141,79,6,24,173 
1590 DATA 4,228,105,1,141,95 
1596 DATA 6,173,5,228,105,0 
1602 DATA 141,96,6,169,0,133 
1608 DATA 203,96,247,238,125,241 
1614 DATA 93,6,244,241,115,241 
1620 DATA 124,241,76,205,238,0 
1626 DATA 0,0,0,0,32,62 
1632 DATA 246,8,201,155,240,13 
1638 DATA 201,32,240,7,72,24 
1644 DATA 101,203,133,203,104,40 
1650 DATA 96,72,152,72,138,72 
1656 DATA 160,0,169,128,145,88 
1662 DATA 200,192,40,208,249,165 
1668 DATA 203,74,74,74,74,24 
1674 DATA 105,161,160,3,145,88 
1680 DATA 165,203,41,15,24,105 
1686 DATA 161,200,145,88,169,0 
1692 DATA 133,203,104,170,104,168 
1698 DATA 104,40,96 



169 



B 



Integrated Circuits 



7400/74LS00 
Quad NAND Gate 



Ground 7 



n 




14 +5 volts 



13 



12 



11 



10 



171 



APPENDIX B 



7402/74LS02 
Quad NOR Gate 







—zj— ^ 

— TL_n] 



14 +5 volts 



13 



10 



172 



ated Circuits 



7404/74LS04 
Hex Inverter 




Ground 7 I 8 



173 



APPENDIX B 



7408/74LS08 
Quad AND Gate 



Ground 7 



"U 







14 



13 



12 



11 



10 



+ 5 volts 



174 



integrated Circuits 




175 



APPENDIX B 



74151/74LS151 

Eight Line to One Line Mutliplexer 













Input 3 


1 




16 


+ 5 volts 


Input 2 


2 




15 


Input 4 


Input 1 


3 




14 


Input 5 


Input 


4 




13 


Input 6 


Output 


5 




12 


Input 7 


Inverted output 


6 




11 




Enable 


7 




10 


B > In P ut 
f select 


Ground 


8 




9 





176 



Integrated Circuits 



74154/74LS154 

Four Line to 16 Line Demultiplexer 













Output 


1 




24 


+ 5 volts 


Output 1 


2 




23 


" 


Output 2 


3 




22 












V Output 










/ select 


Output 3 


4 




21 




Output 4 


5 




20 


V 


Output 5 


6 




19 


Enable 2 


Output 6 


7 




18 


Enable 1 


Output 7 


8 




17 


Output 15 


Output 8 


9 




16 


Output 14 


Output 9 


10 




15 


Output 13 


Output 10 


11 




14 


Output 12 


Ground 


12 




13 


Output 11 



177 



APPENDIX B 



74367/74LS367 

Hex Three-State Buffers 



Enable input 



Ground 8 



16 



15 



14 



13 



12 



11 



10 



-1-5 volts 



Enable input 





Truth Table 




Enable Input 


Input 


Output 


H 


H or L 


High impedance 


L 


L 


L 


L 


H 


H 



178 



ntegrated Circuits 




179 



Index 



actuators vii 97 
A/D converter 33 
analog circuit 3 
analog devices 33 

analog-to-digital converter. See A/D 

converter 
applications vii 
Atari BASIC 83 

"Automatic Proofreader, The" 166-69 
binary number system 3-6 
bit 5 

Boolean algebra 109 
breadboarding viii. See also wiring, 

methods of 
burglar alarm 97-106 

Atari program 105 

Commodore program 102 

constructing 99-100 

VIC-20 program 103 
byte 6 

circles, small 110 
circuit, analog 3 
circuit, building a viii 
circuit, digital 3 
cold joint xii 
control port pin 82, 109 
data vii 

data direction register 81, 82 

Atari 82-83 

Commodore 81-82 
data port 81 

dc motor control circuit 151 
Atari program 161-62 
Commodore program 158-59 
constructing (Atari version) 155-57 
constructing (Commodore version) 
153-55 

VIC-20 program 160-61 
decoders 115-18 
demultiplexer 115-18, 158 
demultiplexer circuit 145-48 

constructing 145-46 
digital circuitry 109 
digital light beam timer 74-78 

Atari program 78 

Commodore program 76 

VIC-20 program 77 
digital light sensor 97, 98, 129 

variable 67 
digital logic 109-20 
digital signal 67, 109 

high 67 

low 67 



D-subminiature female connectors 9 

electromagnet 90 

electromechanical switch 90 

electron beam 59-61 

electron gun 53 

electronic signals 81 

electronic switch 81-94, 98, 136 

Atari program 93 

Commodore program 92 

constructing 84-88 

using 91, 94 

VIC-20 program 92 
electrons 53 
encoders 115-18 
game paddles 33-41 

Atari program 39 

Commodore program 38 

constructing 34-35 

"ML Paddle Reader" program 41 

reading 39-40 

VIC-20 program 39 
gates 109-15 

AND 111 

combining 143 

exclusive NOR 113 

exclusive OR 112 

NAND 111 

nonin verting buffer 110 

NOR 112 

NOT 110 

OR 112 
H (logic high) 110 
IC chip. See integrated circuit chip 
icons xiii 
input 18 

input/output ports 9 
integrated circuit chip xi, 118 

pins 54 
integrated circuits 171-79 

demultiplexer, four line to 16 line 

177 

hex inverter 173 

hex three-state buffers 1 78 

multiplexer, eight line to one line 176 

quad AND gate 174 

quad NAND gate 171 

quad NOR gate 172 

quad operational amplifier 179 

quad OR gate 175 
interrupt request (IRQ) 39 
inverters 110 
I/O pin 82 
I/O ports 9 



181 



IRQ. See interrupt request 
joystick 97 

constructing 23-29 

gravity 28-29 

port 9-11 

push button 23-27 

push button, constructing 24-27 
joystick port connector 16-20 

Atari program 19 

Commodore program 18 

constructing 16-17 

VIC-20 program 19 
L (logic low) 100 
light-emitting diode (LED) 12, 91 
light pen 53-64, 67 

Atari program 64 

Commodore program 62 

constructing 54-58 

programming with 61-62 

VIC-20 program 63 
light sensor, analog 45-50, 136 

Atari program 49 

Commodore program 49 

constructing (Atari version) 47-48 

constructing (Commodore version) 

45-47 

light sensor, digital 67-78 

Atari program 73 

Commodore program 73 

constructing 68-71 

VIC-20 program 73 
light switch 136-40 

Atari program 139 

Commodore program 137 

VIC-20 program 138 
location 83 

logic probe 10-13, 123-26 

constructing 10-13, 123-25 

using 126 
logic states 

high 15 

low 15, 20 
low-power Schotkey (LS) 120 
"ML Paddle Reader" program 41 
monitor 53 

multiplexer circuit 140-45, 158 

Atari program 144 

Commodore program 143 

constructing 142 

VIC-20 program 
multiplexers 115-18 
multiplier 13 
NAND gates 60 
noninverting buffer 60, 90 
number systems 4-6 

binary 3-6 

decimal 4 



ohms 13 
output 18 
output signal 109 
PADDLE(X) 34, 50 
phototransistor 60, 72 
polling 143 
ports 9, 10 
data 81 

input/output 9 

joystick 9-11 
potentiometer 33 
power ratings 14 
registers 81 
resistor color codes 14 
resistors 13, 14, 33, 126 
resistor variable 45 
robotics 151-62 
sensors vii, 81, 97, 109 
software vii 
soldering 55 

soldering iron, heating ix-xii 
STICK 18, 74, 82 
STRIG 18 
switch 3, 72 

Atari version 169 

Commodore version 168 

tilt 28 
switch sensor 98, 100 

infrared 98 

magnetic switch 98 

metallic tape 98 

ultrasonic 98 

vibration detectors 98 
tilt switches 28 
timer circuit 74 
tin xii 

tolerance 13 

transistor-transistor logic signal level. 

See TTL 
truth table 109 
TTL 3, 120 

two-beam digital timer circuit 129-36 
Atari program 135 
Commodore program 134 
constructing 130 
using 134 

VIC-20 program 135 
typing in programs 165-69 
voltage 3, 33 
watts 14 

wiring, methods of viii 
circuit boards viii 
mounting viii 
plug points ix 
wire wrapping viii 



182 



COMPUTE! Books 

Ask your retailer for these COMPUTE! Books or order 
directly from COMPUTE!. 

Call toll free (in US) 800-346-6767 (in NY 212-887- 
8525) or write COMPUTE! Books, P.O. Box 5038, F.D.R. 
Station, New York, NY 10150. 

Quantity Title Price" Total 

SpeedScript: The Word Processor for the 

Commodore 64 and VIC-20 (94-9) $ 9.95 



Commodore SpeedScript Book Disk $ 1 2.95 

1 28 Machine Language for Beginners (033-5) $16.95 

COMPUTEi's First Book of the Commodore 128 (059-9) $14.95 

COMPUTE! '$ Commodore 64/128 Collection (97-3) $12.95 

All About the Commodore 64, Volume Two (45-0) $16.95 

All About the Commodore 64, Volume One (40-X) $12.95 

Programming the Commodore 64: 

The Definitive Guide (50-7) $24.95 

COMPUTEi's Data File Handler for the 

Commodore 64 (86-8) $12.95 

COMPUTEi's Kids and the Commodore 128 (032) $14.95 

Kids and the Commodore 64 (77-9) $12.95 

COMPUTEi's Commodore Collection, Volume 1 (55-8) $12.95 

COMPUTEi's Commodore Collection, Volume 2 (70-1) $12.95 

COMPUTEi's Personal Accounting Manager for the 

Commodore 64 (014-9) $12.95 

COMPUTEi's VIC-20 and Commodore 64 

Tool Kit: BASIC (32-9) $16.95 

COMPUTEi's VIC-20 and Commodore 64 

Tool Kit: Kernal (33-7) $16.95 

COMPUTEi's Telecomputing on the 

Commodore 64 (009) $12.95 

COMPUTEi's VIC-20 Collection (007) $12.95 

Programming the VIC (52-3) $24.95 

VIC Games for Kids (35-3) $12.95 

Mapping the VIC (24-8) $14.95 

'Add $2.00 per book for shipping and handling. 
Outside US add $5.00 air mail or $2.00 surface mail. 

NC residents add 4.5% sales tax 

Shipping & handling: $2.00/book 

Total payment 



All orders must be prepaid (check, charge, or money order), 
All payments must be in US funds. 
□ Payment enclosed. 

Charge □ Visa □ MasterCard □ American Express 

Acct. No Exp. Date_ 

Name 



(Required) 



Address- 



City State Zip_ 

"Allow 4-5 weeks for delivery. 

Prices and availability subject to change. 

Current catalog available upon request. 



COMPUTE! Books 

P.O. Box 5038 
F.D.R. Station 
New York, NY 10150 

Ask your retailer for these COMPUTE! Books. If he or she 
has sold out, order directly from COMPUTE!. 

For Fastest Service 
Call Our TOLL FREE US Order Line 
1-800-346-6767 
In NY call 212-265-8360 

Or write COMPUTE! Books, 

P.O. Box 5038, F.D.R. Station, New York, NY 10150 



Quantity Title Price Total 

COMPUTED First Book of Atari (00-0) $12.95 

COMPUTE !'s Second Book of Atari (06-X) $12.95 

COMPUTED Third Book of Atari (18-3) $12.95 

COMPUTEI's First Book of Atari Graphics (08-6) $12.95 

COMPUTEI's Second Book of Atari 

Graphics (28-0) $12.95 

COMPUTEI's First Book of Atari Games (14-0) $12.95 

Inside Atari DOS (02-7) $19.95 

COMPUTEI's Atari Collection, Volume 1 (79-5) $12.95 

COMPUTEI's Atari Collection, Volume 2 (029-7) $14.95 

Machine Language for Beginners (1 1-6) $14.95 

Second Book of Machine Language (53-1) $14.95 

SpeedSchpt: The Word Processor 

for the Atari (003) $ 9.95 

Mapping The Atari, Revised (004) $16.95 

COMPUTEI's ST Programmer's Guide (023-8) $16.95 

The Elementary Atari ST (024) $16.95 

COMPUTEI's Kids and the ST (386) $14.95 

Elementary ST BASIC (343) $14.95 

Introduction to Sound and Graphics 

on the Atari ST (035) $14.95 



Add $2.00 per book shipping and handling. Outside US add 
$5.00 air mail or $2.00 surface mail. 

NC residents add 4.5% sales tax 

Shipping & handling 

Total payment 

All orders must be prepaid (money order, check, or charge). All 
payments must be in US funds. 

□ Payment enclosed Please charge my: □ Visa □ MasterCard 

□ American Express 

Acct. No Exp. Date 

Name 

Address 

City State Zip 

Country , 

'Allow 4-5 weeks for delivery. 

Prices and availability subject to change without notice. 



If you've enjoyed the articles in this book, you'll find 
the same style and quality in every monthly issue of 
COMPUTE! Magazine. Use this form to order your 
subscription to COMPUTE!. 

For Fastest Service 
Call Our Toil-Free US Order Line 

1-800-247-5470 

In IA call 1-800-532-1272 



COMPUTE! 

P.O. Box 1 0954 

Des Moines, !A 50340 

My computer is: 

□ Commodore 64 or 128 □ TI-99/4A □ IBM PC or PCjr □ VIC-20 

□ Apple □ Atari □ Amiga □ Other 

□ Don't yet have one... 

□ $24 One Year US Subscription 

□ $45 Two Year US Subscription 

□ $65 Three Year US Subscription 

Subscription rates outside the US: 

□ $30 Canada and Foreign Surface Mail 

□ $65 Foreign Air Delivery 

Name 

Address 

City State Zip 

Country 

Payment must be in US funds drawn on a US bank, international 
money order, or charge card. 

□ Payment Enclosed □ Visa 

□ MasterCard □ American Express 

Acct. No. Expires / 

(Required) 



Your subscription will begin with the next available issue. Please 
allow 4-6 weeks for delivery of first issue. Subscription prices subject 
to change at any time. 




•\...-' > <