Skip to content

recri/hasak

Repository files navigation

Ham and Swiss Army Knife (hasak) keyer

A morse code keyer for the Softerhardware/CWKeyer

low latency keyer project. The goal is to allow the operator to hear keyed code with low latency while listening to and keying a possibly remote transceiver.

Following the general plan, this keyer runs on a Teensy 4, acts as a morse code keyer, takes its parameters from MIDI, and produces very low latency sidetone.

The current release is built for the CWKeyer prototype. I haven’t tested against the Teensy4+AudioAdapter, bare Teensy4, Teensy3+AudioAdapter, or bare Teensy3.

This release responds to the four control potentiometers and produces output through the WM8960 codec. It keys from a straight key or paddle. It plays audio from the computer.

This release is somewhat inconsistent on my prototype. Sometimes I get no audio at all after downloading code, sometimes I get a continuous tone, and sometimes I get a working keyer. Not sure what causes it, but it generally goes away with a few rounds of unplugging and replugging the USB cable or a fresh download.

Yet to be done

Winkey emulation

most of the code is there, but it’s not hooked up. I’ll be dependent on others for testing.

Midi controller

I’m working on a web app that will query and set keyer parameters.

Other hardware

The code should be able to run on a bare Teensy3, a Teensy3+AudioAdapter, a bare Teensy4, and a Teensy4+AudioAdapter, but I need to rebuild the variants to test that those still work.

Hasak details

All of the timing and sequencing happens inside the Teensy Audio Library processing loop with sample accuracy. The pins which reflect key, paddle, and switch closures are sampled and latched at sample rate and processed into sidetone, IQ tone, and CMOS outputs as a side effect of the audio library computing output audio samples.

The Arduino loop() function monitors MIDI over USB for control change messages which can modify the keyer tone, keyer speed, keyer volume, and so on. There are 312 potential parameters reserved at the moment, some of which are gaps of unused values for adding new parameters without renumbering, including 64 morse code character definitions, 24 output mixer levels, and 23 default keyer parameters and 5 sets of keyer parameters to allow the defaults to be overriden for each of the 5 default keyer voices. Most of this can and will be ignored by most users, but the keyer can be tweaked in detail if necessary.

The keyer is not feature complete: it’s missing a local control mode, a control mode over the serial interface, a winkey emulation mode, the ctrlr panel only exposes some parameters, it isn’t decoding the morse being keyed, and there needs to be a way for the keyer to save its parameters in non-volatile memory and to export them to ctrlr.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published