This is WIP or better my changelog for my DIY keyboard
I was really inspired from the 65% keyboards out there, mainly the DIY versions/hardwired/3D printed ones
I am a little picky…So these would be my specs for my own keyboard:
- USB-C (i don’t care about Wifi/Bluetooth at this stage), fallback micro USB
- ISO layout. This is must so it limits our options
- ATmega32U4 controller for DIY, Teensy 2 is micro USB so its a no go, no USB-C so will fallback to micro USB
- No blocker between right alt and arrow keys
- Multiple layers (functions/menu keys)
- 3D printed case
I was between the following keyboard a TOFU65, SiCK-68, or both…
From the commercial ones i am in favor of:
- GK64 which is iso
- RK61 DE
- KBD67 LITE R4
- QwertyKeys QK65
Started with the http://www.keyboard-layout-editor.com/ and finalized my design to be ISO layout
If i want to use a plate (which mean i am going towards TOFU65) these sites can product a plate layout:
- http://builder.swillkb.com/
- https://plate.keeb.io/
- https://kbplate.ai03.com
kbfirmware.com or https://config.qmk.fm/ can create your firmware based on your layout
PCB options (for TOFU65 version)
- KBD67 Rev 2.0 PCB https://www.aliexpress.com/item/1005002120758788.html
- KBD75 is also nice if i remove the F keys its ok
Stabilizers costar style
6.25 x 1
2 x 1
1.75 x 1 is missing but not really used/needed
Keycaps
Huge issue, we are aiming for 65%, preferred OEM keycaps, right shift is 1.75. Only a batch of 84 keys keycap will fit (excluding the ISO Enter etc) the reason is that the usual keyboard do not contain an 1.75 shift. Second to that since the keys on the right of the space will need os R1 1x keycaps
Cost breakdown (May 2022) for Sick68/Hell-69/ISO70/myversion
BOM
Item | URL | Price USD (May 2022) |
ATmega32U4 | https://www.aliexpress.com/item/32785518952.html | 7.42 (17.81 two items) |
Gateron Red Switches | 110PCs https://www.banggood.com/110Pcs-or-pack-Gateron-Switch-Linear-Mechanical-Red-Switch-Prelubricate-Keyboard-Switch-for-DIY-Mechanical-Gaming-Keyboards-p-1851995.html?cur_warehouse=CN&ID=515632 | 33.43/32.02 |
Bamboon 8mm | https://www.aliexpress.com/item/1005001873970016.html | 2.96/2.83 Euro |
Costar Style stabilizers | https://www.aliexpress.com/item/1005003566973542.html | 4.62/4,42 |
Caps | 35.08/33.61 | |
1N4148 | https://www.aliexpress.com/item/1005003540554760.html | 1.69/1.62 |
3D printed notes
- Mechanical Keyboard – SiCK-68 https://www.thingiverse.com/thing:3478494
- with a bottom left of SiCK-68 arduino pro micro mod https://www.thingiverse.com/thing:4186913
- with a top right of https://www.thingiverse.com/thing:4580999 and a custom left
3D printed cost for filament based on my version
- Lower Left => 18.81m/56g
- Lower Right => 18.12m/54g
- Upper Right => 14.26m/43g
- Upper Left => 15.42m/46g => Total 200 grams of filaments
Tofu 65 notes:
Left => 43.07m/128g 16 hours
Right => 43.56m/130g
QMK Software notes
I used the void16 as a starting/testing point to test the QMK firmware and especially the bootloader stuff using a usbasp as a programmer and this pinout. Pins needed RST/SCLK/MISO/MOSI, power it from the USB-C and be careful
First step was to remove the caterina bootloader:
wget https://raw.githubusercontent.com/qmk/qmk_firmware/master/util/bootloader_atmega32u4_1.0.0.hex
avrdude -c usbasp -p atmega32u4 -v -e -U lfuse:w:0x5E:m -U hfuse:w:0x99:m -U efuse:w:0xC3:m
avrdude -c usbasp -p atmega32u4 -v -e -U flash:w:bootloader_atmega32u4_1.0.0.hex
Then i created a production firmware for void16
make handwired/void16:default:production after chaning the keyboards/handwired/void16/rules.mk to add the BOOTLOADER = qmk-dfu
Burn it using QMK toolbox while the usbasp is connected.
Now if i use the onboard reset on the Arduino Pro Micro it enter DFU mode
avrdude -c usbasp -p atmega32u4 -v -e -U lfuse:w:0x5E:m -U hfuse:w:0x99:m -U efuse:w:0xC3:m
avrdude: Version 7.0
Copyright (c) Brian Dean, http://www.bdmicro.com/
Copyright (c) Joerg Wunsch
System wide configuration file is "/usr/local/etc/avrdude.conf"
User configuration file is "/Users/billy/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : usb
Using Programmer : usbasp
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 9000 9000 0x00 0x00
flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 1 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 1 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 1 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 1 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 1 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude: auto set sck period (because given equals null)
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9587 (probably m32u4)
avrdude: erasing chip
avrdude: auto set sck period (because given equals null)
avrdude: reading input file "0x5E"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.01s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0x5E:
Reading | ################################################## | 100% 0.00s
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0x99"
avrdude: writing hfuse (1 bytes):
Writing | ################################################## | 100% 0.01s
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0x99:
Reading | ################################################## | 100% 0.00s
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xC3"
avrdude: writing efuse (1 bytes):
Writing | | 0% 0.00s ***failed;
Writing | ################################################## | 100% 0.06s
avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xC3:
Reading | ################################################## | 100% 0.00s
avrdude: WARNING: ignoring mismatch in unused bits of "efuse"
(0xf3 != 0xc3). To prevent this warning set unused bits
to 1 when writing (double check with your datasheet first).
avrdude: 1 bytes of efuse verified
avrdude done. Thank you.
avrdude -c usbasp -p atmega32u4 -v -e -U flash:w:bootloader_atmega32u4_1.0.0.hex
avrdude: Version 7.0
Copyright (c) Brian Dean, http://www.bdmicro.com/
Copyright (c) Joerg Wunsch
System wide configuration file is "/usr/local/etc/avrdude.conf"
User configuration file is "/Users/billy/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : usb
Using Programmer : usbasp
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 9000 9000 0x00 0x00
flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 1 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 1 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 1 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 1 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 1 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude: auto set sck period (because given equals null)
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9587 (probably m32u4)
avrdude: erasing chip
avrdude: auto set sck period (because given equals null)
avrdude: reading input file "bootloader_atmega32u4_1.0.0.hex"
avrdude: input file bootloader_atmega32u4_1.0.0.hex auto detected as Intel Hex
avrdude: writing flash (32768 bytes):
Writing | ################################################## | 100% 0.00s
avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against bootloader_atmega32u4_1.0.0.hex:
avrdude: input file bootloader_atmega32u4_1.0.0.hex auto detected as Intel Hex
Reading | ################################################## | 100% 0.00s
avrdude: 32768 bytes of flash verified
avrdude done. Thank you.
USB device connected: Arduino LLC Arduino Leonardo (2341:8036:0100)
USB device disconnected: Arduino LLC Arduino Leonardo (2341:8036:0100)
Atmel DFU device connected: ATMEL ATm32U4DFU (03EB:2FF4:0000)
Flash it with QMK
USB device connected: Arduino LLC Arduino Leonardo (2341:8036:0100)
USB device disconnected: Arduino LLC Arduino Leonardo (2341:8036:0100)
Atmel DFU device connected: ATMEL ATm32U4DFU (03EB:2FF4:0000)
Attempting to flash, please don't remove device
> avrdude -p atmega32u4 -c usbasp -U flash:w:/Users/billy/src/qmk_firmware/handwired_void16_default_production.hex:i -C avrdude.conf
Atmel DFU device disconnected: ATMEL ATm32U4DFU (03EB:2FF4:0000)
>
> avrdude: AVR device initialized and ready to accept instructions
>
> Reading | ################################################## | 100% 0.00s
>
> avrdude: Device signature = 0x1e9587 (probably m32u4)
> avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
> To disable this feature, specify the -D option.
> avrdude: erasing chip
> avrdude: reading input file "/Users/billy/src/qmk_firmware/handwired_void16_default_production.hex"
> avrdude: writing flash (32768 bytes):
>
> Writing | ################################################## | 100% 6.97s
>
> avrdude: 32768 bytes of flash written
> avrdude: verifying flash memory against /Users/billy/src/qmk_firmware/handwired_void16_default_production.hex:
> avrdude: load data flash data from input file /Users/billy/src/qmk_firmware/handwired_void16_default_production.hex:
> avrdude: input file /Users/billy/src/qmk_firmware/handwired_void16_default_production.hex contains 32768 bytes
> avrdude: reading on-chip flash data:
>
> Reading | ################################################## | 100% 4.70s
>
> avrdude: verifying ...
> avrdude: 32768 bytes of flash verified
>
> avrdude done. Thank you.
> dfu-programmer atmega32u4 erase --force
> dfu-programmer: no device present
> dfu-programmer atmega32u4 flash --force /Users/billy/src/qmk_firmware/handwired_void16_default_production.hex
> dfu-programmer: no device present
> dfu-programmer atmega32u4 reset
> dfu-programmer: no device present
Flash complete
QMK DFU device connected: VOID 16 Bootloader (03EB:2FF4:0936)
References
https://www.reddit.com/r/MechanicalKeyboards/
https://deskthority.net/wiki/Custom_Keyboard_Construction
https://www.masterzen.fr/2020/05/03/designing-a-keyboard-part-1/
65% keyboards
https://github.com/coseyfannitutti/discipline
https://github.com/kkatano/bakeneko-65
Leave a Reply