From the MicroTO CMOS to the modern Arduino
About 40 years ago as a boy I had built Chet Opal K3CU's MicroTO Message Keyer featured in the Feb 1978 QST article [ARRL Members click HERE to view].
That keyer was eventually lost in moves with the only remaining evidence of it's existence being the photo above. The keyer used 4 of the PCB that Chet sold, hacked together to provide up to 8 memory locations.
In July another QST article appeared "A Digital Readout for the Electronic Keyer" by Bill Jones, W7KGZ. CW speed was displayed on a pair of 7-segment LED displays. [ARRL Members click HERE to view] The sidetone speaker and the speed measurement circuit occupied the top box with the red arrow pointing to the LEDs.
Fast-forward to the present time. I found myself wanting to build a new keyer with a digital LED speed display to round out the old-time feel that the hybrid gear provides. My journey to the eventual solution follows.
Options, Kits and Others
Getting a WPM indication is easy - as long as you don't have an LED display requirement.
A lot of modern keyers feature an LCD display and integrated into that display; the Microham MKII being the last one I had on my desk with a WPM display. But LCD is not LED. And there is just something about the glow of those 7-segment LEDs that is missing in the contemporary LCD module with it's poor contrast ratio and small size. Flexible the LCD is; beautyful it is not.
There were other requirements for the keyer as well, including:
- In modification work on the MFJ-407B which this project would displace I had discovered the N4YG DDS sidetone kit which generates excellent sounding code. So I wanted to use a DDS in this keyer project as well. It's an important aspect because the sidetone circiutry of the hybrids varied and I wanted a uniform key note with audio that could be kept out of any audio filtering later implemented for use wiht the hybrids.
- The keyer would drive the Yaesu hybrid (positive keying circuit) and a pair of Kenwood hybrids (negative keying circuit) so a variety of key line driving would be needed.
- Starting out using the Micro TO keyer, my fingers are forever programmed for what is now called Iambic-B.
- The enclosure would need to fit into the space next to the hybrids on the shelf along with a yet-to-be-built audio filter and I wanted the two to use the same size/style of enclosures.
With that basic shopping list in mind, I started looking around on the web to see what was available. Unlike the 1970s, the modern keyer is built around a microprocessor custom-coded to the task. Of course there were no keyers found with a a lowley single-function LED display; keyers that had a display were all of the LCD variety.
On the kit and project side, there were quite a lot of options - many of them based on the popular Arduino board. I found about ten of these keyer code sets for common uPs as well as a few kits. Two of the kits looked promising and the first step was to build those up with the thought being that I could modify the code and retrofit an LED display saving the work of building the keyer code from scratch. It would help me to expand my feature list for things I may have not thought of were found to be handy indeed.
Something that I had guessed existed - but did not have much appreciation for initially - is the varying "personalities" of keyers. These personalities come in two variants - functional and what I will call the esoteric. In the functional category are easy to understand things like a choice of Iambic A or B and Ultimatic. These functional things are clear cut and easy to understand.
On the other hand the esoteric class includes all the subtle stuff which usually involve some timing aspect. An example of this is how long a key needs to be held in a squeeze move for the keyer to determine the contact was intentional and not noise. Or how far past the sending of an element (dot or dash) the window for a dot/dash memory opens. This category includes autospace features for words and/or letter groups - for which the implementation is varied to say the least.
Keyer code is not very complicated in it's basic form - but if you want a keyer to feel right, I had guessed there were some timing aspects to a simple state-machine implementation that a rookie coder could struggle with. And in my worst-case imagination, making writing the code a big time-sink. Enhancing my paranoia was a note that the Idiom Press K5 keyer has 11 different keyer personality choices built into it's firmware, none of which I could find solid documentation for. So building on others work seemed a very desireable way to go in the long run.
In any event, building up a few of these let me figure out how a keyer felt before getting too deep into a hardware commitment.
This is an interesting kit built as a shield that sits on top of the Arduino board. Features include code playback memory, a DDS chip for sidetone generation and an LCD which includes speed.
The assembled unit is compact and would make a great travel keyer with a built in speaker as well as a headphone jack. Speed adjustment is done by a pot; other settings are configured by a menu system built around the 5 buttons below the display.
Everything on this board worked just as it should have and the construction + programming was simple. It comes in kit form so you only need to separately source the Arduino - no deep dives into the junkbox required.
There are some trade-offs compared to a full size keyer with dedicated boards as used in the MFJ mod. DDS tone purity is compromised by noise from the digital circuitry that surrounds it and is really noticable with headphone use, especially when the display is dimmed. Setting the display to off or 100% bright minimizes that effect. On the other hand, sound quality is much better than a square wave driven device of course and for the most part, sidetone on other projects is in the beeper category.
W5UXH KEYBOARD + PADDLE KEYER
Available only as a PCB, this keyer is amazingly well documented and is the only project I found which was originated by a real QRQ (high-speed-CW) operator.
Author Chuck W5UXH built the keyer for use in high speed rag chew sessions (50+ WPM) that were beyond the capabilities of his paddle skill. Subsequent generations of the board have audio interface capabilities for use with the iCW (internet CW) enthusiasts.
Chuck's build is lovely, encased in a clear plastic custom-built box. On the other extreme of construction quality, my build was one of utility lacking in any aesthetic value whatsoever. Quick and dirty!
The external speaker and key line jacks were hot-glued to the PCB. The two blue buttons allow speed adjustment up/down in 1-WPM increments. A PS2 keyboard jack hangs off an attached dongle allowing full access to the keyer's menu settings - or for the sending of keyboard-based CW.
The keyer has a type-ahead buffer and a lot of other slick features. It's built around the Atmel ATMega328 uP which is used in a lot of Arduino chips. The source code in C is published as well but it is a Atmel Studio based project, not an Arduino implementation.
Advantages of this keyer were an assumption that the timing considerations (if any existed) were well nailed down by CW pros and that the keyer feel would be excellent. Disadvantages were the junkbox dive needed to find parts and if the code was to be modified later, my lack of experience with the Atmel Studio platform. The missing DDS function could be handled by an outboard DDS.
K3NG ARDUINO KEYER
I built this Arduino project using a Mega2560 board in about 30 minutes. A breadboard held the switches and resistor array that makes up the memory/menu buttons.
There are a couple of advantages to this keyer project including good documentation and a modular compilation style which lets you incorporate only the features that you want in your specific build. And there are tons of features to chose from, including support for several LCD attachment methods, a PS2 keyboard, and Winkey emulation. Being an Arduino project, it also had promise as being the easiest candidate to modify for the LED speed indicators planned as part of the final project.
The keyer functioned properly from the start. So it was my choice as the initial code to use for the hardware checkout of the final build which incorporated my beloved LED speed display.
The keyer's physical build started with the basic modules shown below.
The uP board is the blue colored Arduino. Both the K3NG and W5UXV keyers run on the same family of Atmel chips. The Mega2560 shown here has lots of I/O and would be a fine generic hardware platform to host any of the various code sets that I wanted to try out. Of course that flexibility has a downside - I tend to think of other things to add into a uP-based project and because it's all done by code, no hardware revision is usually required. So projects are never really "done" in the classic sense!
To the right is a connector for the LCD and another board for the LED. The 7-segment displays are separately driven (not multiplexed) thanks to the Arduino board having a lot of I/O and enough native current sinking capability to avoid the need for a driver.
Instead of rolling my own implementation of a DDS, i used the proven N4YG DDS side tone oscillator.
The positive and negative key line drivers were small SSR devices. The same board had open space for any added circuitry that may be needed later.
Here's what the keyer looked like with the wiring complete. In this debug phase the wire dress is lacking. The LED display worked fine and the code to add it to the K3NG keyer was simple.
The DDS produces a crisp and clear sidetone but keying the audio line does generate some low frequency content. I added a simple 4-pole HPF built out of a dual op amp in the final build. Components for the HPF were mounted on headers in case a design change to the active filter was needed.
The Final Result - For Now
The blue button activates the keyer menu and the other 3 buttons are memory playback. The speed control (left) is a pot. Sidetone volume and tone (right) are mounted on a concentric shaft control. Finding a knob that would fit the pot was tough until I noticed that the knobs on my Yaesu FT-2000 looked about the right size. The shaft diameters were the same and save for ordering replacement knobs on the rig, the controls for the keyer were complete.
The final version of the display was the hardest aspect of the project to figure out. Initially I had a black on green back-lit LCD using a separate bezel and a small red transparent covering for the 7-segment LED. The two different displays, sizes and colors really looked poor and then one day I noticed I had a red on black LCD module in the junk box. It was a short jump to conclude that a single uniform red transparent plastic front would give a nicer appearance with the final assembly being what you see here.
The keyer is fully functional and in use at this point, joining the hybrids on the op shelf. Mated with a Begalli paddle there is a lot more keyer hardware than I have code sending skill.
I will get the W5UXH code set ported to this hardware eventually but the K3NG code is working very well indeed.