~home||
 Overview

ELECTRONICS WORKBENCH
(C) 1988, 1991 Interactive Image Technologies Ltd.
All rights reserved.

An Electronic Digital Circuit
Design and Simulation Program

────────────────────────────────────────
   {■ What you can do with EWB:purp}
   {■ Parts of the screen:scrn}
   {■ Building a circuit:wksp}
   {■ Simulating a circuit:go}
   {■ File operations:F9}
   {■ Program controls:ctrl}
   {■ List of topics:tpx}

Point and click to get more.
~purp||
 Purpose
 Electronics Workbench can be used to

   ■ {construct:wksp} a schematic for an electronic
     circuit

   ■ {simulate:go} the activity of that circuit

   ■ display the circuit activity on simulated
     {test instruments:inst}

   ■ and {print:prt} a copy of the schematic, the
     instrument readings and parts list
~scrn||
 Appearance
 The program models a workbench for electronics.

 The large central area on the screen acts as a
{breadboard:wksp} for circuit assembly.

 On the right side of this {workspace:wksp} is a
{bin of parts:bin}.

 Above the workspace is a shelf of
{test instruments:inst} and {program controls:ctrl}.

 You may wish to read about {common operations:ops}
for the {workspace:wksp}.

{List of topics:tpx}
~inst||
 Instruments
 To use the {test instruments:ti1}

      {■ put them on the workspace:wksp}
      {■ attach wires to test points:ti2}
      {■ zoom them open:ti3}
          to adjust the controls
          to see the display

{instruments:ilst}
~ti1||
 Test instruments
 The left end of the shelf at the top of the screen
holds test instruments.

 Handle the icons for the instruments just as you
do parts, except that there is only one copy of
each instrument.

 To use the test instruments, you must put them on
the {workspace:wksp} and {run wires:ti2} from them to the
points in the circuit you wish to measure.
~ti2||
 Attach instruments
 Attach {wires:wir} from the terminals of the instrument
icon to points where you want to measure values in
the circuit. Use the {connector} to put test points
in the circuit.
~ti3||
 Adjust and read
 {Zoom:f7} instruments on the {workspace:wksp} open
by highlighting them and pressing F7 or double
clicking. Now you can read their displays,
{adjust:sps} their controls, or {drag:drg} their faces
around.

 {See each instrument for details.:ilst}
~wksp||
 Workspace
 To build a circuit
      {■  pick components from the parts bin:pnt}
      {■  place them on the workspace:wksp}
      {■  wire the components together:wir}
      {■  attach test instruments:inst}
      {■  click GO to activate the circuit:go}

 When an object is {selected:sel} you can {drag:drg} it,
connect {wires:wir} to other objects, or perform
various {menu} operations on it.

 You can {scroll the workspace:scrl} to build a
large circuit.

 {common operations:ops}  {mouse}  {tips}
~tips||
 Tips
 When you lay out a circuit, leave room between
parts to insert connectors or other parts easily.

 {Rotate:f8} parts to get the layout you want.

 You can turn on a {grid} that objects will line up
with. All terminals of all parts will be on grid
lines if you choose grid size 1 -- this eliminates
small kinks in the wires.

 {Wires:wir} may find different routes if they start
from the other end. This can help make a nice
appearance for {printing out:prt}.

 Use {macros:f5} to make parts you don't have, such
as gates with three or more inputs, or to build a
complex circuit out of smaller modules. You must
{save:lsp} the parts bin with the macro and use
the same bin when you reload circuits containing
the macro in the future.
~scrl||
 Scrolling the workspace
 The circuit may be considerably larger than the
area of the screen. The workspace has an area of
approximately three by three screens.

 {Point:pnt} to the {scroll:scri} icon in the upper
right and hold the {first mouse button:m} to move the
circuit around. The scroll icon also indicates the
relative position of the visible portion in the
workspace. When you move a wire on the workspace
beyond the edge of the screen, the workspace
scrolls to keep up with it.

 The workspace will not scroll when an
instrument face is {zoomed:f7} open.
~ops||
 Common operations
 Electronics Workbench operates by direct
manipulation of objects on the screen. You can do
all operations in the program without typing
commands. Function keys provide shortcuts to most
operations.

 To do anything with an object in Electronics
Workbench, {point:pnt} to it with the tracker to
highlight it.

 Now press the {first mouse button:m} and the
simplest thing you can do with the lighted object
happens. For most objects, this means you can
{drag:drg} it with the tracker.

 Click the {last mouse button:m} to {select an:ps}
{object permanently:ps} and then pull down the
{menu}. This lets you do things such as {label:f6},
{rotate:f8}, {move:f4}, {copy:f3} or make a
{macro:f5} of one or many parts.

 Shortcut: Point to an object and press the
function key listed in the {menu} to do most
operations.
~mouse|m||
 About the mouse
 In the descriptions here, the left mouse button
will be referred to as the "first mouse button"
and the right will be called the "last button."

 For right-handed users, this means the first
button is controlled with the index finger and the
last is controlled with the ring or middle finger.
This should be less confusing to most readers,
since the mouse is used with one hand.

 It also allows left-handed persons to use a
utility (if available, such as Logitech's CLICK
program) to reverse the buttons and still follow
the instructions.
~pnt||
 Pointing with the tracker
 The mouse controls an arrow on the screen,
called the "tracker" or the "cursor."

 Move the tracker onto a component to make it
highlight. Press and hold the {first mouse:m}
{button:m} to make the component move with the
tracker. Release the button to leave the component
in place on the {workspace:wksp}.

 Connect parts with wires by pointing to a terminal,
pressing the first mouse button and stretching the
wire to another terminal to highlight it, and then
releasing the button.
~sel||
 Selecting objects
 Throughout these instructions, we refer to actions
on selected objects. To keep the explanations
simple, "select" may refer to any of the
following actions:
          selecting things {one at a time:ot}
                           {permanently:ps}
                        or {in a block:bs}.

Double clicking --
 Clicking the mouse button twice quickly is a
 shortcut for {zooming:f7} and loading files.
~ot||
 Selecting one at a time
 When you move the cursor into an active area or
near an active object, the area or object
{highlights:pnt} to indicate that it is selected
and ready for action.

 The {first mouse button:m} causes an appropriate
action to happen, such as picking up a component,
stretching a wire, or moving a {spin selector:sps}.

 Function keys act on an object that is selected
by {pointing:pnt}. These other keys perform the
same functions as {menu} items.
~ps||
 Selecting permanently
 Point to an object and click the {last mouse:m}
{button:m} to select an object "permanently," i.e.
until it is deselected by clicking the button
while not touching any component.

 Select an object permanently to use the {menu}
operations.

 You can select several parts this way for mass
{cutting:f2}, {moving:f4}, {copying:f3},
{rotating:f8} or {labelling:f6}.
~bs||
 Selecting in a block
 You can select a group of parts for many
operations -- hold the {last mouse button:m} and
move the tracker to stretch a rectangle that
selects components in its range. Release the
button and the parts within the rectangle will
be selected.

 This is useful for {cutting:f2}, {copying:f3},
{moving:f4} and making {macros:f5}. It works for
{rotating:f8} and {labelling:f6}.
~drg||
 Dragging objects around
 To move a single object, you can {point:pnt} to
it with the tracker and press and hold the
{first mouse button:m}. Now you can drag the part,
instrument icon, instrument face, or dialog box
around on the {workspace:wksp}.

 Release the button to leave the object in its new
place. Objects may be freely dragged about on the
screen this way. Objects may overlap, but you may
lose track of wires this way.
~wir||
 Wires
     ■ {Connect:cct} components by selecting a terminal
     and stretching a wire to its destination.

     ■ To {disconnect:dct} parts, simply select a
     terminal and move the tracker before
     releasing.

     ■ {To connect wires to each other:wct}, use a
     {connector} from the parts bin.
~cct||
 Connecting parts
 To connect components or instruments with wires,
{point:pnt} to a terminal on the object. When the
terminal is highlighted, press and hold the {first:m}
{mouse button:m} while moving the tracker. A "rubber
band" line appears, with one endpoint attached to
the terminal and the other attached to the tracker.
Move the tracker to highlight the destination
terminal and release the button.

 The wire finds a route between the terminals
automatically, making sure it does not go on top of
other components and does not overlap other wires.
Wires cross at right angles without connecting.

 You can insert components into wires by
aligning their terminals with the wire and
releasing.
~wct||
 Joining wires
 A {simple junction:connector} is included in the
parts bin. Use it to:

        ■ make direct connection between wires
        ■ attach test {instruments:inst}

 Like all other circuit elements, these connectors
must be in a circuit before it is simulated with
{GO} in order to have values. Put connections
along the wires in your circuit for test points
while you build it.

 If you {rotate:f8} or {move:f3} a component that
is already wired in place in the circuit, the
wires automatically connect to the new position.
Moving a component, even accidentally, does not
undo prior work.
~dct||
 Cutting wires
 Remove components or instruments from the
{workspace:wksp} by {dragging:drg} them to the parts
bin or top shelf areas. Disconnect wires by
selecting a terminal, holding the first mouse
button, and releasing away from any terminal.
~bin||
 Parts bin
 The parts bin contains the {supply of parts:com}.

 You can {label:f6} components in the parts bin, so
you can put many components of the same value into
the circuit easily. You can change the value in
the parts bin without affecting parts already on
the {workspace:wksp}. {Cut:f2} parts from the bin
by {pointing:pnt} to them with the tracker and
pressing F2.

 If you {cut:f2} parts from the bin or add
{macros:f5} to it, be sure to save the new parts
bin under a new name. When you have a special
parts bin loaded (or have changed the bin),
you will be prompted to save it when you save
the circuit.
~go||
 Activating the circuit
 The GO icon on the command bar is used to simulate
the activity of the circuit.

  {■ simulation:sim}     {■ errors:err}
~sps||
 Spin selector
 Many of the controls on the instruments are spin
selectors. A box containing a number highlights
when you point to it. Press and hold the
{first mouse button:m} to change the number
through a range of values by moving the mouse.
Release the button on the desired number to set
the value.
~keys||
 Special keys and editing
 {File:f9} boxes, {label:f6} boxes,
the {word generator} and the {truth table}
have text fields you can type into.

 On the boxes, a text cursor appears at the
beginning of the first line.

 On the instruments, you must activate the text
cursor by {pointing:pnt} to the text field and
clicking. Click outside a text field to remove
the cursor and make the field inactive.

 {The editing keys:ky1} that move the cursor and
edit the text work as expected in a text field.
~ky1||
 Editing keys
 The cursor control keys move right and left, and
up and down if appropriate. HOME and END move the
cursor to the beginning and end of the line.
CTRL-END deletes text from the cursor position to
the end of the line. ENTER acts as clicking ACCEPT
would. TAB and SHIFT-TAB move forward and back
through the fields if there are more than one.
~ctrl||
 Program controls
 Icons on the upper right of the screen control
fundamental operations in the program:

   ■ The {Menu} contains the program commands.

   ■ The two {scroll boxes:scri} control the {parts bin:bin}
      and {workspace:wksp}.

   ■ The {GO} icon starts simulating the circuit.

 The rectangle towards the middle of the shelf
displays the filename for the circuit. When you
load a circuit the filename appears here. You may
optionally type into this {text field:keys} after
{selecting:sel} it. You will be prompted for a
filename to save to when you use Files (F9) from
the {menu}.
~scri||
 Scroll boxes
 The scroll boxes allow you to move the
{parts bin:bin} (box on the far right)
or the {workspace:wksp}.

 Point to the scroll box, press and hold the {first:m}
{mouse button:m} and move the tracker to scroll the
area.
~menu||
 Menu operations
{help -- f1:f1}
{cut -- f2:f2}
{copy -- f3:f3}
{move -- f4:f4}
{macro -- f5:f5}
{label -- f6:f6}
{zoom -- f7:f7}
{rotate -- f8:f8}
{file -- f9:f9}
{preferences -- f10:f10}
{clear:clr}
{print:prt}
{quit}
~f1||
 Help -- F1
 Press F1 or choose Help from the {menu}
to get help with Electronics Workbench.

 If an object is selected when help is
called, it will refer to the selected object. If
help is called with no object selected, a list of
topics is presented. Click on an entry and a window
containing information will open.

 Within the help system, {boldface:f1} marks
cross-references to other topics. You can select
these words to open another window on the new
topic. More than one help window may be open at
once. You can move the windows around on the
{workspace:wksp} and the workspace is usable while
the windows are open.
~f2||
 Cut -- F2
 Cut parts that are {permanently selected:ps}
from the {workspace:wksp} with the {menu}
selection or F2. This is useful for removing
several parts at once from the circuit.

 You can {drag:drg} individual parts back to the
{parts bin:bin} and release them; they need not be
disconnected beforehand.
~f3||
 Copy -- F3
 To copy a part on the {workspace:wksp} to another
place, {select it permanently:ps} and choose Copy
from the {menu} or {point:pnt} to it and press F3.
To put lots of the same part on the workspace,
point and copy it with F3.

 Copies of parts have the same {labels and:f6}
{values:f6} as the original, so you can make many
copies with the same value easily by assigning a
value before copying. Groups of parts may be
selected and copied to other places in the
circuit.
~f4||
 Move -- F4
 You can move a group of {selected:sel} parts with
the {menu} selection or F4. If there is no room
for them on the {workspace:wksp} when released,
they will bounce back to their source.
~f5||
 Macro -- F5
 You can combine circuits or sub-circuits
into a macro block.

 You can make new parts, such as logic gates with
more inputs, or develop large circuits with
smaller modules.

{select parts:mc1}  {edit macros:mc2}  {save parts:mc3}
~mc1||
 Making a macro
 Select the components you want on the
{workspace:wksp} and choose Macro from the {menu}.
You should give it a name and you must decide
whether to copy the parts or move them from the
workspace into the macro. The macro is then
automatically placed into the {parts bin:bin} in a
standard package.
~mc2||
 Editing a macro
 You can edit the contents of the macro by
{zooming:f7} it open on the workspace. Stretch
wires to the sides of the box to make terminals.
Macros can have labels, which are displayed on the
icon.
~mc3||
 Save macros
 To use macros in a future session, you must save
the parts bin containing them and reload it when
the circuit is used again. Macros that are not in
the current parts bin will be empty and not run.
~f6||
 Label -- F6
 Use this
        ■ to {give values:gvl} to analog parts
        ■ to {label parts:lbp}
        ■ to {label the circuit:lbp}
        ■ to {define models:dfm} of analog parts

 Type values into the "Value" text field.
Not all components will have value text fields.

 Type labels into the "Label" text field.

 Choose models with the "Model" {spin selector:sps}.

 Click on the "Model" button to {alter analog models:dfm}.

 Analog parts must have values for the circuit
simulation to work. Most parts do not have
default values, though the transistors and
diodes have typical useful values.

 To {show:slb} labels, values and models on
the workspace, use the {Preferences:f10} menu.

 You can {select a block:bs} of components and then
label them sequentially by choosing Label,
assigning values or labels in turn, and cancelling
the operation when desired or finished.
~gvl||
 Analog values
 Give values to components by {selecting:sel} them
and choosing Label from the {menu} or pressing F6
when the part is highlighted. Enter the desired input
into the appropriate boxes from the keyboard. If
you click ACCEPT without entering values, the
minimum acceptable value will be given to the part.
Labels and values can be given to parts in the
circuit or in the {parts bin:bin}.

 To change the values of some parts such as the
transistor, you must click on the {"Model" box:dfm}
and adjust parameters appropriately.

 You can give values to the components in the parts
bin, so that many parts with the same value can be
used. Changing the value of the part in the bin
does not change values already in the circuit.
~lbp||
 Text labels
 You can put labels up to six characters long on
components, including connectors.

 You can give a label to the entire circuit by
selecting Label or F6 with no parts selected.

 The circuit label can be {printed:prt} out with
the circuit. It is placed beside the schematic on
the printed output.
~dfm||
 Analog models
 Clicking on the "Model" button opens a box
containing the component parameters. Type the
desired value in the text field beside the
standard abbreviation. The parameters for each
part are explained in the User Manual.

 Models are global, so you can change values for
a model and the changes affect every copy of that
model in the circuit. Models are saved with the
parts bin.

 The "Model" {spin selector:sps} displays the list
of available models.

 Next to "New name" is a text field in which
either a new name for the existing model, or the
name of a new model can be entered.

 In order to change the name of the displayed
model, without generating a new model, specify
the desired name in the "New name" text field
and click on "Change name".

 If a new name is specified, "Save changes" will
generate a model with this new name, having the
specified parameters.

 If no new name is specified, "Save changes" will
save the new model parameters for the existing
model.

 If a model is no longer useful and you wish
to remove it from the list of available models,
click on "Delete".

 While the model box remains active, you can
edit, add or delete as many models from the
model list as you wish.

 When you have completed your edits, and you
have located the model which you wish to assign
to the part being labeled, click on "Accept".
It is not necessary to click on "Save changes"
first, as this is automatically done.

 If you have performed edits, but do not wish
to change the model of the part being labeled,
click on "Cancel".
~f7||
 Zoom -- F7
 Zoom works on {instruments:inst} or {macros:f5}.
{Permanently select:ps} the instrument or macro
and choose Zoom from the {menu} to show an
enlarged view. To close the instrument or macro,
do the same thing.

 Shortcut:  {Point:pnt} and press F7
         or {double click:sel} the mouse button
~f8||
 Rotate -- F8
 You can rotate most of the components to achieve
nearly any desired layout on the {workspace:wksp}.
Each time you select a part and rotate it, it
turns 90 degrees clockwise. {Select:sel} a part or
parts and choose Rotate from the {menu} or press F8.

 The {ground} symbol does not rotate.

 Transistors rotate 90 degrees the first time
you select Rotate, then reverse their symmetry for
the remaining two positions. This enables you to
follow standard drafting conventions when laying
out a circuit.
~f9||
 File -- F9
 To save or load a circuit or a set of parts,
select File from the {menu} or press F9.

 Now you get a file selector box where you can
{load parts:lsp} or {circuits:lsc}, or {save:lsp}
{parts:lsp} or {circuits:lsc}.

 The full path to the current directory is
displayed across the top of the file list. Each
name in the path will act as a pull-down menu
showing the other directories at that level when
you point and press the {first mouse button:m}.
This lets you change directories to load and save
files easily.

 You can save patterns for the {word generator}
from the instrument face.
~lsc||
 Loading and saving circuits
 When you choose to load or save a circuit from
the file selector box, you get a list of existing
circuits.

     ■ To save a new circuit, type a name (up to
     eight characters) into the lower empty box
     and click on SAVE.

     ■ To load a circuit file, select a name from
     the scrolling list or type the name in the
     lower box and click on LOAD.

ENTER after typing is a shortcut to SAVE.
Double click on the file in the list to LOAD.

Tip: Save the circuit with the test instruments
wired in place and the settings of the instruments
will be saved too.
~lsp||
 Loading and saving parts
 Special parts files are useful to collect special
{macro:f5} circuit components or to control
{values:f6} of parts for teaching assignments.

 When you save a circuit, you will be prompted to
save the parts bin. If you save the bin, it will
automatically load with the circuit.

BE CAREFUL NOT TO SAVE A PARTS BIN OVER A DIFFERENT
ONE WITH THE SAME NAME. THE NAME OF THE BIN IS
DISPLAYED ON THE DIALOG BOX. YOU WILL BE WARNED IF
THE FILE EXISTS. IF YOU DO NOT SAVE THE PARTS BIN,
THE CIRCUIT WILL STILL LOAD, BUT SOME PARTS MAY NOT
WORK.

 When you choose to load or save a parts bin
from the file selector box, a list of existing
bins in the current directory appears.

     ■ To save a new parts bin, type a
     name (up to eight characters) into the
     lower empty box and click on SAVE.

     ■ To load a parts bin, select a name
     from the scrolling list or type the name
     in the lower box and click on Load.

ENTER after typing is a shortcut to SAVE.
Double click on the file in the list to LOAD.
~grid||
 Grid
 Using the {Preferences:f10} menu, you
can control a gridsnap feature that causes
components to align themselves automatically.
The grid is active by default.

 You can turn the display of the grid on
or off when it is active.

 Only at the smallest grid size will all
terminals on all objects align to grid points.
~sgr||
 Show grid
 When the {grid} is turned on, you can display it
if you want by clicking on the button on the
{Preferences:f10} menu.
~slb||
 Show labels
 From the {Preferences:f10} menu,
set this on to display {labels:f6}
assigned to parts.
~svl||
 Show values
 From the {Preferences:f10} menu
set this on to display {values:f6}
assigned to parts.
~clr||
 Clear
 From the {menu}, select this to clear the
{workspace:wksp}, the circuit name, and the
readings on instruments. A dialog box asking
confirmation of the action will appear.
~prt||
 Print
 Select Print from the {menu} to get the circuit
printed on a dot-matrix printer. A menu of options
will appear to

   ■   print the circuit
   ■   the faces of the {test instruments:inst},
   ■   and a parts list.

 You can {make a label:f6} for the circuit using
Label from the menu or pressing F6 when nothing
else is selected. It is a free-form {text:keys}
{field:keys} of six lines by twenty-five
characters.

 Click on "Change Printer Configuration" to
open the "Printer Configuration" box.

 Use the "Printer" {spin selector:sps} to choose
your printer from a list. If your printer does
not appear, consult the User Manual.

 The "Printer Port" spin selector allows you to
choose the destination of the output, including
a disk file.

 You can spin select the "Paper Length."

 The displayed pathname is a selector that
controls the location of the output file. Point to
a part of the pathname and press and hold the first
mouse button to pull down a menu of directories.

 Type a filename into the "Output file name"
text field.
~quit||
 Quit
 Selecting Quit from the {menu} exits
the program and returns to the
operating system. A confirmation box
appears.
~connector||
 Connector
 Use a connector to {join two wires:wct}. Otherwise,
wires cross without electrical connection.

 It is good practice to place connectors into a
circuit at various test points before
{simulation:sim} so you can make readings at
various places in the circuit.
~ground||
 Ground
 Ground is the reference point for relating
electric {voltage:v} levels wherever electricity is
used. The ground symbol from the {parts bin:bin}
provides this reference.

 In digital {simulation:sim}, ground is used for a 0
level.

 Analog circuits require a common ground to work
properly and give consistent results. Be especially
careful to have both sides of a transformer grounded.

 It is important to ground analog instruments to
obtain accurate results.

 The analog simulation will give an error message
if the circuit and instruments are not properly
grounded.

 {More information about ground:mrgn} is available.
~mrgn||
 Ground -- general information
 A voltage measurement is always referenced to some
point, since a voltage is actually a "potential
difference" between two points in a circuit.

 The concept of "ground" is a way of defining a
point common to all voltages, one which we agree
represents the common reference for all the
circuits. It represents "0 Volts"; all voltage
levels around the circuit are positive or negative
when compared to that reference point. In power
systems, the planet Earth itself is used for this
reference point (most home power circuits are
ultimately "grounded" to the Earth's surface for
lightning protection). This is how the expression
"earthing" or "grounding" a circuit originated.

 Most modern power supplies have "floating" +/-
outputs, and either output point can be defined as
ground. These types of supplies can be used as
positive (with respect to ground) or negative
power supplies. In floating power supply circuits,
the positive output is often used as the voltage
reference for all parts of the circuit.
~tpx||
 Topics available
{and gate}
{clear:clr}
{common operations:ops}
{connector}
{copy -- f3:f3}
{cut -- f2:f2}
{d flip-flop}
{digital circuit simulation:sim}
{digital components:com}
{digital error conditions:err}
{digital instruments:ilst}
{dragging:drg}
{file -- f9:f9}
{flip-flop:ff}
{gate}
{go}
{grid}
{ground}
{half adder}
{help -- f1:f1}
{jk flip-flop}
{label -- f6:f6}
{logic analyzer}
{macro -- f5:f5}
{menu}
{mouse}
{move -- f4:f4}
{multimeter}
{nand gate}
{nor gate}
{not gate}
{or gate}
{parts bin:bin}
{pointing:pnt}
{preferences -- f10:f10}
{print:prt}
{probe}
{program controls:ctrl}
{quit}
{rs flip-flop}
{rotate -- f8:f8}
{scrolling/scroll boxes:scrl}
{selecting:sel}
{seven segment}
{show grid:sgr}
{show labels:slb}
{show values:svl}
{simulation:go}
{special keys:keys}
{spin selector:sps}
{summary of digital simulation:sds}
{test instruments:inst}
{text fields:keys}
{tips}
{truth table}
{TTL voltage source:vs}
{wiring:wir}
{word generator}
{workspace:wksp}
{xor gate}
{zoom -- f7:f7}
~f10||
 Preferences -- F10
{grid}
{show grid:sgr}
{show labels:slb}
~sim||
 Simulating digital circuits
 {summary of simulation:sds}   {error conditions:err}.

 The {GO} icon starts the circuit operating. It
activates any signal source in the digital
circuit, whether it is a {TTL voltage source:vs}
or the {word generator}, and the circuit changes
to its next stable state. You must click on GO to
make a TTL voltage have effect.

 The word generator may be operated from its
{zoomed:f7} open face, however. Select STEP, BURST
or CYCLE to send the contents of the word
generator to the circuit. GO also activates the
selected operation on the word generator.
~err||
 Digital error conditions
 Two error conditions can occur in a
digital circuit that halt {simulation:sim}:

 1. When the order that the input comes to a
circuit affects the state of the output, the
circuit is said to be in a "race condition."
This condition arises in {RS flip-flops:rsff} and
simplified {JK flip-flops:jkff}, and could appear
in any improperly constructed circuit. A dialog
box signalling the condition appears and asks
the user to cancel or continue the simulation.

 2. Any other error will appear as a logical
contradiction in the circuit. A dialog box signals
this condition.
~sds||
 Summary of digital simulation
 Digital simulation can be activated by the
{test instruments:ilst} themselves in many cases.

 Using the {word generator} as input you can press
STEP, BURST or CYCLE to cause the simulation to go.

 If you use a {TTL voltage source:vs} in the circuit,
you must press {GO} to activate the simulation.
~com||
 Digital components
{and gate}
{or gate}
{xor gate}
{not gate}
{nand gate}
{nor gate}
{probe}
{connector}
{ground}
{TTL voltage source:vs}
{flip-flop:ff}
{rs flip-flop}
{d flip-flop}
{jk flip-flop}
{half adder}
{seven-segment display:seven segment}
~gate||
 Logic gates
 The gate is the basic digital electronic control
element. The simplest form of gate is a switch --
it passes signal when closed, and blocks signal
flow when open. Gates are available to perform the
following logic functions:

      {AND}/ {OR}/ {NOR}/ {NOT}/ {NAND}/ {XOR} gate

 All electronic gates simply duplicate the switch's
function. However, electronic gates have high input
impedance and low output impedance. They can drive
a number of other gate inputs (high fanout) and
can be switched at electronic speeds (fast response
time). They can be used for logical decision-making.

 For many years, gates were built with bipolar
transistors (TTL logic). More recent developments
use field-effect components (CMOS logic) for low
power dissipation. Integrated circuits can contain
many gates.
~and gate|and||
 AND Gate
 If both inputs are positive
the output is positive.

{theory:th1}
~th1||
 AND
 A gate with two inputs (A & B) that makes a
logical decision:  If inputs A AND B are high,
output C will be high. Otherwise, output C will
be low. The AND gate functions like the series
circuit shown here, with battery, lamp, and
switches. The lamp will be lit only if switches
A AND B are closed.


      ┌───────────────/ ─────/ ───────────┐
    ──┴──             A      B            │
     ─┬─   battery                      lamp
      └───────────────────────────────────┘
            SERIES CIRCUIT SIMULATION
                  "AND" FUNCTION



                        A  │ B  │ C
                      ─────┼────┼───
          AND GATE      0  │ 0  │ 0
         TRUTH TABLE    0  │ 1  │ 0
                        1  │ 0  │ 0
                        1  │ 1  │ 1

 The AND gate will show a 1 logic level at the
output C only when both A AND B input levels are
also at a 1 level.  Otherwise, the output level
is a a 0 logic level.
~or gate|or||
 OR Gate
 If either input is positive
the output is positive.

{theory:th2}
~th2||
 OR
 If either of the inputs A OR B are high, or if
both of them are high, then the output C will
also be high. In other words, the output C will
be high unless both inputs A & B are low. The OR
gate functions like the series/parallel circuit
shown below: If switch A OR B is closed, the lamp
will be lit.


                 ┌───────/ ──────┐
      ┌──────────┤       A       ├────────┐
      │          └───────/ ──────┘        │
     ─┴─ battery         B              lamp
    ──┬──                                 │
      └───────────────────────────────────┘
       SERIES/PARALLEL CIRCUIT SIMULATION
                 "OR" FUNCTION

                        A  │  B  │  C
                      ─────┼─────┼─────
           OR GATE      0  │  0  │  0
         TRUTH TABLE    0  │  1  │  1
                        1  │  0  │  1
                        1  │  1  │  1

 The truth table shows the options of the inputs,
and the output level. The output will be a 1 if
either of the inputs A OR B are at a 1 level.
~xor gate|xor||
 XOR gate
 If an odd number of inputs is
 positive the output is positive.

{theory:th3}
~th3||
 XOR
 If either of the inputs A XOR B are high, but
not if both are high, then the output C will
also be high. In other words, the output C will
be high only if only one of the inputs is high.
The XOR gate functions like the series/parallel
circuit shown below: If switch A XOR B is to
the right, the lamp will be lit.


                ┌───────────────────┐
                  / ────────────   /
      ┌──────────/                /───────┐
     ─┴─ battery   A            B        lamp
    ──┬──                                 │
      └───────────────────────────────────┘
       SERIES/PARALLEL CIRCUIT SIMULATION
                 "XOR" FUNCTION

                        A  │  B  │  C
                      ─────┼─────┼─────
          XOR GATE      0  │  0  │  0
         TRUTH TABLE    0  │  1  │  1
                        1  │  0  │  1
                        1  │  1  │  0

 The truth table shows the options of the inputs
and the output level. The output will be a 1 if
only one of the inputs A XOR B is at a 1 level.
~not gate|not||
 NOT gate
 If the input is positive the
output is negative.

 If the input is negative the
output is positive.

{theory:th4}
~th4||
 NOT
 The NOT gate provides the inverse of the level
applied to its input.

                        A  │  C
          NOT GATE    ─────┼─────
         TRUTH TABLE    0  │  1
                        1  │  0

 Besides the obvious use this stage has for
logic inversion, it is often used to construct
more complex logic gates. For example, the {AND}
gate followed by a NOT gate becomes the {NAND}
gate. The {OR} followed by a NOT gate becomes a
{NOR} gate, and so forth.

 Two NOT gates connected in series (one driving
the other) become a non-inverting buffer stage,
with high input impedance and low output impedance.
In designing practical circuits, this can be useful
for increasing the fanout (gate driving range) of a
logic circuit, where circuit loading may be
encountered.
~nand gate|nand||
 NAND gate
 If one or more input is negative
the output is positive.

{theory:th5}
~th5||
 NAND
 The NAND gate can be thought of as an {AND} gate,
followed by a stage of inversion (a {NOT} gate is
such an inverter). The NAND gate can also be
created by inverting the two inputs of the OR gate.
Either method (both used) results in the same
truth table.

                        A  │  B  │  C
                      ─────┼─────┼─────
          NAND GATE     0  │  0  │  1
         TRUTH TABLE    0  │  1  │  1
                        1  │  0  │  1
                        1  │  1  │  0

 If NAND gate inputs are inverted, the truth
table for the resulting logical function becomes
that of the {OR} gate. The {NOR} gate with inverted
inputs becomes an AND function. Logic circuits can
be built with fewer chips using these techniques.
~nor gate|nor||
 NOR gate
 If all inputs are negative the
output is positive.

{theory:th6}
~th6||
 NOR
 The NOR gate can be considered to be an {OR}
gate, followed by a stage of inversion (the {NOT}
gate is such an inversion stage). The NOR gate
can also be created by inverting the inputs to
the AND gate. Either method (both used) results
in the same truth table.

                         A │  B  │ C
                      ─────┼─────┼────
          NOR GATE       0 │  0  │ 1
         TRUTH TABLE     0 │  1  │ 0
                         1 │  0  │ 0
                         1 │  1  │ 0

 If inputs to the NOR gate are inverted, the
TRUTH TABLE becomes that of the {AND} gate. A
{NAND} gate with inverted inputs becomes an {OR}
gate. Logic circuits can be built with fewer
chips using these techniques.
~probe||
 Probe
 A component for use as a probe, corresponding to
a {light-emitting diode:led}, is in the digital
parts bin. It lights up when a "1" or high value
reaches the input terminal. Attach this to any
point in a digital circuit to monitor high and low
levels. You can use this to show the action of
counters and similar circuits.
~led||
 Light-Emitting Diode
 A light-emitting diode emits visible light when
conducting current in the "forward" direction.

 An LED is available in the digital {parts bin:bin}
for use as a {probe}. For this operation it
requires no external load resistor or ground
connection, though practical circuits must
supply them.

 {More information:ledinf} about LEDs is available.
~ledinf||
 LED general information
 LEDs are constructed of Gallium Arsenide or
Gallium Arsenide Phosphide. While efficiency can
be obtained when conducting as little as 2
milliAmperes of current, the usual design goal
is in the vicinity of 10 mA. During conduction,
there is a {voltage:v} drop across the diode of
about 2 volts.

 Most early information display devices required
power supplies in excess of 100 volts. The LED
ushered in an era of information display components
with sizes and operating voltages compatible with
solid state electronics. Until the low-power
Liquid-Crystal Display was developed, LED displays
were common, despite high current demands, in
battery-powered instruments, calculators, and
watches. They are still commonly used as on-board
annunciators, displays, and solid state indicator
lamps.
~dc voltage|vs||
 TTL voltage source
 This component supplies TTL positive voltage
(+5V), corresponding to a binary "1" or logical
TRUE.  Use it wherever you wish to hold a logic
state high.
~ff||
 Flip-flops
 Flip-flops are electronic memory circuits, being
able to "store" a 1 or 0 level until they are
reset.

 The {basic flip-flop:rsff} circuit, called an RS
flip-flop, is a modification of an older circuit
called a "bistable multivibrator." {NAND} and
{NOR} gates can also be used to make flip-flops.

 The digital parts bin contains
{RS Flip-flops:rsff}, {D Flip-flops:dff}
and {JK Flip-flops:jkff}.
~rs flip-flop|rsff||
 RS Flip-flop
 The RS flip-flop in the parts bin is an
unclocked, level-triggered device.

{theory:th7}
~th7||
 RS Flip-flop
 The RS flip-flop has an undesired operating
condition, where 1 levels at both inputs will
cause both outputs to go to a 0 level. This
undefined condition must be avoided. Circuits
involving feedback will lead to a "race condition"
where the output will be unpredictable.

   ┌────────┐         S   R  │  Q
R ─┤        ├─Q      ────────┼────────────
   │   FF   │         0   0  │  no change
   │        │         1   0  │  1
S ─┤        ├─Q'      0   1  │  0
   └────────┘         1   1  │  undefined

 RS flip-flops are not suited for sequential
circuits without additional circuitry. Alone they
are used for debouncing switches and holding
states, such as in alarm systems.
~d flip-flop|dff||
 D (Data) Flip-flop
 The D flip-flop in the parts bin is a clocked,
positive edge-triggered device.

{theory:th8}
~th8||
 D Flip-flop
 The D flip-flop serves to hold the value given as
its input until the input changes. It thus stores
data. Since it is activated by the clock pulse, it
samples the input date only when the positive
(rising) edge of the clock pulse occurs.

    ┌──────────┐         D   │   Q
  D─┤          ├─Q     ──────┼───────
    │    FF    │         0   │   0
clk─┤          ├─Q'      1   │   1
    └──────────┘

 There is another version of the Data flip-flop,
known as the D latch. The primary difference
between the two is the "edge triggering" feature
of the Data flip-flop, absent in the D Latch.
~jk flip-flop|jkff||
 JK Flip-flop
 The JK flip-flop in the parts bin is a clocked,
negative edge-triggered device with direct clear
and set lines. It does not suffer from the "race
condition" of the {RS flip-flop}, nor the
condition of undefined outputs.

{theory:th9}
~th9||
 JK Flip-flop
 Using a clock pulse to control the change of
state of the flip-flop synchronizes its operation
with the rest of the circuit. This avoids the
"race condition" that can occur with the RS
flip-flop. The device is triggered by the negative
(falling) edge of the clock pulse.

        set              J    K   │   Q
    ┌────┴────┐         ──────────┼─────────────
  J─┤         ├─Q        0    0   │   no change
    │         │          0    1   │   0
clk─┤    FF   │          1    0   │   1
    │         │          1    1   │   changes to
  K─┤         ├─Q'                    opposite
    └────┬────┘
       clear

~half adder||
 Half adder
 The half adder is an              a    b
arrangement of gates and        ┌──┴────┴──┐
inverters that will perform     │          │
binary addition.                │  HALF    ├─carry
 Note that two numbers can      │  ADDER   │
be added, but there is no       └────┬─────┘
provision for including an          sum
external "carry". It is the
modification of this circuit into the full adder
that allows an external "carry" to be included in
the computation.

 To perform binary number addition, the following
four rules must be followed:
   0 + 0 = 0        These four rules apply to any
   1 + 0 = 1        two positive binary numbers.
   0 + 1 = 1
   1 + 1 = 0 and carry 1
~seven segment||
 Seven-segment display
 The seven-segment display carries seven terminals
across the bottom, corresponding to the segments
"a" to "g" in the display.

          a             When the value at a
        ─────          terminal is high (1), the
    f  │  g  │  b      corresponding segment
         ───           lights up.
    e  │     │  c
        ─────
          d

~ilst||
 Digital instruments
{multimeter}          {info:inst}
{word generator}
{logic analyzer}
{truth table/converter:truth table}
~multimeter||
 Multimeter
 The multimeter acts only as a voltmeter
in {digital simulation:sim}.

 Use it to determine the level of the
circuit at any point where a connector
or terminal is located.

 High levels read +5 volts and low levels
read 0 volts.
~word generator||
 Word generator
 Use the word generator to send patterns of bits
into the circuit to make it operate.

 Enter binary words into the fields displaying the
words.

 It is often useful to use only the clock signal
from the word generator.

{general info:inst}     {adjusting the controls:ajw}
~ajw||
 Word generator controls
 The left half of the face of the word generator
contains digital words.

 To {enter values:keys} into the word fields, point
to the desired position, click the mouse button,
and type in a one or a zero. Once the text field
is selected, the editing {keys} work.

       {capacity:wg1}
       {activating:wg2}
       {word patterns:wg6}
       {clock pulse:wg7}
       {trigger:wg8}

 {text fields:keys}
~wg1||
 Capacity -- word generator
 The word generator holds sixteen eight-bit words.
Each vertical column of the display holds one
word; there are sixteen columns. The horizontal
rows are numbered with the bit position.
~wg2||
 Activating the word generator
 Send the words in the storage field into the
circuit by clicking the {STEP:wg3}, {BURST:wg4} or
{CYCLE:wg5} buttons. A vertical bar highlights the
current word in the display.

 When you activate the word generator, the bits in
each column are sent in parallel out the numbered
terminals at the bottom. Each bit appears in the
output terminal circle as it is transmitted.
~wg3||
 STEP -- word generator
 STEP transmits one word at a time and moves the
bar one position to the right.
~wg4||
 BURST -- word generator
 BURST sends all sixteen words in sequence,
starting at the current position in the display.
~wg5||
 CYCLE -- word generator
 CYCLE continues to repeat the stored patterns
until the {first mouse button:m} is pressed again.
~wg6||
 Patterns -- word generator
 You can CLEAR, SAVE or LOAD word patterns
by clicking on the buttons across the upper
right. Selecting SAVE or LOAD causes a
{file selector box:f9} to appear.
~wg7||
 Clock -- word generator
 The word generator produces a clock pulse that
is available at the clock (Clk) terminal, one
complete positive and negative cycle for each
advance in the display.
~wg8||
 Trigger -- word generator
 The TRIGGER terminal is an input to drive the
word generator. Each time a high level is
received, a word will be transmitted.
~logic analyzer||
 Logic analyzer
 The logic analyzer displays a signal as a
square wave against time, as binary and as
the hexadecimal equivalent.

{general info:inst}     {adjusting the controls:ajl}
~ajl||
 Logic analyzer controls
 The left half of the face of the logic analyzer
displays the state (high or low) of the signals
received on each input channel.

 The numbered terminals across the bottom of the
instrument correspond to the horizontal rows of
the display and show the present binary value of
each bit.

 The hexadecimal display to the right translates
the binary value, correcting the order of the
bits.

 CLEAR resets the display of the logic analyzer.

{trigger:la1}
~la1||
 Trigger -- logic analyzer
 You can use the trigger to start the display on
the positive or negative edge of a signal. This
may be an external signal, a burst of any data
(the default), or a particular pattern of data.
Enter the pattern by {selecting:sel} the box below
PATTERN (which begins as a word of x's) and
entering ones and zeros. An "x" means that
you don't care about the value in that location.
~truth table||
 Truth table
 Use the truth table to convert among
     ■ truth table
     ■ Boolean expression
     ■ circuit

     {using the truth table device:ttu}
{general info:inst}     {adjusting the controls:ajt}
~ajt||
 Truth table controls

          {input fields:tt1}
          {conversions:tt2}
          {circuit connections:tt3}

  {text entry:keys}
~tt1||
 Truth table input
 You can make input to the truth table/symbolic
converter in two areas.

 Construct a truth table by clicking on the input
channels (a - h) across the top to turn them on.
The display area below the terminals fills up with
the necessary combinations of ones and zeros to
fulfill the input conditions.

 Now you can edit the values in the output column
to the right to specify the desired result from
the input conditions. An "x" in the output column
indicates that either value is acceptable.

 You can enter a Boolean expression into the text
box at the bottom. You can scroll the line with the
icon to its right for long expressions.
~tt2||
 Truth table conversions
{[circuit -> truth table]:tc1}
{[truth table -> Boolean expression]:tc2}
{[truth table -> simplified Boolean]:tc3}
{[Boolean expression -> truth table]:tc4}
{[Boolean expression -> circuit]:tc5}
{[Boolean expression -> NAND gates]:tc6}
~tc1||
 [circuit to truth table]
 Attach the terminals of the truth table icon
to inputs on the circuit. The terminals are
labeled "a"-"h" on the instrument face. Connect
the output of the circuit being tested to the
last terminal on the right of the icon.

 To display the truth table for the circuit, click
on [circuit -> truth table] on the zoomed-open
face of the truth table.
~tc2||
 [truth table to Boolean expression]
 Produce the Boolean expression for the truth
table by clicking the button. The expression
appears in the {text field:keys} at the bottom of
the instrument face.
~tc3||
 [truth table to simplified Boolean expression]
 Produce a Boolean expression reduced to its
minimal form.

 Electronics Workbench uses the Quine-McCluskey
method for simplification. This technique insures
simplification for systems with more inputs than
can be handled manually with Karnaugh mapping.

 It is possible for this operation to
exhaust available memory.
~tc4||
 [Boolean expression to truth table]
 Produce a truth table from the Boolean expression
in the text field at the bottom of the instrument
face.

 To reduce a Boolean expression, first convert
it to a truth table and then {simplify:tc3}.
~tc5||
 [Boolean expression to circuit]
 Produce a circuit from the Boolean expression.

 After clicking this button, a rectangular frame
that shows the size of the circuit appears on the
workspace. You can move this frame before you
click the first mouse button to draw the circuit.

 The parts of the new circuit are selected, so
you can do menu operations on it if you wish.
Otherwise, deselect it by clicking the last mouse
button.
~tc6||
 [produce a circuit using only NAND gates]
 Produce a circuit fulfilling the conditions of
the Boolean expression using only NAND gates.
~tt3||
 Truth table connections
 You can use the truth table to display the
logic states of a circuit that is on the
workspace.

 Connect the terminals (a-h) of the icon to the
inputs of a circuit and the output of the circuit
to the right-most terminal of the truth table.

 On the {zoomed-open face:f7} of the truth table
click on [circuit -> truth table]. This produces a
truth table that you can edit or convert to other
forms if you wish.
~ttu||
 Using the truth table
 The {truth table} in Electronics Workbench is a
powerful device that lets you convert logic
circuits among different forms:
   circuit diagram
   truth table
   Boolean expression

 In one or two steps you can get any of these forms
from another. You can produce the Boolean
expression in simplified form. You can produce the
circuit diagram using only NAND gates.

 To discover the truth table that is valid for a
circuit, {connect:tt3} the icon to the circuit and
click on {[circuit -> truth table]:tc1} on the
{zoomed-open face:f7} of the truth table.

 To produce the circuit diagram of a truth table,
first convert it to a Boolean expression and then
click on {[Boolean -> circuit]:tc4}. You can produce
a circuit using only NAND gates if you wish.

 You can convert from a truth table to a Boolean
expression that is simplified to its minimal form.
Electronics Workbench uses the Quine-McCluskey
method. To simplify a Boolean expression that you
may get from another source, you can enter it in
the {text field:keys} at the bottom of the
instrument face, convert it to a truth table, and
then simplify the truth table to get a reduced
Boolean expression.

 If you specify logic states in the form of a truth
table, you can {enter the values:tt1} and produce
a Boolean expression or a circuit diagram. You can
design useful and complex circuits, such as
decoders, this way.
