Giter VIP home page Giter VIP logo

crkbd-trackpoint's Introduction

crkbd trackpoint

crkbd trackpoint

I added a trackpoint to a corne-cherry (crkbd) keyboard for ergonomic pointing bliss.

The trackpoint is mounted in the middle of the YUHJ keys for easy access from the home row. Luckily, the corne-cherry PCB has a mounting hole at this exact location, which we repurpose for the trackpoint.

Hardware

SK8707 trackpoint module

Can be ordered directly from Sprintek by sending them an email. There is a 5V and 3.3V version. Get the 3.3V version to be compatible with the RP2040. I accidentally ordered the 5V version, so I had to bypass the 5V regulator and hooked up 3.3V from the RP2040 to Vout on the board (see photo below).

sk8707

I desoldered the ribbon cable from the controller board, and wired up only the four wires needed:

  • Pin 1: PS/2 data line (blue)
  • Pin 6: PS/2 clock line (white)
  • Pin 7: GND (black)
  • Pin 8: 3.3V (red, if you got the 3.3V version)
  • Vout: 3.3V (red, if you got the 5V version)

sk8707

SK8707 does not require a reset circuit, but it does need pullups on the PS/2 data and clock lines. We can enable pullups on the RP2040 controller, so no extra resistors are needed.

I was lucky to have a trackpoint stem from a decommissioned Tex Yoda II, but others report success using a labret cheek piercing.

RP2040 controller

At first I tried using an AVR-based controller (Elite C with ATMega32U4). The crkbd occupies the USART pin (D2) for soft serial, so we're stuck with QMKs PS/2 interrupt mode (unless we hack the PCB). Unfortunately, I found that quite frequently PS/2 packets would arrive with parity errors. After some investigation, I was able to track it down to QMK interrupts sometimes being delayed and missing the PS/2 clock altogether.

Instead of hacking the PCB, it's much easier to upgrade the controller. This also leaves ample room for other features. There are several options that are pin-compatible with the Pro Micro. The RP2040-based boards are not only powerful, but come with Programmable IO (PIO) hardware blocks. PIO enables protocols such as PS/2 to be implemented in hardware, offloading the main processor for more important work. A PS/2 PIO driver is now available in QMK (developed by @gamelaster and myself, see PR #17893).

Make the following connections from the SK8707:

  • PS/2 data line: connect to pin 8 on the RP2040
  • PS/2 clock line: connect to pin 9 on the RP2040
  • 3.3V and GND are readily available from the OLED header

crkbd connections

64x128 OLED module (SH1107)

While not directly related to the trackpoint, I upgraded to larger 64x128 OLED modules (SH1107). These are wide enough so that the entire keymap can be displayed (reflecting the current layer), which is extremely handy. I also use them to display the current trackpoint sensitivity. Search AliExpress and you will find plenty of options.

3D-printed case

To mount the trackpoint, I designed a 3D-printed case based on the Travel Crkbd magnetic case by taksi_kavausuki. There is one version of the case without trackpoint (for the left half) and one version with the trackpoint mount (for the right half). The switch plates are remixed from Corne Keyboard HiPro Case by mburrows.

STLs and sources can be found under STLs/ and sources/, respectively.

Some notable features:

  • Trackpoint mount (for the right half)
  • Insets for 8mm anti-slip pads
  • Attachable tenting legs (optional)
  • Attachable wrist rests (optional)

STLs:

  • Case_Trackpoint.stl: Case with trackpoint mount (right half)
  • Case_Normal.stl: Case without trackpoint mount (left half)
  • Switch_Plate_Trackpoint.stl: Switch plate for trackpoint
  • Switch_Plate_Normal.stl: Switch plate without trackpoint
  • Wrist_Rest.stl: Wrist rest (optional)
  • Leg_50mm.stl and Leg_42_5mm.stl: Tenting legs (optional)

Required hardware

  • 9x M2 heated inserts
  • 9x M2x10 screws
  • 2x M2x4 screws
  • 2x M2 nuts
  • 8x M3nS square nuts (tenting legs and wrist rests)
  • 10x M3x10 screws (tenting legs and wrist rests)
  • 2x M3 heated inserts (tenting legs on wrist rests)
  • 8mm anti-slip pads

Printing instructions

Print the parts in your favorite material. I used PLA with 0.15mm layer height, 4 perimeters and 15% infill.

Case_Trackpoint.stl should be printed with supports below the trackpoint mount (add a support enforcer modifier). For Wrist_Rest.stl, add some extra infill around the heated insert (add an infill modifier).

NB: The parts are all oriented for the left half, so to print the right halves simply mirror each part accordingly in the slicer.

License

The 3D-printed files are licensed under CC BY-NC-SA 4.0

Assembly

The instructions below are for the trackpoint version of the case.

Using a soldering iron, insert the M2 heated inserts into the case: case trackpoint top

If you would like to use tenting legs, insert M3ns square nuts in the two slots on the left side inside the case. If you plan on attaching wrist rests, insert M3ns square nuts in the two slots on the bottom side inside the case. Tip: Use a M3 screw to pull the nuts in.

Turn the case over and insert two M2 nuts for mounting the trackpoint: case trackpoint bottom

In the above photo you can see the insets for the anti-slip pads. Attach as many as appropriate (if tenting, you only need pads along the outer edge).

Attach the SK8707 trackpoint module with two M2x4 screws: case trackpoint mounted

Attach the SK8707 PCB with double-sided tape, and route the wires as follows: case trackpoint wiring

Insert the crkbd PCB with the 3D-printed switch plate and attach with four M2x10 screws. Make sure the trackpoint wires are not pinched! Note: the PCB switch plate and bottom plate that come with the corne cherry kit are not used. case trackpoint wiring

The YUHJ keycaps must be modified to make room for the trackpoint stem (see below for jig). Here the stem sports a 3D-printed adapter for the trackpoint cap. case trackpoint stem closeup

With the cap it looks rather neat: case trackpoint cap closeup

The finished product: case trackpoint finished

Repeat the above process for the other half (excluding the trackpoint, of course).

Tenting legs can be customized to any height in OpenSCAD, and attach to the side of the keyboard: crkbd trackpoint tented

Using the trackpoint is most comfortable using a wrist rest. The wrist rest also helps prevent the keyboard from being pushed across the desk while using the trackpoint. For comfort, I attached some 5mm neoprene pads. crkbd trackpoint with wrist rest

Both halves with wrist rests and tenting: both halves with wrist rests and tenting

YUHJ drilling jig

There is also a 3D-printable jig available for help modifying the YUHJ keycaps to accomodate the trackpoint. Place the YUHJ keys between the top and bottom plate, and fasten the plates together with some screws. Then use the hole as a guide to file / Dremel away a small part of each key.

YUHJ drilling jig

STLs:

  • YUHJ_Drilling_Jig_Bottom.stl
  • YUHJ_Drilling_Jig_Top.stl

The jig can be customized for different keycap profiles, see YUHJ_Drilling_Jig.scad.

Firmware

Please see my qmk branch for details on how to configure QMK.

Some notable features:

  • MH_AUTO_MOUSE_BUTTONS from manna-harbour is used to automatically switch to the mouse layer when the trackpoint is used.
  • Pullups are enabled on the PS2 CLK/DATA pins
  • Custom keys for controlling trackpoint sensitivity

Other resources

This project was largely inspired by manna-harbours crkbd hotstwap trackpoint. Other good sources of information:

crkbd-trackpoint's People

Contributors

joh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

keyzog

crkbd-trackpoint's Issues

It works until the keyboard gets disconnected, then it is hit and miss whether it will start working again.

Hi Joh,

Thank you for uploading this guide, I wouldn't have been able to get my trackpoint working without it.

Here is a picture of my Corne with the trackpoint placed in the thumb position:
20231210_191020

I upgraded to RP2040 with the following pinout:
5fef4c54-05d3-44a4-8a08-fe499a17fc4c

Flashing your keymap straight into the keyboard made everything work but when I unplug the keyboard, or the computer sleeps or I reset the board, it becomes unresponsive. This happens on windows 11 and arch linux. From the OS the device is still connected, it just doesn't do anything. As if it crashed but the green light stays on the microcontrollers. If I then reset the board a few times it connects every 5 tries or so and everything works fine including the trackpoint, until I disconnect the keyboard or shutdown the laptop.

Have you ever experienced a similar issue?
The only difference that I can see between our builds is that I am using a different trackpoint and I have made a small reset circuit for it by following this guide https://rfong.github.io/rflog/2021/10/26/r61-trackpoint-pt2/ .

Would appreciate any input for how I could troubleshoot this.

Thanks,
Ben

Where are pins B4 and B5 on the RP2040? For the PS/2 clock and data lines.

The README states the following for the Trackpoint connections:

Make the following connections from the SK8707:

PS/2 data line: connect to B4 on the RP2040
PS/2 clock line: connect to B5 on the RP2040

What pins are these referring to? I can't find any RP2040 boards with that pin naming scheme. Is B4 GPIO 9 (which is PWM4B), and is B5 GPIO 11 (which is PWM5B)?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.