dactyl-keyboard/qmk-guide/README.md

246 lines
9.5 KiB
Markdown
Raw Normal View History

2017-06-08 16:09:15 +02:00
# The EZ Way to QMK
Do you love your Kinesis Advantage, but also love your Ergodox-EZ? Now you can
have the best of both worlds with your very own QMK running Dactyl! Feels like a
Kinesis, works like an Ergodox-EZ.
I found this [Massdrop guide](massdrop-ergodox-build-guide.pdf) that shipped with their original
Ergodox to be very helpful.
## Shopping List
### Things you'll have to find yourself:
* Case
* 70x Cherry MX compatible Switches
* 6x Cherry ML switches (optional)
### Things you can order from Digikey
#### An aside on LEDs
Before you place this order, you'll need to figure out what color you want your
LEDs to be, or if you even want LEDs at all.
I had a terrible time figuring out how to figure out which resistor to use with
each LED. All I can attest to is that
[These Orange LEDs](http://www.maxkeyboard.com/max-keyboard-orange-3mm-flangeless-replacement-led-for-backlit-mechanical-keyboard-10-pcs.html)
work with
[These 220Ω resistors](http://www.digikey.com/scripts/DkSearch/dksus.dll?Detail&itemSeq=229354283&uq=636318134508631803)
or at least have yet to fail in my Dactyl.
I was hoping that I could find these LEDs on Digikey for you, but they don't
have ones with the exact specs and I don't know if that breaks the compatibility
with the resistors I found.
Here's
[the evil mad scientist's guide](http://www.evilmadscientist.com/2012/resistors-for-leds/)
to choosing resistors for LEDs, but every time I did the math, it didn't work
out.
Seriously, find someone who knows more about this if you're making decisions
here. You're probably already more qualified than me, so open a PR and fix this
session.
* 70x [1N4148 Diodes](http://www.digikey.com/scripts/DkSearch/dksus.dll?Detail&itemSeq=229354375&uq=636318149504319926)
* 2x [2.2kΩ Pull up Resistors](https://www.digikey.com/product-detail/en/CFR-25JB-52-2K2/2.2KQBK-ND/666)
* 2x [TRRS Jacks](http://www.digikey.com/scripts/DkSearch/dksus.dll?Detail&itemSeq=229354247&uq=636318148338283334)
* 1 [Teensy 2.0](https://www.digikey.com/product-detail/en/adafruit-industries-llc/199/1528-1993-ND/6827126)
* 1 [MCP23018 I/O Expander](https://www.digikey.com/product-detail/en/microchip-technology/MCP23018-E-SP/MCP23018-E-SP-ND/1999505)
* [28 Pin IC Socket](http://www.digikey.com/scripts/DkSearch/dksus.dll?Detail&itemSeq=229356912&uq=636318143621851738)
If you want everything in this list from [Digikey](https://www.digikey.com), you
can upload [this cart](digikey-shopping-cart.csv).
### Things From Amazon
* 1x [MiniUSB Extender Cable](https://www.amazon.com/gp/product/B00B5HSA3Q)
* Solder/Electrical Tape/Twosided tape
* [30AWG wrapping wire](https://www.amazon.com/gp/product/B00GWFECWO)
* TRRS Cable [this one](https://www.amazon.com/Coiled-3-5mm-Jack-Audio-Cable/dp/B019TRW4HQ)
worked for me, but it's a matter of taste and how much distance you need.
## Wiring up the Matrix
The firmware you choose will determine the wiring of the keyboard. Since the
Ergodox-EZ isn't going anywhere **AND** has first class support in QMK by its
creator, it makes pretty good sense to wire it up the same way.
Here's what the matrix code for the Ergodox-EZ in QMK looks like:
```c
// matrix positions
{ // MCP23018
{ k00, k10, k20, k30, k40, KC_NO }, \
{ k01, k11, k21, k31, k41, k51 }, \
{ k02, k12, k22, k32, k42, k52 }, \
{ k03, k13, k23, k33, k43, k53 }, \
{ k04, k14, k24, k34, k44, k54 }, \
{ k05, k15, k25, k35, KC_NO, k55 }, \
{ k06, k16, KC_NO, k36, KC_NO, k56 }, \
// Teensy
{ k07, k17, KC_NO, k37, KC_NO, k57 }, \
{ k08, k18, k28, k38, KC_NO, k58 }, \
{ k09, k19, k29, k39, k49, k59 }, \
{ k0A, k1A, k2A, k3A, k4A, k5A }, \
{ k0B, k1B, k2B, k3B, k4B, k5B }, \
{ k0C, k1C, k2C, k3C, k4C, k5C }, \
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \
}
```
This is a software mapping of 14 rows, even though the physical layout will wind
up with 14 columns. Physically, it looks like this:
![](dactyl-keymapping.png)
Look at those colors, they'll be consistent throughout this documentation,
including the physical wire we wire it up with.
### Rows
You don't have to decide how to connect the rows to the Teensy or MCP yet. Just
worry about getting the matrix right.
Wiring rows 0-4 is easy. With the 30AWG wire, I had to cut individual wire
segments from switch to switch. The thumb clusters are Row 5 on each side, so
the same approach will work, it just doesn't look like a row.
Row 5 is the thumb cluster, so just wire them together and imagine they're in a
row instead of it being more like a circle.
The rows are just wire. Individual segments connecting two switches. I used a
pair of pointy tweezers to put little hooks on the end of each segment. The idea
is to let the Solder do most of the work. If a day ever comes where you have to
desolder one of these, you'll be glad you didn't aggressively wrap it.
### Columns
The columns need to be wired with diodes. You can probably wire the entire
column with the diode stems, but I chose to add some wire segments so it would
look clearer for this guide.
![](dactyl-left-wiring.jpg)
The diodes need the black bar facing away from the key. The other guides
disagree, but they don't use QMK.
To use wire segments here, I soldered the end of the diode with the black bar to
the wire first, then placed the other stem on the switch, positioned the diode
where I wanted it and then bet the diode stem into a hook around the switch
terminal.
I also made a habit of keeping the trimmed diode stems to use as bridges if
needed later.
**Note:** Column 6 only has one key at this point.
### Ergodox Compatibility Inner Columns
**This is an optional step, and can be done as a mod after you're done** so
there's no pressure to make this decision now.
Ergodoxes have an additional three keys in columns 6 & 7. Do you want them on
your Dactyl?
I own an Ergodox-EZ as well, and want to use the same keymap for both. So I
added the extra switches below the thumb clusters as Cherry ML switches. If you
don't care about a consistent experience between a Dactyl and Ergodox, or even
if you do, it's a matter of personal preference.
Wherever you put them, they're wired into rows 0,1 and 3. Either way, you need
to wire columns 6 and 7 to the top inner most key in the thumb cluster, so
columns 6 & 7 are going to be live.
If you go with MLs, you can put them wherever you want, but be careful measuring
where the holes go, you only get one shot.
**TODO:** CherryML switch hole specs.
## The Matrix Has You
Actually, you have it! Congratulations on having gotten this far.
## Wiring The Right Half
### Wiring the Teensy
We have to start off with the obligatory wiring diagram
![](dactyl-circuit-diagram.png)
Notice the row numbers are different from the other guides to match the QMK
key codes we're using.
I started off by breadboarding this whole project, but I also burnt out the
teensy's bootloader.
[My misadventures wiring a Dactyl](http://joedevivo.com/2017/05/20/building-a-qmk-dactyl.html)
are a fun read if you feel like this is too hard. I've been there.
Here's the pinout mappings for the rows and columns:
| Row | Wire Color | Teensy Pin |
|---------|------------|------------|
| 0 | Yellow | PF0 |
| 1 | Orange | PF1 |
| 2 | Green | PF4 |
| 3 | Brown | PF5 |
| 4 | Blue | PF6 |
| 5 | Purple | PF7 |
| Column | Wire Color | Teensy Pin |
|--------|------------|------------|
| 7 | Red | PB0 |
| 8 | Yellow | PB1 |
| 9 | Orange | PB2 |
| A | Green | PB3 |
| B | Brown | PD2 |
| C | Blue | PD3 |
| D | Purple | PC6 |
Wiring the teensy involves looping the 30AWG wire through the Teensy's pinouts,
I went through twice, and then dabbed a little solder. If you are ok with
possibly wasting a little wire, you can use longer wire to solder up the Teensy
and then breadboard with those wires. There's no room for pins in the case, so
this is the best way to test it out.
Here's my breadboarded version, almost done. (missing the reset wire to the MCP
in this photo)
![](dactyl-breadboard.jpg)
Yours will look similar, but with the Teensy coming from off board with a bunch
of wires. You don't have to breadboard the columns and rows for the teensy, you
can test them by clipping them to the right spot on the matrix you built.
Columns and rows run by the MCP (Greetings, program!) will be accessible via the
breadboard.
Here's what that looks like wired in.
![](dactyl-right-wiring.jpg)
Fortunately, QMK *will* let you just run the right half, so you can check in at
this point and see how that all works,
### The TRRS Jack
In an effort to move some of the bulk away from the Teensy, I put the pull up
resistors as close to the jack as I could.
![](dactyl-pull-up-resistors.jpg)
I wired the two 2.2k resistors to the bottom two terminals on the TRRS jack,
then wired the SCL(PD0) and SDA(PD1) to the resistor leg going into the jack.
Then soldered the outside legs together and ran a wire from Vcc to those outside
legs, and from them to a third terminal on the TRRS jack. Now all you need is to
run GND to the fourth terminal.
![](trrs-diagram.jpg)
## Wiring The Left Half
### Wiring the I/O Expander