Very faint movement response in this vintage Gravis MouseStick joystick

Thread Starter

Michaël Juneau

Joined Aug 16, 2019
6
This joystick is from the 1989-1991 era of Macs and is compatible with a wide range of macs including the Mac SE, SE/30, Classic, Powerbook 180, etc. Variants were also made for Atari ST and Amiga around the same time period.



It connects with a DIN9 cable to a programmable unit equipped with an EEPROM that can be flashed with its software - this gives it control over the detected dead null zones of the stick when it's close to its center, whether it's in direct position or in vector movement mode. The unit (called GMPU) finally sends a signal over to the Macintosh through an ADB cable (Apple Desktop Bus, which was the standard for other peripherals such as keyboard and mice).

The problem: The stick seems to be doing absolutely nothing while the buttons work perfectly fine. However, as I found out, the stick movement *does* mess with the signal just a tiny bit, but not enough.

GMPU board:


underside:


Next up, the interior of the joystick is fairly simple. The mechanical assembly deals with the x and y movement of the stick like so (view underneath):


The rotated cylindrical chambers look like so on the other side:


Their purpose is to rotate a thin film of many alternating masks (█ █ █ █ █ █ █ █ █ █) between the rectangular grooves shown in the above image. The components that go into these grooves are key to detecting the joystick movement, as shown on this little board (part of the joystick itself):




its underside:
upload_2019-8-16_12-35-53.png

As you can see, both axes have 2 pairs of DEL+photocell. The circular stripped film goes between the D's and Q's to mess with the detected curren before it's sent in some form to the GMPU shown at the start of this post.

Here's a closeup on those pairs, there are no markings so identifying them is hard for me:


Here's a video that shows the thin film as I rotate it manually and slowly:

Potential things to test:
1) are the DELs dead? If they work in infrared, I can't see it under a cellphone video shooting, but I haven't tried it in pitch darkness yet
2) are the photocells dead? I have no idea if these components are fragile/sensitive/time limited. However, as you'll see below, something does happen when I try to manually trigger them
3) are the potentiometers broken/misaligned - my lack of experience in electronics (I'm a physics teacher and never really delved in the wonderful world of electronics much, except this year)
4) bad solder joints - though I've tested most traces everywhere and I didn't detect anything bad
5) something else that would pop up for you based on the pictures

Here's a video that helps at least understand that the circuit works as intended, but not as much as intended. I pass a corner of a piece of paper between the DEL-photocells pairs and I can get a tiny bit of mouse movement (joystick acts as a mouse by default, even if there are no software driver)


Last note: I checked the voltage under a multimeter at the last step, when the GMPU sends out the ADB signal to the computer. The red wire is stable at 5.02 V while the black one, responsible for ADB signals is at 4.51 V. Wiggling the stick wildly would sometimes bring it up to 4.52 V, not always.
 
Last edited:

MrChips

Joined Oct 2, 2009
30,712
Welcome to AAC!

You will not be able to see IR with the naked eye. Some cameras are sensitive to IR.
The alternating marks are used to send square waves to the IR detector. A two pairs of emitter+detector are used to create quadrature signals , i.e. two signals with a phase shift. This will allow detection of motion in both forward and reverse direction.

It would be easier to debug if you have an oscilloscope.
 

Thread Starter

Michaël Juneau

Joined Aug 16, 2019
6
I probed here with an oscilloscope:
upload_2019-8-17_8-17-58.png

here's the video of the oscilloscope output. Since I'm manually turning the film with the alternating masks, there's no stable periodic period, but it seems like that part is working at least!


this is the final signal output that goes to the mac with the ADB connection. It's more or less stable - sometimes it'll shift left but reestablish itself. Moving the joystick around produces no effect there.

upload_2019-8-17_8-23-59.png
 
Last edited:

MrChips

Joined Oct 2, 2009
30,712
Thanks for posting the photos of the oscilloscope screen. As you can observe, the information presented by the oscilloscope is much more informative than that of a DMM in this situation.

Concentrate on the signal going to the Mac.

1) What is the trace when you do not move the joystick?

2) Look very closely to the trace when you do move the joystick.
The signal might look the same. You have to look closely at the transitions of all the up and down traces. This is where the data is encoded.

3) Do you have another compatible joystick to compare?

4) Have you tried running the joystick control software. There are settings to modify the sensitivity.
See this:
https://www.journaldulapin.com/2018/12/10/joystick-adb-gravis/
 

Thread Starter

Michaël Juneau

Joined Aug 16, 2019
6
1) What is the trace when you do not move the joystick?
Pretty much what I posted above. We're probably constantly getting signals from the Apple Desktop Bus (ADB) - while I don't know how it works exactly on the mac, I'm guessing there's some amount of regular polling/return of data since ADB connected devices are daisy chained, including the keyboard and mouse.

2) Look very closely to the trace when you do move the joystick.
The signal might look the same. You have to look closely at the transitions of all the up and down traces. This is where the data is encoded.
I'll try again with a better setup that frees one hand so I can pause the oscilloscope's screen.

3) Do you have another compatible joystick to compare?
No.


4) Have you tried running the joystick control software. There are settings to modify the sensitivity.
See this:
Yes, I've tried the joystick in various machines: Mac Classic, Mac SE, Powerbook 180. With or without the system folder driver. With various configurations (autocenter, vector movement, direct control movement) "downloadeded" (their terminology) into the GMPU. All exhibit the same behavior with the stick. I'm 99.99% confident it's a hardware problem.
 

Thread Starter

Michaël Juneau

Joined Aug 16, 2019
6
Additional test made, might need more knowledge on crystals:

upload_2019-9-6_13-33-46.png

I'm testing the crystal at the bottom left of this part of the picture posted above. It's 12 MHz and paired up with this D78C10ACW microcontroller. I'm suspecting it's set up in a "Pierce" configuration (I'm not 100% sure, here's what I read https://www.nxp.com/docs/en/application-note/AN3208.pdf) with 2 small capacitors at the bottom left rated 10 pF in parallel (so 5 pF equivalent).

Checking out the signal with the oscilloscope I have is.....interesting. I can see a brief repeating signal only if I put the time scale all the way down to 1 ns = 1 square and even then, I see about 5-10 periods fitting inside a single ns. I was rather expecting 83.3 ns per period with 12 MHz.

Things I've considered:
-the channel marking on my oscilloscope says: 16 pF and the probe I'm using is the standard one that came with it. I don't have a special low capacitance probe on hand (the guide I linked above in this new comment says to test with <1 pF usually). Perhaps I don't have to right tool to diagnose this crystal

-It nevertheless is possible that the crystal has failed, but we have to consider that the button clicks still work perfectly with this joystick, so some form of detection can still make it into the output to the computer.

-the problem I have with my joystick (clicks work well, stick detection is feeble or nonexistant) is SHARED with other people with the same model. So there's a failure prone component that starts to fail after 20-25 years (I'm seeing posts about this exact model around 2008-2010, all reporting the same behavior).

-Perhaps the through-hole capacitors no longer exhibit their rated capacitance (2x 1μF and 1x 10μF) and makes the signal not trigger the ICs that prepare the signal properly.
 

Thread Starter

Michaël Juneau

Joined Aug 16, 2019
6
Going back to the small joystick board responsible for processing the stick movement -

There's a Schmitt inverted trigger right before the joystick input is sent to the GMPU for analysis. It takes the sine input of the mechanical movement picked up by the encoder cylinders and transforms it into a square wave, possibly for the rest of the sequence to count up the maxes (I assume it's the microcontroller's job?) and do something with it (depending on what's been downloaded to the EEPROM).

The exact part (as seen in the pictures above) is:
MM74HC14N there's also MC74HC14N (dunno which I have, both markings are present).

I think I've discovered a new problem - it doesn't explain everything, but it would definitely prevent me from completely repairing this joystick.
Here are some few cables I soldered to help with my probing of the chip:

schmitt outputs.jpg
Here's the input for Y movement (sent from the photocell, reduced in voltage from the potentiometer + resistance network):

schmitt y entry.jpg

Here's the output, seems the Schmitt trigger does its job:
schmitt y output.jpg

Here's the X input:
schmitt x input.jpg

and its ....nonexistant output:

schmitt x output.jpg
 

Thread Starter

Michaël Juneau

Joined Aug 16, 2019
6
I repaired it!

Cause of the problem:
  • The thin film with alternating masks will eventually get scratches because it's in contact with another static one in the cylindrical chambers.
  • This will reduce the overal transparency between the pairs of LED-Photocells and not produce a sine signal that's high enough between min and max.
  • The datasheet of the inverted schmitt trigger recommends an above 2.8 V sine signal and I wasn't getting that for 3 of the 4 channels that are used on the chip.
  • Thankfully, the DELs are in series with one potentiometer each, which I carefully reduced a bit while everything was disconnected. I aimed to get between 3.00 V and 3.20 V for each of the 4 channels in the input, and successfully got my 5.16 V square wave output for all.
Future proofing:
  • Find a way to reduce friction for the rotating films (I have no idea where to start searching for this)
upload_2019-9-17_12-18-3.png
 
Top