31 Oct IC-9700 Contest Keyboard
Last Updated on November 21, 2024
What is it?
The IC-9700 Contest Keyboard is a small Arduino-based circuit that allows an old PS2 keyboard to remotely drive an IC-9700 or in theory any Icom radio with a CI-V interface. It allows quick and easy access to many functions of the radio, as well as 12 pre-set frequencies with a single keystroke. It has 3 connections. +12v, a 3.5mm cable to connect to the CI-V port on the radio, and a PS2 keyboard.
The Arduino based project maps keys on a PS2 keyboard to specific functions and pre-set options on the radio. It saves you digging into menus for frequently used options such as band stacking as well as moving around the bands with a single keystroke.
Automate calling CQ for contests. Record your CQ and store it into audio memory 1. You can now call CQ quickly and easily with a simple keystroke.
Directly enter a frequency into your radio from the numeric keypad. For example to QSY to 144.255 MHz, simple key 1 4 4 2 5 5 on the numeric keyboard and press enter.
The function keys are grouped into the 3 bands on the radio. These are for quick frequency changes. Currently F1 = 144.15, F2 = 144.16, F3 = 144.17 and F4 is 144.18. F5 to F8 replicates this on 70cm, and F9 to F12 corresponds to 23cm. The arrow up and down buttons shift frequency up or down 5kHz. Using these keys allows you to QSY to common contest frequency with one or two keystrokes. The period (dot) key takes the radio to what ever band you’re on .100 MHz. 1296.100 for example.
Keyboard Map (V1.21) Nov 2024
IC-9700 Contest Keyboard Key Map
The “P” key cycles through the four states of the preamp. On and off without and external preamp, then on and off with an external preamp.
The “BACKSPACE” key cycles through the three states of AGC. Slow, Medium and Fast.
The “TAB” key cycles between MAIN and SUB bands. If the radio is in dual band display, this toggles the active band. Using the arrow left and right keys swaps the active band. The arrow keys have no function in monoband operation.
The “M” key mutes the MAIN band. It reads the current volume level then mutes the radio. Pressing the ‘M’ key again restores the volume to the same level before it was muted.
IC-9700 Contest Keyboard Circuit
The circuit is straight forward, in fact, it’s really a generic Icom C-IV interface for an Arduino Nano. The radio interfaces with pins D2 (RX) and D7 (TX) on the nano. It has a option for a 2 line LCD display and 7805 regulator to power the nano.
Both the CI-V I/O and VCC have a parallel header and a 5mm screw terminal block. You can use either or loop through.
You can purchase the PCB from the shack shop.
It’s worth noting that this PCB is generic, so if you’re into writing your own CI-V code for the Arduino Nano, then this hardware will work.
Arduino IC-9700 Contest Keyboard Sketch
The PCB
The PCB allows both a USB and/or PS2 connector to be soldered to the board. They are parallel connectors, so it’s one or the other. Regardless, this project only supports PS2 keyboards as the sketch loads the PS2Keyboard.h library.
Parts List (PCB supplied – you need to source the rest.)
1 x Arduino Nano
1 x 7805 5v regulator
3 x 4K7 1/4W resistors
1 x 10K 1/4W resistor
1 x 560R 1/4W resistor
1 x 3mm LED
1 x 1N4148 diode
2 x 100n ceramic capacitors
1 x 4-pin headers (Display)
2 x 2-pin headers (IO / VCC)
2 x 5mm Screw Terminal Blocks (IO / VCC)
1 x USB PCB edge connector
1 x PS2 PCB edge connector
The Arduino Based IC-9700 Contest Keyboard
This project was inspired by an Arduino project by Peter VK2AN with his Icom Command project in Amateur Radio Magazine Oct 2024. My thought was to make a project that would speed up the operation of the IC9700 which would make contesting a little easier… especially the VHF UHF Field Days that we have 3 time a year here in Australia..
How it works
The Arduino Nano is a compact, versatile microcontroller board based on the ATmega328, designed for embedded electronics projects, offering digital and analogue I/O, USB support, and low power consumption. This application draws 50mA with a 2 line LCD display.
The hardware allows sending and receiving of CI-V data. When the Arduino boots, it loads the the pre-set frequencies into the 12 function keys. It then requests the current frequency and mode from the radio and then waits for your key strokes. Only the programmed key stokes are actioned, all others are ignored. The main loop runs continuously reading the frequency from the radio and watch the keyboard.
The project uses 4 common libraries:
#include <SoftwareSerial.h> // for comms to ICOM
#include <PS2Keyboard.h> // to read PS2 keyboard
#include <LiquidCrystal_I2C.h> // LCD display driver
#include <Wire.h> // LCD display driver
As the Nano is not the most powerful in its class, the code is currently being adjusted to minimise frequency errors. As of version 1.3, the main loop now samples the radio frequency less frequently to allow more frequent buffer clearing and minimising missed keystrokes while other things are happening in the background.
Another issue is flooding the keyboard buffer with a high frequency of keystrokes causing it not to empty. Normally an operator wouldn’t use the keyboard in this fashion, it’s just a stress test. The solution has been to add a few delays in code allowing the buffer to empty. Nothing will be perfect, but the chance of an error during what I’d call normal operation is now very unlikely. The blue LED pictured flashes to indicate a keyboard stroke.
Like all good projects it started life on a breadboard. The sketch for version 1.3 is available for download below and a PCB is also available for purchase in the shack shop.
A word of caution, the Nanos aren’t the fastest but they are cheap. On the odd occasion when keys are pressed too quickly it can miss a key stroke resulting in erroneous behaviour. Pressing the enter key should clear any buffers and arrays. When operating your station under contest conditions, this shouldn’t be a problem.
The LCD display is optional. You’ll see the radio update as you use the keyboard.
In hardware-related issues, the PS2 connector pin-outs as described by the supplier didn’t actually correlate with real life, so the PCB had to be updated accordingly. Note to self: Never take for granted what’s published.
The IC-9700 CI-V Manual describes many functions of the radio accessible by code. This project should work with any Icom radio that supports the CI-V interface. This includes all modern radios such as the IC-7300, IC-7600 and IC-905. Just change the radio’s address in the code. The hardware is a generic board that allows an Arduino Nano to read and write to Icom radios. It’s suitable for developing your own projects if you ok with writing your own sketch. My plan is to build one of these for each radio I use for the VHF UHF contest. I’d also like to source custom keycaps for easy function recognition.
PS2 keyboards are old, so theoretically there will be many in junk boxes in every shack. Not all keyboards are the same. I use the USB connector with a PS2 to USB adapter that are available from Jaycar. Watch this space for future developments, and suggestions are welcome as everyone has their own contesting style.