Author Topic: DataHand sending random keystrokes  (Read 3191 times)

0 Members and 1 Guest are viewing this topic.

Offline tilmann

  • Thread Starter
  • Posts: 14
DataHand sending random keystrokes
« on: Fri, 13 June 2014, 05:53:12 »
I've been happily using my DataHand Professional II for the last six months (bought it off eBay in December last year), but yesterday it started to fail :(

Now it's just sending random key strokes when I plug it in (without pressing any keys), sometimes I can still press a key and the key actually gets sent to the PC but then it usually locks up. I also tried to reset it, in the beginning this worked successfully (didn't help though) but now I can't even get it to reset.

If I disconnect the left unit it still sends keys randomly, even keys which are supposed to be on the left side (z, q, [ and so on). This makes me think that the microcontroller is seriously broken now (rather than a connection issue between the two units).

I made sure all the keys are clean.

Any suggestions on how to diagnose/fix the root cause of this? The DataHand is effectively unusable right now :(

I've ordered a Teensy++ 2.0 to replace the 8051 and use the dhteensy firmware instead, hoping that it's just the microcontroller that's failing.

Offline OldDataHands

  • Posts: 280
  • Location: Michigan
Re: DataHand sending random keystrokes
« Reply #1 on: Sat, 14 June 2014, 22:36:03 »
See this thread: http://geekhack.org/index.php?topic=12212.0
for some nice pictures of how to make the hardware changes needed.

Sounds like you're on the right track to me. You might be able to
do some diagnostics with an oscilloscope if you can access one
at your local makerspace.  Good luck! Keep us posted on how it
works out. I'm sure there are other Datahand users out there who
will be running into the same thing.

My two are still going strong, thankfully, as I'm not done with the
DodoHand yet!

Offline Zekromtor

  • Posts: 241
    • My Setup
Re: DataHand sending random keystrokes
« Reply #2 on: Sun, 15 June 2014, 10:45:56 »
What kind of WPM do you datahanders type at?

Offline burro volando

  • Posts: 11
Re: DataHand sending random keystrokes
« Reply #3 on: Sun, 15 June 2014, 10:55:07 »
It sounds like this could be a stuck key, and sometimes stuck keys can be hard to find. Test each key individually, and then if you find it, use a magnifying lens to try to learn what is causing it to stick. The next issue would be related to the finger board, and if that is the issue, changing the processor will not fix it. You may need to pull the key to see what is happening under it. That is done by pulling it straight up with a pair of needle-nosed pliers. Do not twist or angle the pliers or you could break the plastic armature that the key is mounted on.

Offline OldDataHands

  • Posts: 280
  • Location: Michigan
Re: DataHand sending random keystrokes
« Reply #4 on: Sun, 15 June 2014, 22:09:53 »
Do _not_ simply pull up on a key to try and remove except for the central/press-down switches. If you need to disassemble a N/E/S/W switch, and if that switch pivots to the outside of the assembly, remove the shroud and then gently rotate the switch too far while gently pulling out. If the switch pivots inwards towards another switch, you would have to desolder in order to remove.

If you simply pull, you may get lucky and disconnect the "keycap", or you might damage your keyboard parts.

Offline OldDataHands

  • Posts: 280
  • Location: Michigan
Re: DataHand sending random keystrokes
« Reply #5 on: Mon, 30 June 2014, 23:42:31 »
Just in case this helps to clarify:
69524-0

Offline tilmann

  • Thread Starter
  • Posts: 14
Re: DataHand sending random keystrokes
« Reply #6 on: Sun, 10 August 2014, 08:30:23 »
Thanks everyone for the suggestions! (and sorry for not replying earlier)

I replaced the 8051 with the Teensy but unfortunately the same symptoms remained (random keystrokes being sent).

So the next thing I did is hook up the microcontroller socket pins to the I/O ports of an Arduino Uno and set the different control pins manually.

The way it works is that you select fixed pairs of keys with a multiplexer and then you can read the status of the keys in the particular pair (this is documented in the DHFirm github repository).

This showed that one bit of the pair of the left unit is always stuck at one, no matter which pair I select with the multiplexer. E.g. effectively half of the keys of the left unit are broken (right unit works just fine).

This is consistent across the finger board and the thumb board. However, when I disconnect the finger board the lefthand thumb board works fine again. Why this happens is unclear to me.

Initially I assumed some incoming control signal to the left unit is broken but given that the thumb board works, the failure might be indeed coming from the finger board?

I suppose the next thing to do is to draw some basic schematics of the circuit boards in order to be able to trace the different control signals, maybe that way I could also validate whether it's safe to plug in the finger board of the right unit into the circuit board of the left unit (possibly by creating an adapter which makes sure the pins are mapped properly).

Thoughts?


For the time being I have moved back to my ErgoDox but I really want to go back to the DataHand, it's just so much more comfortable. The fact that my DataHand died from one day to the other without the ability for an easy fix or the opportunity to buy a replacement quickly leaves me with a bad feeling that even if I manage to repair it I will face the same problem in the future.

The only solution I see here is to have an open design like the DodoHand (really awesome project btw!).

Just a couple of days ago I started experimenting with microswitch based finger switches (small 20g microswitches with a very nice tactile feel) in a 3D printed housing to see if that could work and so far I'm quite happy and I ordered more switches to build a whole finger board. My intention is to try to see whether it's possible to build a very simple DataHand clone in a short amount of time (without a PCB, just a bunch of microswitches, a microcontroller and FDM printed parts).

Offline OldDataHands

  • Posts: 280
  • Location: Michigan
Re: DataHand sending random keystrokes
« Reply #7 on: Tue, 12 August 2014, 09:02:04 »
I recall that the demux is used to drive the LEDs... 7 possible groups. If a key is pressed then its phototransistor conducts, bringing the key-sense line to the active state(high/low? idk)

You seem to have one sense line held in the active state on your finger board.
likely in my estimation to be something like conductive goo accumulation, a little conductive thread or the like. less likely: tin wiskers, failed phototransistor, electromigration in the PCB...

A scope might be informative - able to let you ballpark exactly how strongly the line is pinned.

trace out the switches on the affected sense line and do extra cleaning on each before trying to desolder anything.

would love to see your prototype too!
« Last Edit: Tue, 12 August 2014, 13:53:50 by OldDataHands »

Offline tilmann

  • Thread Starter
  • Posts: 14
Re: DataHand sending random keystrokes
« Reply #8 on: Sun, 17 August 2014, 15:14:14 »
I debugged this some more this weekend and as you say the key-sense line is pinned down (at about 0.15V). The line is supposed to be high (4.5V) when the button is not pressed and in a low state (0.25V) when the button is pressed.

I traced the connections on the finger board and figured out the pin assignment of the 14 pin connector (GND, Vcc, 10 lines to select the active key pair and 2 key-sense lines). The 10 emitter selection lines are driven by the demultiplexer (a particular selection line needs to be pulled low to activate the emitters).

The pin assigment is identical for the left and right fingerboard so I plugged the left fingerboard into the right controller. Unfortunately, this doesn't change anything the key-sense line continues to be pinned down. So the fault is definitely on the PCB of the left fingerboard.

The next thing I did is check that the phototransistors work correctly by connecting only the key-sense line and ground to the finger board. Now the key-sense line was at 4.5V and I traced through the whole chain of phototransistors (they are connected in series) and all of them were at 4.5V so it seems they are working fine.

So my guess is that there's something wrong with the connections of the circuit rather than particular components (probably indeed in instance of conductive goo you were mentioning) and I did another round of cleaning of the finger switches. Didn't help but I discovered that there's quite some dirt inside the finger switches (can be seen through the small holes on the side of the finger switches). Not sure what it is exactly but it looks like some sort of corrosion, it is white and sticky and close to the PCB traces going inside the finger switch.

In order to remove the dirt I started desoldering the first switch but couldn't remove all the solder with a manual solder pump and a wick so I rather stopped to avoid damaging any parts and ordered a desoldering station instead.

Once the desoldering station arrives I'll give it another try.

I'm planning to post some pictures of my prototype as soon as I have some more progress :) (switches have arrived now)

Offline OldDataHands

  • Posts: 280
  • Location: Michigan
Re: DataHand sending random keystrokes
« Reply #9 on: Sun, 17 August 2014, 22:49:19 »
Your description of the pin assignments makes me suspect that
you misunderstand the circuit, and therefore might be drawing
false conclusions.  Here are what I expect the 15 connections to
the left hand to be (note that these are _not_ pin numbers and that
these are not the correct Teensy2.0++ pins either and that I am
basing this on my recollection that a 74HC238 demux is used to
scan the switch matrix):

 1 5v
 2 gnd
 3 status LED1 (Caps Lock)
 4 status LED2 (Num Lock)
 5 status LED3 (mouse mode)
 6 status LED4 (scroll lock)
 7 connection to A0 of 74238
 8 connection to A1 of 74238
 9 connection to A2 of 74238
10 connection to E3 of 74238
11 key sense line 1
12 key sense line 2
13 key sense line 3
14 key sense line 4
15 key sense line 5

The switch matrix has 26 switches for the left hand.
and so is likely to be some part of a 6x5 or a 7x5 matrix.
The demux works by taking 3 address inputs (A0-A2),
then the output enable line E3 is used to turn on the
selected output. This will drive up to 5 IRLEDs which will
set your sense line depending upon key state through the
matching phototransistor.

Here is a schematic of what I _expect_ to find for the left
hand switch matrix, for one sense line. Please note that
I have not traced out my datahand, but this just has to
be how it is done, or something _very_ close. Also note
that this is only 1 sense line - the remaining switches will
be scanned with copies of the D/Q 10-14 pairs, potentially
with switches evaluated with the Y5, Y6, and Y7 outputs,
with each copy of the column getting its own sense line.
This should get you onto the right track if you look at
this circuit, and see how this one sense line is used. Note
that only one output of the 74238 can be on at a time.
74885-0
(edit: Also, this schematic is drawn for high-when-active. You're
describing that it is active-low, so the sense line and the
current limiting resistor could be rearranged a bit. This is
the way I've implemented the circuit so that no phototransistor
from a non-scanned row could influence the result)
« Last Edit: Sun, 17 August 2014, 22:56:16 by OldDataHands »

Offline tilmann

  • Thread Starter
  • Posts: 14
Re: DataHand sending random keystrokes
« Reply #10 on: Sun, 07 December 2014, 06:34:21 »
Thanks for the circuit drawing and sorry for the super slow reply!

I tried to desolder the finger board once the desoldering station arrived but in retrospect that was not good idea ;)

I managed to remove one of the switches but slightly damaged the PCB in the process. It is really difficult to desolder the finger board because the PCB is actually quite thick, so if you don't manage to suck out all the solder at a pin on the first try, chances are high that it flows down and at that point it is almost impossible to remove. The problem is that you can't really reach the solder anymore. I think what might help is to desolder the board in its original orientation and use the help of gravity e.g. suck the solder down rather than up.

So ultimately I ended up with a broken finger board.

I bought a replacement DataHand and I've been using this unit in the last months, still looking for a reliable long-term solution though :)

Offline r.burrowes

  • Posts: 1
Re: DataHand sending random keystrokes
« Reply #11 on: Fri, 02 January 2015, 21:17:49 »
My datahand sometimes goes silly and sends random keystrokes. Sometimes a hard reset (left hand, by the connector) fixes it, and I then have to redo my keyboard mappings.

Sometimes it seems to be dirt related, and a vacuum cleaner applied to the keys has helped.

Also had a bad photo transistor on the left hand function key, and had to replace it. That wasn't easy, but I managed to replace the transistor with one from an old mouse.

Currently, my datahand has remapped a few keys all by itself. Time to replace the CPU, so I traced the circuit.

Circuit attached, if this helps. I haven't traced the mouse/keyboard PS2 side, nor the EEPROM, but this shows the keyboard matrix, and how it is connected to the 8051 CPU.