orch
Publichtpkbs/orch
Loading…
Imported from GitHub: htpkbs/orch · commit 62dd01b · license BSD-2-Clause
Description
A mostly ortholinear keyboard PCB that fits GMK keycaps.
README
Overview
The orch is a keyboard PCB.
It has:
- A mostly ortholinear layout
- Key sizes that fit most GMK keycap sets
- 1.25u super/meta/command keys
- 19mm switch spacing
- An arrow key cluster
- A function key column
- USB-C
- A rotary encoder
- No stabilizers unless you want one for a 2U spacebar
- Optional 2U spacebar or 2 1U keys
Key Layout
The key layout looks like this. (Thanks to Keyboard Layout Editor for the image.)

This is the corresponding data for pasting into Keyboard Layout Editor:
[{x:0.25,c:"#393b3b",t:"#9065c7",a:6,w:1.5},"Tab",{c:"#727474",t:"#c6c9c7",a:4,f:5},"Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{c:"#393b3b",x:0.25,t:"#c6c9c7",a:4,f:3},"Page\n\n\n\n\n\nUp"],
[{t:"#689b34",a:6,w:1.75},"Control",{c:"#727474",t:"#c6c9c7",a:4,f:5},"A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{c:"#393b3b",t:"#689b34",a:6,f:3,w:1.75},"Function",{x:1,t:"#c6c9c7",a:4},"Page\n\n\n\n\n\nDown"],
[{t:"#ee6d00",a:6,w:1.75},"Shift",{c:"#727474",t:"#c6c9c7",a:4,f:5},"Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{c:"#393b3b",t:"#ee6d00",a:6,f:3,w:1.25},"Shift",{x:2.5,t:"#dd1126"},"Code"],
[{y:-0.75,x:13.25,t:"#c6c9c7",a:4,f:5},"↑"],
[{y:-0.25,x:0.5,t:"#ee6d00",a:6,f:3},"Fn",{t:"#0084c2"},"Ctrl","Alt",{t:"#dd1126",w:1.25},"Code",{t:"#0084c2"},"Code",{c:"#727474",t:"#000000",a:7},"","",{c:"#393b3b",t:"#0084c2",a:6},"Code",{t:"#dd1126",w:1.25},"Code",{t:"#0084c2"},"Alt","Ctrl",{x:3.5,t:"#dd1126"},"Code"],
[{y:-0.75,x:12.25,t:"#c6c9c7",a:4,f:5},"←","↓","→"]
PCB Renders


Case
Case files are in the case directory and include a cutout for the rotary encoder. The "closed" layer requires some dremeling or filing to make room for the USB connector. Thanks to the swillkb Plate & Case Builder. There are two bottom case files included. One of them has smaller holes that are meant for tapping (to secure the screws directly into the back case layer), and the other has "open" holes that an M2 screw will fit through (to secure the case together with nuts).
Schematic
There is a PDF of the schematic here.
AVR Notes
These are just some notes on programming the ATmega32U4. The datasheet is here.
Programming
ISP headers are included in the "No Legs" Tag-Connect format. You need a Tag-Connect cable and retaining clip board to connect to it. For example, if you have an AVRISP mkII programmer, you need the "No Legs" cable and the retaining clip board.
Fuses
Default values are:
E:F3, H:99, L:5E
Extended
| Name | Bit | Value | Status | Reason |
|---|---|---|---|---|
| - | 7 | 1 | Unprogrammed | Unused |
| - | 6 | 1 | Unprogrammed | Unused |
| - | 5 | 1 | Unprogrammed | Unused |
| - | 4 | 1 | Unprogrammed | Unused |
| HWBE | 3 | 0 | Programmed | Pin used to force bootloader after reset |
| BODLEVEL2 | 2 | 0 | Programmed | 4.3V brown-out reset threshold |
| BODLEVEL1 | 1 | 0 | Programmed | 4.3V brown-out reset threshold |
| BODLEVEL0 | 0 | 0 | Programmed | 4.3V brown-out reset threshold |
Hex value is F0.
High
| Name | Bit | Value | Status | Reason |
|---|---|---|---|---|
| OCDEN | 7 | 1 | Unprogrammed | OCD disabled |
| JTAGEN | 6 | 0 | Programmed | JTAG enabled |
| SPIEN | 5 | 0 | Programmed | SPI enabled |
| WDTON | 4 | 1 | Unprogrammed | Watchdog timer in interrupt mode |
| EESAVE | 3 | 1 | Unprogrammed | EEPROM preserved on chip erase |
| BOOTSZ1 | 2 | 0 | Programmed | Default maximum boot size |
| BOOTSZ0 | 1 | 0 | Programmed | Default maximum boot size |
| BOOTRST | 0 | 1 | Unprogrammed | 4.3V brown-out reset threshold |
Hex value is 99.
Low
| Name | Bit | Value | Status | Reason |
|---|---|---|---|---|
| CKDIV8 | 7 | 1 | Unprogrammed | Don't divide clock by 8 |
| CKOUT | 6 | 1 | Unprogrammed | Don't output clock |
| SUT1 | 5 | 0 | Programmed | Crystal oscillator with BOD enabled |
| SUT0 | 4 | 1 | Unprogrammed | Crystal oscillator with BOD enabled |
| CKSEL3 | 3 | 1 | Unprogrammed | Low power 16MHz crystal oscillator |
| CKSEL2 | 2 | 1 | Unprogrammed | Low power 16MHz crystal oscillator |
| CKSEL1 | 1 | 1 | Unprogrammed | Low power 16MHz crystal oscillator |
| CKSEL0 | 0 | 1 | Unprogrammed | Crystal oscillator with BOD enabled |
Hex value is DD.
Setting Fuse Values
avrdude commands to set the fuse values with an AVRISP mkII programmer:
avrdude -p m32u4 -c avrispmkII -U efuse:w:0xF0:m
avrdude -p m32u4 -c avrispmkII -U hfuse:w:0x99:m
avrdude -p m32u4 -c avrispmkII -U lfuse:w:0xDD:m
Note that the extended fuse will always show as C0 with avrdude (despite the datasheet saying that the first four bits are unprogrammed/1111).
You may need to erase the chip before you set the fuse values:
avrdude -p m32u4 -c avrispmkII -e
The first time flashing should be done with a programmer like the AVRISP mkII and you should compile QMK to include the bootloader in the firmware file (using :production). I have a fork of the qmk_firmware repository here that I may or may not try to get merged at some point.) To compile the orch branch with the QMK CLI:
qmk compile -kb orch -km default:production
I've had luck setting a custom bitclock setting (-B) for the initial flash when using the mkII, but this may not matter. For example:
avrdude -p m32u4 -c avrispmkII -U flash:w:orch_default_production.hex:i -B 154.37
You should now be able to flash regular (non-:production) firmware that doesn't include the bootloader over USB using QMK Tookbox.
Sublicenses
- Thank you to coseyfannitutti for the footprints
D_DO-35_SOD27_P5.08mm_Horizontal.kicad_modandUSB_C_GCT_USB4085.kicad_mod. The Creative Commons license for these is included here. - Thanks to ai03-2725 for the
MX*symbols. The MIT license for these is included here.
No comments yet. Be the first to ask about this board.