A small utility to test an Amiga A500 keyboard using an Arduino Uno with serial output over USB. The serial output will display all key scan codes (up/down) and 'special' control codes in both hexadecimal and human readable form. The 'Caps Lock' LED indicator on the keyboard will also be reflected by the Uno's on board LED.
Based on information available from the Amiga Hardware Reference Manual and code by olaf. Unlike that code, this project does not translate amiga keys to USB HID for PC keyboard compatibility. The Uno's ATmega328 MCU lacks the required on-chip support for USB that the Leonardo's ATmega32u4 has. Therefore this utility is useful only as an external tool for testing Amiga keyboards. Still I found this useful to test a keyboard MCU replacement build prior to plugging into a working Amiga if you don't have a Leonardo board to re-purpose one of the many existing USB HID adapter sketches.
Make connections from the A500 Keyboard connector to the Arduino Uno as follows: Note the position of the 'key' which is the pin without a wire in the keyboard Molex connector.
KB Conn' Pin | Purpose | Uno Pin |
---|---|---|
1 | KB_CLK | D8 |
2 | KB_DAT | D9 |
3 | KB_RST | D10 |
4 | Vcc | 5v |
5 | NC (Key) | - |
6 | GND | GND |
7 | LED1 | - |
8 | LED2 | - |
Connect your Arduino UNO to your PC using the USB cable as normal.
This tool was developed using the PlatformIO extension for
Visual Studio Code (VScode).
It will also work as an Arduino IDE sketch
by renaming main.cpp
to e.g. main.ino
Build and upload to your Uno over USB using the PlatformIO IDE (or Arduino IDE as a sketch). Alternatively, a prebuilt binary firmware is available if you wish to flash directly using e.g. avrdude in which case I'm going to assume that you know what you are doing :)
Then use the IDE "serial monitor" to view the output.
Alternatively use your choice of terminal emulator
software. By default the code is setup to use 115200
baud (8 data bits, no parity, 1 stop bit)
The baud rate can be changed in the code on this line:
// Serial monitor baud rate
#define SERIAL_BAUD 115200