November
1997, Issue 88
From
the Bench:
Nonintrusive Interfacing - Using Kid Gloves
LOOK,
BUT DON'T TOUCH
"Yeah,
Dad, you can borrow it, but please don't ruin it. I
still play with it." Kristafer, my youngest, reluctantly
passes over his treasure.
I'm
thinking, there must be a way to make use of this thing
without damaging it. It has a great LC display. Where's
my screwdriver?
OK.
On the inside, it has what you'd expect. An LCD driver
chip, a processor, and a few glue chips.
All
the functions are multiplexed. Take the x-y
control knobs, for instance. They're similar to rotary
encoders. For each axis, an LED is aimed at two phototransistors.
The
knob, which looks like one of those cookie-cutter-style
hole saws, is placed over the receivers so the LED's
light is blocked by large teeth on the knob. The receivers
are strategically placed such that when the knob is
turned, the LED's light hits one and then the other
receiver.
Comparing
the phases of the phototransistors' outputs tells which
direction the knob is turning. The trick here is that
the transmitting LED is only active for a particular
time slot. So, the phototransistor's open-collector
output is only actively low during that particular time
slot.
To
simulate the x-y knobs, I used four TTL
outputs--a pair for each knob. By toggling the pairs
of outputs in software, I create the changing phases,
which are interpreted as rotating a knob one way or
the other.
These
signals are ORed (74HC32) with the control signal enabling
the Animator's LEDs (see Figure 1), which creates time-slotted
outputs. These outputs are buffered with open-collector
drivers so they can be connected in parallel to each
of the Animator's four phototransistor outputs.
The
function buttons are much simpler to control since there
is no direction involved. There are two rows of four
buttons. One button--on/move--operates differently,
so really, there are only three buttons in the top row
of this matrix.
Different
time-slot signals, active low, are applied to the rows.
When a button is pushed, these time slots are transferred
to the column pulling them low.
Again,
I used four TTL signals to control these functions.
A dual 2Ð4 open-collector decoder (74LS156) worked nicely.
Two of the TTL signals are used as address inputs, performing
dual 1-of-4 output selection. One set is used for each
row.
The
'156 has two sets of enables for each decoder. One set
is fed by the time-slot signals to keep the outputs
active only at the appropriate times.
The
other set is controlled by my other two TTL signals--the
key press enables. By selecting an address and enabling
a row output, a time-slotted signal is placed in parallel
with a button's column, faking a physical button push.
The
last button I want to discuss is the on/move button.
It has a double function and cannot be controlled with
a simple open-collector driver.
When
the Animator is in sleep mode, a condition it enters
when activity has ceased for 3 min., all execution halts
to save battery power. The processor outputs a high
to one side of the on/move button. The other side goes
into power-on circuitry.
To
mimic the on/move button, I placed a FET across its
contacts, with its gate biasing the FET off. A ninth
TTL signal pulses the FET's gate to imitate the button
being pushed. I could have used FETs on all eight pushbuttons,
but the costs would have been considerably higher.