The ISA card consists of fairly standard logic chips. The address is sensed by a
74LS688 "totem pole" comparator. When the address on the bus matches the pattern
wired to the chip, the card select line (pin 19) is pulled low.
The bit pattern is compared to bits A[11:4] on the address bus.
|  |
The card select line and IOW line together trigger a 74LS154
4-to-16 decoder that senses address bits A[3:0] and pulls one of Chip
Select 0 through 15 low appropriately.
|
 |
|
The data flow is controlled by a 74LS245 transceiver. The eight data bits
are simultaneously sent to all 16 octal flipflips, at most one of which will be
active at any given time.
|
 |
|
Each Chip Select line controls a single 74LS273 octal flipflop
(alias "shift register" as we shall see in a moment). There are 16 of these for a
total of 128 bits.
|
 |
|
Each of the output bits from the flipflops triggers a transistor, which in turn
triggers an optoisolator on the "back end" of the control box. The output from
the optoisolator triggers a triac in the standard way, and the 110-volt current
is switched on or off appropriately. A separate (old PC) power supply is used
on the "back end" to isolate the 110 Volt switching from the motherboard.
|
 |
Extending Beyond 16 Bytes
In order to extend the card to accommodate more than 128 circuits, one of two
methods can be used.
- "Brute force" would somehow extend the on-card addressing
to five bits instead of four, and some kind of 5-to-32 decoder would have to be cobbled
together as I am unaware of any such chip.
- Alternatively, the address circuitry
could be duplicated to sense a different address. Either of these alternatives would
require "fixing" something that already works and has been alive and well for nearly
ten years.
-
The third alternative is to build a shift register. This is what I chose.
|
|
I chose to build it in a "parallel" fashion starting with the last
'273 (number 15) on the present card. This chip
becomes the first in a chain of identical chips all activated by the same
Chip Select 15 line that goes to the CLK ("clock") pin of the
'273. The CLK pin is the common Enable line for all
of the flipflops on each chip. Edge-triggering transfers the input bits to the output bits
at different times (falling and rising edges of the CLK signal that is
active low). The eight output bits of each chip in the chain go to
the appropriate output transistor, and, in addition, to the eight input bits of
the next chip. The software sends as many appropriate bytes to that same address as
there are flipflops in the register. The byte moves from chip to chip with each
CLK signal (hence the name "shift" register).
|
 |
 |
 |
There is one complication. Although the bits in transit only change the transistor
outputs for less than a microsecond, triacs do not respond in like manner. If the
transient signal were to be sent to the incandescent light bulbs for so brief a time,
there would be no perceptible changes; however, triacs, although they can be turned
on at any time, turn off only when the zero-crossing of the AC current
occurs. This means that we could see a spurious flash of some lights up to 10
milliseconds in duration, which might actually become visible as faint blinks
to the annoyance of the audience.
Note: I had to run the display without using the '244s
and stuff flickered like crazy. Didn't bother the audience much but it annoyed the
fire out of me! We just pretended that it was part of the show while I worked out
the "fanout" outlined below. It might be corrected with some fancy assembly language
but I understand the hardware solution a lot better.
It would seem that if the entire display were switched off for mere microseconds
that it would be less distracting by far, to the point of being undetectable since
filaments do not cool off that fast. If a string of lights is 0.000001 second late
in switching on, no one will notice. Therefore, we use another set of
chips in parallel with the flipflops.
|
 |
 |
 |
| |
|
The 74LS244 octal buffer is a good choice. Standing between the output of the
flipflop and the transistors, it switches all the transistors off when bytes are in
transit through the register, and then back to the state of the flipflop when
the shifting stops. 99% of the time there will be no actual change in the state
of the triac, since switching off and on has no effect at all unless the current is at
a zero crossing.
|
 |
|
Admittedly, the placement of inputs and outputs on both the '273 and the
'244 are annoying; I drew very careful diagrams on graph paper showing
the placement and wiring of the pins viewed from the underside of the board. This
probably saved endless hours of grief while wire-wrapping all of the connections.
The '244 is divided into two sets of four buffers; hence there are two
CLK1 connections as shown in the diagram. CLK1 is different from CLK; it will
be explained shortly.
|
Diagram shows only connection to '244. Connection to next '273
in the shift register is not shown here. |
The big trick is to keep the '244s off during the entire shift.
To this end, a divide-by-four (or eight, or sixteen) counter may be used.
74LS107 dual JK flipflops are used. Two flipflops (one chip) yields
a divide-by-four; each additional JK flipflop divides by a successively higher
power of 2. Output from each of the flipflops goes to the CLK of the
next flipflop (inputs both held high at all times), and also to a
multiple-input OR gate that is simply constructed from an appropriate
number of diodes and a pulldown resistor. Output from this gate is CLK1.
The CLK (Chip Select 15) signal and outputs from
all of the JK flipflops are thus combined. Only when all of these signals are
low will the '244 transmit data, since its control lines are
active low. When the control lines are high, the outputs
float. However, since the transistors require a definite high
to fire, this is effectively the same as all outputs going low. Therefore,
pulldown resistors are not required. (Hey, it works! Don't mess with success!)
Parallel Port
I have not built any of what follows, but here are my thoughts on the design:
The parallel port has eight output bits and three control lines. Two of the
control lines are active low and one is active high.
- The eight output bits obviously go to the inputs of the first '273.
- Each succeeding '273 is daisy-chained as described above.
- The CLK signal (active low) is one of the control
lines from the port. It goes to every '273.
- The CLK signal also goes to the first JK flipflop in the
frequency divider.
- The CLK signal is combined with outputs from all JK flipflops
via a multiple-input OR gate that may be constructed as described above.
- The output of the OR gate controls the '244 buffers.
That's it! Eight data bits and one control line, and an unlimited number of
output channels, all done by the magic of a shift register.
One word of warning: too many devices hanging off the single control line will
be too much of a load. About every eighth flipflop, some kind of amplification
must be provided. Two inverter gates in succession (logical NOT-NOT, no change)
on a 7404 will in turn power eight or ten more gates; however, timings are
important and I would recommend using some sort of buffer or line driver chip
for signal amplification. The smaller response time, the better. I will be
trying the 74LS125, using a fanout of 8 (2 to each of 4 '244s).
|