Re: internal thinkpad keyboard/trackpoint interface

Cool thread. I am working on a tiny PCB with an atmega32u4 to interface with the 0WX4JF backlit keyboard and accept a 30 pin flex cable from the front panel header on the back of the Novena motherboard. This should take a couple of months (I am busy with school) but I'll share it once done. However, here is the pinout matrix if anyone's interested:

http://pages.uoregon.edu/dileep/keyboard_pinout.jpg

Pins are numbered from left while looking at the keys from the top. The last 3 pins are for the backlight. They are Vcc, Control, and GND (left to right). The 4 pins for the trackpad probably use PS/2, but I am yet to unscrew the thing and verify.

Re: internal thinkpad keyboard/trackpoint interface

monguin wrote:

That's a really silly thing to do, so I'd love to avoid it if possible. I have to ask - can you give me any details about how you got the connectors? I don't expect you have any left, but if you do, I would gladly buy a few from you.

Hi Monguin,
Sorry for the time it has taken to reply - I have ended with very little time to work on gadgets recently :-(

First, the details for anyone else trying to purchase connectors:  I was able to get a quote from Nexus Electronics (try contact@nexelec.com) for the JAE AA01B-S040VA1-R3000 connectors.

They do have a minimum order quantity of 100 units...  so I probably have some spare :-)

Re: internal thinkpad keyboard/trackpoint interface

Some of you might find this useful. Others can help me improve it, or point out what is wrong with it.

I've come up with a dirty schematic for a front-panel + keyboard-controller circuit board that is interfacing between the bare resistor matrix layout for the 0WX4JF backlit keyboard (see previous post), and the Novena via USB using an ATMEGA32u4.

Here is the schematic file: http://pages.uoregon.edu/dileep/laptop_kbrd.pdf

The ATMEGA32u4 can function as a USB slave device and send keystrokes (and mouse clicks) directly. Right now I am thinking  pull digital HIGH on row pins in sequence using the MCU, and read the column pins using CD4051 multiplexers. My trackpoint doesn't have a controller either. I just get 4 wires, and have to read the analog voltage on two of them. I am thinking of using the ATMEGA32u4 ADCs directly (it takes 0.1 ms per analogRead()).

The rest of the circuit mimics the existing front panel schematic. I've hooked up the FPGA LSPI pins to drive LEDs, instead of having them hang free for SPI usage. And I've hooked up TS_ANA to read ambient light level (for keyboard and LCD backlight dynamism) using ALS_PT19 sensor element.

Comments? Brickbats?

Re: internal thinkpad keyboard/trackpoint interface

dileepvr wrote:

Some of you might find this useful. Others can help me improve it, or point out what is wrong with it.

I've come up with a dirty schematic for a front-panel + keyboard-controller circuit board that is interfacing between the bare resistor matrix layout for the 0WX4JF backlit keyboard (see previous post), and the Novena via USB using an ATMEGA32u4.

Here is the schematic file: http://pages.uoregon.edu/dileep/laptop_kbrd.pdf

The ATMEGA32u4 can function as a USB slave device and send keystrokes (and mouse clicks) directly. Right now I am thinking  pull digital HIGH on row pins in sequence using the MCU, and read the column pins using CD4051 multiplexers. My trackpoint doesn't have a controller either. I just get 4 wires, and have to read the analog voltage on two of them. I am thinking of using the ATMEGA32u4 ADCs directly (it takes 0.1 ms per analogRead()).

The rest of the circuit mimics the existing front panel schematic. I've hooked up the FPGA LSPI pins to drive LEDs, instead of having them hang free for SPI usage. And I've hooked up TS_ANA to read ambient light level (for keyboard and LCD backlight dynamism) using ALS_PT19 sensor element.

Comments? Brickbats?

If you end up with speed issues, you can also do the reads bare-metal on the atmega. The Arduino digitalRead/digitalWrite functions are going to be an order of magnitude or two slower than just reading the input registers directly. And AVRs are pretty easy to work with, even without the Arduino stuff.

No idea if that will be relevant for you or not, but for anything battery-powered, my mind always goes to the "hurry up and sleep" approach. If you need 0.1 ms response time, you can get that by taking 0.1ms to read, or by taking 0.01 ms to read, and sleeping for 0.09 ms.

Either way, it's awesome to see reading the matrix manually! I thought about making my own keyboard/keyboard interface, but decided that machining a case would be work enough (it is), so I've just hacked up a ThinkPad USB keyboard.

30 (edited by jackXTAL 2016-11-24 23:31:51)

Re: internal thinkpad keyboard/trackpoint interface

Hello, I'm thinking about to do the same thing, and as you already mentioned, the hardest part is to acquire the PCB connector. Did anyone of you got some left? If so, I would love to buy some.

My solution will be based on an 8-bit Z80 which will read 8 I/O lines at a time, process the data, and then use some kind of keyboard interface to send keystrokes to the PC. This way, I get rid of the large I/O-pin requirement.

When this is done, maybe someone could do a nice case for it :-D Perhaps Kickstarter could be helpful to get the PCB connectors?

Re: internal thinkpad keyboard/trackpoint interface

I am now a proud owner of 20 ThinkPad keyboard connectors (JAE AA01B-S040VA1-R3000). I manage to buy them from Alibaba.com, and they fit perfectly for my keyboard taken from an old ThinkPad X201 :-)

You can read more at the blog I started for the project, called ThinkType:
http://thinktype.equipment

Re: internal thinkpad keyboard/trackpoint interface

Did anyone get any closer to producing boards for this?
I'd really like to finish a permanent keyboard for my novena.

Re: internal thinkpad keyboard/trackpoint interface

My interface board for the 0WX4JF backlit keyboard works! Just visit https://github.com/dileepvr/novenaX_kicad for the design files. The folder "gerber_kbrdonly" contains the gerber files for this board. The folder "firmware" contains the Arduino code that you'd have to flash the atmega32u4 with (after burning arduino bootloader). It contains lines to read a standard laptop trackpad using the PS\2 protocol. Comment out the PS2 trackpad lines if you aren't doing that.

I am attaching pictures that should answer most anticipated questions. The toughest part was figuring out a way to attach the board to the keyboard as I couldn't find the right receptacle. Z-axis conductive tape, a couple of C-clamps and epoxy did the trick.

http://pages.uoregon.edu/dileep/DSCN6757.jpg
http://pages.uoregon.edu/dileep/DSCN6758.jpg
http://pages.uoregon.edu/dileep/DSCN6759.jpg
http://pages.uoregon.edu/dileep/DSCN6777.jpg
http://pages.uoregon.edu/dileep/DSCN6778.jpg
http://pages.uoregon.edu/dileep/DSCN6780.jpg
http://pages.uoregon.edu/dileep/DSCN6862.jpg
http://pages.uoregon.edu/dileep/DSCN6863.jpg