Morse Code Beacon Keyer

Beacon Keyer prototype

Beacon Keyer schematic

Updated August 3, 2015


This circuit stores a morse code message as bits in an EPROM chip, the message controls a relay which can key a CW (morse code) transmitter. The keyer can output either a one-shot message such as "CQ DX DE WB0RIO", or a repeating message like "DE WB0RIO/B GS DM79IX [pause]. A One-shot message can be controlled by pressing the Start button, a repeating message can be sent by turning on the Free Run switch.

EPROMs other than the 2732 can be used if suitable changes are made to the address lines in the circuit. It should also be possible to use and EEPROM chip if you have access to the appropriate programmer. For larger EPROMs, just ground the higher order address input lines on the EPROM chip, and wire the appropriate chip select pins for outputs enabled and chip selected.

It is also possible to store more than one message in different banks of a larger EPROM, for instance, if a 2764 part were used, the A12 address line could be used to select the upper or lower message.

Note that the photo above shows a slightly different implementation of the circuit. A 5V power supply and a 555 timer sidetone oscillator have been added, the keyer relay has been removed and the EPROM is a 2716 type.


CMOS Nor gates U1c and U1d form a gated astable clock oscillator, the frequency can be adjusted by potentiometer VR1. Gates U1a and U1b form the run/stop flip-flop. In one-shot mode, this is activated by pressing the start switch, and deactivated either by pressing the stop switch, or by the end of message signal that comes from the EPROM d3 line.

The clock oscilator causes U2, a binary counter, to step through an 11 bit binary count. This sequence is used to step through the addresses on EPROM U3. Morse code data is stored in the EPROM d0 bit, it is used to turn on and off Q1 and RL1, the keying relay. At the end of a one-shot message, a single on-bit arrives on U3 pin d3, causing the run/stop flip-flop to turn off and resetting the U2 counter to zero. D1, C2 and R4 cause U2 to reset when the power is applied. R5 is used to prevent the U3 d1 line from being shorted to +5v when the stop switch is pressed.

The Osc. Enable signal is used to turn a beacon's oscillator on and off for beacons that have separate oscillator and keying signals. The FSCW bit is optional, it can be used to modulate an oscillator during dashes for easier weak signal reception. See this article for more information of Frequency Shifting CW (FSCW).

Programming the EPROM

I have written a C language program called cw2hex that is used to convert a sequence of ASCII characters into a hex data image that can used for programming the EPROM chip that is used in this circuit. The program takes text input and produces an Intel Hex format file as output. The hex file should be readable by most modern EPROM programmers.

Note that the hex file has a Unix-style end-of-line character (carriage return) and not a DOS-style carriage return/newline. The hex file can be converted to DOS format with the free unix2dos command. Another free software program is hex2bin (available on Source Forge), it can convert a .hex file into a binary file that some EPROM programmers will be able to read. Be sure to run hex2bin with the -p 00 option to set the correct pad byte value.

Making an Arduino Beacon

A simple Arduino beacon sketch is included in the cw2hex source code file. To make your own Arduino beacon, run cw2hex -c and enter your custom message. Edit the CWBeacon101.ino file and change the data in the msgtable to the hex data from the cw.csv file. The trailing number in cw.csv is the decimal byte count, this should be used to define the size of the msgtable array. Load the edited CWBeacon101.ino code into the Arduino IDE, compile and upload the code to the Arduino.

Source Code

The C source code, Unix Makefile and Arduino beacon code are in the tar.gz file. A DOS executable version of the code (V1.2.1) is available as cw2hex.exe. Note that the stop bit in version 1.2.1 is on EPROM bit 1, not bit 3, R5 should be moved to U3 pin 10 if you use this version. It should be possible to compile cw2hex.c on any machine with a C compiler.

My Smooth Tone Clickless CW Sidetone Generator circuit can be used with this circuit, just connect the collector of Q1 to pin 2 of the sidetone generator's 4N35 opto-isolator LED cathode.

Email Me

Back to FC's Ham Radio Circuits page.