Cistercian keyboard

Keypad with cipher numerals.

Cistercian keyboard, Tauno Erik, 2022
Cistercian keyboard, Tauno Erik, 2022

This keyboard is for me more of an art project. And the opportunity to learn how things work. What is the underlying code and history! Arouse people’s curiosity.

What are Cistercian numerals

The medieval number system was invented by the Cistercian order in Europe in the 13th century. Cistercians are a Catholic religious order of monks and nuns. They used, amongst themselves, a secret number notation. No one really knows about it until about 20 years ago, a British orientalist and historian David A. King wrote a book about it. It was used by various different groups for kinds of medieval cyphers and secret number systems. It is a system that can only write every number from 0 to 9999. It can not to any other numbers. It is really easy to use for dates and page numbers of books.

Hardware components

  • Seeed XIAO-RP2040
  • Custom PCB (Made by Seeed Fusion)
  • Keyboard switches (20 pcs)
  • USB-C to USB-A cable
  • Selfmade keyboard housing (birch plywood, screws)
  • Selfmade keycaps (solid oak and birch plywood)

XIAO-RP2040

It uses a Raspberry Pi RP2040 chip like Pico.

XIAO RP2040 has:

  • Small size 20×17.5 mm
  • USB-C
  • 11 pins + power pins
  • Reset button
  • Boot button
  • RGB LED (user-programmable)
  • Power LED (2 colours)
  • User LED
  • 264KB SRAM and 2MB Flash memory
  • Dual-core ARM Cortex M0+ processor, 133 MHz
  • 3.3V!

Custom PCB

My design contains four columns and five rows of switches.
Next time, I’d leave more space between the switches. Right now they are quite tight.
It’s the first time when I ordered yellow PCBs. I think it’s a good fit with my wooden mechanical keycaps and housing.

PCBs are made by Seeed Fusion. I ordered five and two assembled. I think they look nice. Pads are gold plated. Only one PCB has some kind of colour drip. Otherwise, they look and feel good.

Anomaly 1 – design fault?

When the board was assembled and I started to program I discovered that there is an anomaly: when I pressed the [ 0 ] key the third row will be stopped to work completely. It works physically but no signal will be registered in the MCU. The same thing happened when I pressed the [ , ] key and the fourth row goes to silent.

This is maybe the most interesting part of this kind of project to me, to discover why things do not work as expected. Is it a software error or hardware fault? Thankfully I had a second similar board to do experiments. The same anomaly was repeated on another board.

First I looked into the software. What really happens when I press the key? To read keys we turn row pin LOW and read column pins one by one. When the column pin is LOW then this key is pressed down. Otherwise, it stays a HIGH. I discovered that after I pressed the bad key some rows stayed LOW all the time.

xCol 1Col 2Col 3Col 4
Row 1%/
Row 2789*
Row 3456
Row 4123+
Row 50.=

I was checking all the hardware connections and there were no errors. Maybe this anomaly happens because these pins are also RX and TX pins? Anyway. Since the board had two unused pins I decided to rewire these rows. And it is not an easy task, thanks to these all thin traces on the PCB. This hack fixes the anomaly.

Keycaps

Keycaps are made the same way as on my previous keyboard. Which can be found here. Only that this time engraving them by hand. Not with a laser.

Design ideas

The main components are the keycaps. And everything else is as minimum as possible.

Software

First I planned to use PlatformIO with the Arduino framework, but this board (XIAO-RP2040) is not yet supported on PlatformIO. So I used Arduino IDE.

There have multiple choices to program it:

  • CircuitPython/MicroPython and Thonny
  • Arduino IDE (Install XIAO RP2040 Board)
  • Raspberry Pi Pico C/C++ SDK
  • PlatformIO with the Arduino framework (Not supported yet!)
  • etc.

Anomaly 2

There is also a second anomaly. In keyboard mode, some keys give a different result than they should. When I Serial print them they all look good and the hex codes are correct. But in keyboard mode, I see different key presses.

KeyhexOn screenhex
/0x2F0x2D
*0x2A(0x28
0x2D+0x2B
+0x2B`0x60
=0x3D´0xB4

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.