65% keyboard

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

ItemURLPrice USD (May 2022)
ATmega32U4https://www.aliexpress.com/item/32785518952.html7.42 (17.81 two items)
Gateron Red Switches110PCs 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=51563233.43/32.02
Bamboon 8mm https://www.aliexpress.com/item/1005001873970016.html 2.96/2.83 Euro
Costar Style stabilizershttps://www.aliexpress.com/item/1005003566973542.html4.62/4,42
Caps35.08/33.61
1N4148https://www.aliexpress.com/item/1005003540554760.html1.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

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *