[comp.sys.next] Power Glove Circuits: the real scoop

lance@motcsd.csd.mot.com (lance.norskog) (04/23/91)

The Power Glove interface recently announced is actually a Nintendo
joystick interface.  The theory behind it is from an article in Byte,
July 1990, pp. 288-289.

This was originally posted on sci.virtual-worlds last November.
It is a dissection of the Glove and contains basic information for
building your own "raw mode" interface to get 4 degrees of freedom
(X, Y, Z, and yaw) and 4 fingers out of the glove concurrently
by cutting out the microprocessor in the "glove box" and feeding
it your own 50khz signal.  

As far as we can find out, the Power Glove inventors have a serial
port box, but another company (VPL Research) with a $5000 glove beat 
them in a patent fight.  The inventors can't sell their box, and VPL
is apparently protecting their market.

This was originally posted by Sean Schur for his friend Dale McBeath
at Cal-Arts, one of the three or four top commercial graphics arts
schools.  Enjoy!

---------------------------------------------------------------

I had been working independantly on the disection of the Nintendo
power glove when a friend and associate showed me what Eric Pepke
had listed here.  It's great to know someone else is working on the
glove, as it looks like VPL isn't going to release their RS232
version anytime soon.  I am using parts at hand, so undoubtedly a
better way exists to get the pulse and timing into something more
CPUseful.

What I did was to chop off the glove's CPU and just use the knuckle
box and receiver.  The wiring and board location names follow.

Unlike Eric, I couldn't get the switching supply on the knuckle board
to get anywhere near 40 volts.  With straight 50Khz going to the
violet wire I get 15 volts. However, using the divider below to get 
from 1 Mhz down to 50 Khz, if the 50 Khz is NOR'ed with pin 12 (QC)
of the divide by 10 counter and then fed to the violet wire, I get a
nice 25 volts. I suspect the switcher is very frequency sensitive, and
somehow this combination and pulse width is nearer to perfect.

The receivers can be used as is.  When a nice pulse is sent from the
transmitter in the form of a burst of 50 Khz (but not longer than 3ms
to keep from double triggering) the receiver will send out a clean
negative going pulse 7.5ms long.  I time from the begining of the 
transmit pulse burst until the leading edge of the receiver pulse by
counting 25 Khz clocks.  The circuit is set up so that the final
latches (only one shown)can catch the results and then be polled if
needed to pass the data on to your computer through a UART or parallel
port.  It is easy to expand so that all 6 receiver bursts (3 for each
transmitter) could be collected.

This test circuit is easy to change and play with....changing the 
counter configuration can give better resolution but more jitter.
To see the output without having to write code, I just used a couple
of Texas Instruments TIL311 hex displays connected directly to the
latch outputs.  I was getting about 1cm resolution as connected.

What I would really like to know is how to very simply and quickly
get nice X-Y-Z coordinates from the planar 3 receiver array without
lots of gooey math.  I have tried remaking the receiver stand so that
they fall on the axes, but must tilt the stand so that the glove 
points into the origin.  Again, some translation and rotation math
would be helpful.  The problem with a stand set up in this way is that
it limits movement even more than the planar version.   Any help would
be appreciated.

We at CAL-ARTs are deeply interested in VR.  We have many artists in
the film, video, dance, music,and theater arts.  In our own Media Lab,
have over 100 students producing art on Amigas, and most of those are
character animators aching to actually move INTO the worlds they are
now creating on paper, film, and video.  Thanks for the forum, and
keep those ideas comming!  

Dale McBeath                       voice (805) 255-1050 ex. 2330
CAL-ARTs                                 (805) 245-3191
Character Animation Dept.          PLINK  msu-387
School of Film and Video
24700 McBean Pkwy, Valencia CA 91355




Knuckle box wiring:
Knuckle pin   CPU pin   Color    Function
  1              3      Pink     Index finger (analog 100K to 500K)
  2              2      Brown    Thumb
  3             12      Lt. Blue Finger common (thrugh a diode)
  4              4      Orange   Middle finger
  5             11      White    Small finger
  6              7      Green    Right transmitter
  7              6      Yellow   Left  transmitter
  8              9      Violet   Switching Supply Pulse (50Khz) in
  9             10      Grey     Switching Supply feedback (2v nom)
 10              1      Black    Ground
 11              5      Red      +5 volts
 12              8      Dk. Blue Bell (small peizo element)


Receiver Box Wiring:

                        (1)     Recv 1 (top left)
        GND      (6) 
                        (2)     GND  
  Reset in       (7)
                        (3)     Recv 2 (corner)
  Clock in       (8) 
                        (4)     Recv 3 (bottom right)
  Data out       (9)
                        (5)     +5



TIMING:  low = ______  high = ---------   lots-o-pulses = |||||||

50Khz    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

TRIG     --------+_____+-----------------------------------+______+--

RESET    __+-----+___________________________________+-----+_________

XMIT     ________|||||||___________________________________||||||||__

GO       ________+-----------------------------------+_______________

COUNT    --------+|||||||||||||||||||||||||||||||||||+_______________

RCV      -------------+_____+-----------------------------------+____

DATA     =============X=========NEXT GOOD DATA==================X====



                                                 | +5v
                                                 >
                                                 <  .39 K
                        (/10)       +------+     >
   +-----------+     +---------+    |  1/2 |QA----O--------O---> 50 Khz
   | 1meg osc. |-----| 74ls160 |--CK| 74ls |               |     (violet)
   +-----------+     +---------+    | 393  |QB------------ | --> 25 Khz
                                    |      |               |
                      +----------CLR|      |QD--------+    |
                      |             +------+          |    |
                     GND     +------------------------+    |
                             |      +------+               |
                             |      |  1/2 |    (/256)     |
                             +----CK| 74ls |               |
                                    | 393  |QD--------+    |
                                    +------+          |    |
 +----------------------------------------------------+    |
 |                               +-------------------------+        
 |                               |
 |                               +----\-----\
 |      +------+       +------+       | ls02 >nor-------------> XMIT
 |      |  1/2 |QA----A|      |Q1--O--/-----/                   (yellow
 +----CK| 74ls |QB----B| 74ls |    |                             or green)
        | 393  |QC----C| 138  |    +----------------> TRIG
        +------+       |      |
                       |      |Q8-------------------> RESET
                  +-en'+---+--+
                  |        EN
                 GND       |
                         (open)


 25 Khz>--------------------------------+----\        
 TRIG>-------+----\                     | ls00>nand--------> COUNT
             | ls00>nand-----O----------+----/
           +-+----/          |
           +---------------+ |
                           | |
           +-----------------+
           +-+----\        |
             | ls00>nand---+
 RESET>------+----/


RCV(1,2,or3)>------------------------------------+
                                                 |
                    +-------+               +----+---+
COUNT>--------------| 74ls  |               | 74ls   |
                    | 393   >----(8 bits)---> 373    >---(8 lines)-->
                    | (/256)|               | (latch)|         DATA OUT
                    |       |               |        |
                    +--clr--+               +--'OE---+
                        |                       |
            |\          |                       |
 RESET>-----| >not------+                      GND
            |/                              (or POLL for data)

jfreeman@next.com (Joe Freeman) (04/23/91)

In article <3710@motcsd.csd.mot.com> lance@motcsd.csd.mot.com (lance.norskog) writes:
>The Power Glove interface recently announced is actually a Nintendo
>joystick interface.  The theory behind it is from an article in Byte,
>July 1990, pp. 288-289.

I really wish you had waited for me to reply to your email before you
posted about something you know nothing about. There was an article
in Byte magazine that talked about how to use a PowerGlove with a pc.
The article used it in the default configuration, joystick, pad...
The stuff that was posted, to the archives, reprograms the glove to
give more information.  It passes back, 8 bits, x, y, z, roll, 2 bits
per finger and all the buttons on the pad.  This is in contrast
to 2 axis, 1 bit for movement, pad emulating joystick and only 2
fingers active in joystick mode.  The code in the demo goes
beyond the Byte article.  You can ask the author if you'd like.

>
>This was originally posted on sci.virtual-worlds last November.
>It is a dissection of the Glove and contains basic information for
>building your own "raw mode" interface to get 4 degrees of freedom
>(X, Y, Z, and yaw) and 4 fingers out of the glove concurrently
>by cutting out the microprocessor in the "glove box" and feeding
>it your own 50khz signal.  
>
Folks, you can do the above mod if you want.  You hack the glove
to bits, building your own hardware and debugging it.  The version
that was posted, on the other hand, lets you build a cable that
allows the unit draw power from the DSP port.  The glove
is still useable on your nintendo machine and the code to use it
on the NeXT is trivial.

<joe>