From Deskthority wiki
Jump to navigation Jump to search

This will be an article on the Bathroom Epiphanies AVR-Keyboard firmware (and it's derivatives). The files are available at this github page.

File list

Filename Description
firmwares/ Folder with pre-compiled firmwares.
hid_liber/ Each physical board has its own folder with files defining the matrix layout and other parameters.
hid_liber/board.h Includes board parameters for number of rows/columns, microcontroller specifics, and declarations of the functions to interface the board.
hid_liber/board.c This is where the microcontroller pin-out is defined, and the function definitions for the interface can be found.
hid_liber/ansi_iso_jis.h Pretty much just a dummy file.
hid_liber/ansi_iso_jis.h Here is where the actual layout is defined.
[other board specific folders]
Makefile Magic make stuff to compile everything correctly. This is where the board and layout to be compiled is selected.
avr.h Extra definitions to make life easier..
avr_keyboard.c The main program code.
hid_listen A monitor that listens to debug data sent back from the keyboard. Compiled on Ubuntu 12.04 64-bit.
print.h Includes functions for debug printing.
print.c Includes functions for debug printing.
usb_keyboard_debug.h The HID keyboard framework supplied by pjrc.com.
usb_keyboard_debug.c The HID keyboard framework supplied by pjrc.com.


Building the firmware

The make system keeps track of what needs to be compiled and how that is supposed to be done. It does not work perfectly for this project. Changing the microcontroller used requires a 'make clean' to be done.

Each board has a section in the beginning of the file. The correct one needs to be un-commented before compiling.

Parameters that need to be defined.

BOARD = hid_liber          // Folder for board specifics
LAYOUT = ansi_iso_jis      // Required layout for that board. Located in the BOARD folder.
MCU = atmega32u4           // Microcontroller the board uses
F_CPU = 16000000           // CPU speed
B_LOADER = \"jmp\ 0x7000\" // Memory location of the bootloader section

To compile the firmware run the commands

make clean; make

Flashing the firmware


Install dfu-programmer

sudo apt-get install dfu-programmer

Reset the controller, and run the following commands

sudo dfu-programmer atmega32u4 erase; sudo dfu-programmer atmega32u4 flash avr_keyboard.hex; sudo dfu-programmer atmega32u4 start 


Atmel Flip

You need the Atmel Flip software installed to your system. If you find that USB comms is not working, use these directions: Flip-USB

  1. Plug in your keyboard
  2. Start Flip
  3. Click the Chip icon (first one)
  4. Select the ATmega32U4 from the list
  5. Click the USB icon
  6. Get your KB to jump to the bootloader (both shifts, or a magnet over the controller)
  7. Click Open (keep trying, takes a moment for the chip to be ready after jumping to the bootloader)
  8. Click the File menu and select your HEX file
  9. Click Run on the bottom left
  10. Click Start Application on the bottom right
  11. Wait a moment and your KB should be live with your new firmware


Since version 0.5.5 there is a windows binary and drivers available dfu-programmer-win. The usage is obviously the same as the linux-version of it. You might want to delete the versionnumber in the filename in order to make it work with existing Makefiles too.

dfu-programmer atmega32u4 erase
dfu-programmer atmega32u4 flash avr_keyboard.hex
dfu-programmer atmega32u4 start

Hints to having a comfortable programming experience

  • Install Linux (Ubuntu recommended for beginners).
  • Install a worthy text editor -sublime for beginners, emacs if you are a bit crazy, vim if you are flat out insane, and gedit will do nicely.
sudo apt-get install emacs
  • Make sure you have the needed software installed
sudo apt-get install gcc-avr binutils-avr avr-libc

If you still want to do it under Windows

  • There are good text-editors too (Like Notepad++,...)
  • Download and install WinAVR for the compiler and so forth. Make sure the path to the WinAVR-directory has no spaces in it or else you might get errors.

External links