The W0RIO Simpler Is Better Morse Code Keyer

(C) 2024 G. Forrest Cook (W0RIO)

Introduction

This project involves the construction of a simple Arduino-based Morse code keyer that was built around an Arduino Nano board. It should also run on an Arduino Uno board, which uses the same processor chip, the Uno will have different pin numbers than the Nano. The project could also be built using a stand-alone Atmel ATMega328P processor chip and a few associated support components. The SibKeyer is based on the Simpler is Better design philosophy, while not being so simple that it does not have some useful features.

There are two code versions for this project, the ultra-simple SibKeyer.ino and the SibKeyerQSK.ino which has extra outputs for QSK operation and blinky LEDs. The SibKeyerQSK version has many of the capabilities of the Accu-Keyer Extended discrete TTL keyer project and the QSK Timing Generator project. One of the design goals of this project was to make a keyer that has a similar feel to the original WB4VVF AccuKeyer, but without the bug that causes the first charactor sent to to be longer than the rest.

The SibKeyerQSK is also compatible with the Modular CW Transmitter Prototyping System and will work with the interface section of the All-Ears QSK Timing Generator.

The SibKeyer feature list includes:

The SibKeyer QSK version adds these additional features:

The QSK version will also work as a basic keyer if the extra outputs on the Nano are left unconnected. Note that the five status LEDs and sidetone oscillator shown in the schematic are optional features.

Circuit Theory

The keyer is powered by an external regulated 5V supply. During prototyping, the power was provided by the USB programming cable. The 5V power rail is filtered by a 100uF capacitor and a 100nF capacitor which stabilize the supply and remove transients.

A pair of 555 timer ICs are used in this project. A single 556 timer IC could be used with the appropriate pin changes. A CMOS 7555 or 7556 timer IC could be substituted if lower power drain is desired, this would be a good idea if the keyer is powered by a battery.

The first timer is used for timing the speed of the Morse code. The CW speed is set via the 100K audio taper (reverse log) potentiometer, the speed is increased as the pot is rotated to the left. If a normal log taper pot is used, the speed control can be wired for faster speed with clockwise rotation. Audio taper pots are more common and less expensive.

The cw speed timer activated by sending a logic high signal to pin 4 via the Active signal coming from the microprocessor. The software turns the clock off when the keyer is idle, this lowers the power consumption by a small amount. Note that this timer operates at 10X the speed of the Morse output, this is done to greatly reduce the long first character bug mentioned above. It also allows the dot/dash timing ratio to be tweaked by changing the Dashcount parameter in the source code.

The second timer is used for the optional sidetone oscillator, it is keyed by the Tx Out signal coming from the microprocessor. The sidetone pitch can be adjusted by the 20K trimmer pot. The 4.7K resistors on pin 4 of both timers are optional, they prevent the timer from starting and the sidetone oscillator from beeping on power up.

A 74LS14 hex Schmidt trigger IC is used for the input and output buffering functions. A lower power 74HC14 part could also be used, although it may be more susceptible to static discharge. In either case, be sure to install the Schmidt trigger IC in a socket. The paddle and manual key inputs are wired to pull down to ground when active. The 1nF capacitors on the inputs of the 74LS14 bypass stray RF energy to ground and the 4.7K resistor pulls the idle input up to 5V. Three ferrite beads could be added to the input lines to further supress RF interference. A Tune switch can be wired across the manual key input if you need the keyer to send a continuous Tx Out signal for transmitter tuning.

Five optional status LEDs can be included for monitoring the keyer during QSK operation. If the simper SibKeyer.ino sketch is used, only the TX and Active signals will be generated so the other three LEDs can be eliminated.

The three spare 74LS14 gates are wired to the keyer outputs and provide inverted Rx, Tx and Active signals. These can be used for controlling a QSK setup such as the one shown in the All-Ears QSK timing generator. The inverted Rx Out gate does not need to be connected if the non-QSK version of the code is used.

A TIP120 Dartlington transistor is switched by the Tx Out line, its collector can be connected to a transmitter that has a pull-down keying line. The transmitter's ground line should be connected to the keyer ground.

Construction

The SibKeyer has been prototyped using a $3 Elegoo brand Arduino Nano on a plug-board proto board with a few external parts. The microswitches shown below have mechanical hysteresis and are not suitable for sending high-speed Morse code.

A more permanent build is planned for this project, everything will be built on a perforated circuit board using soldered wiring.

SibKeyer Prototype

SibKeyer with blinky LEDs initial build on a plug board

SibKeyer soldered version

SibKeyer with blinky LEDs moved to a OnePas OP1210B solder board

SibKeyer Schematic

Schematic of the SibKeyerQSK circuit with optional features

The dot, dash and Rx status LEDs and the Rx Out buffer can be eliminated if you are building the non-QSK version of the keyer. The sidetone oscillator is optional for either version.

Back to FC's Ham Radio Circuits page.