Skip to content
Vojtech's fork of the Omnia SDR Basic firmware to support firmware generated CW
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Omnia SDR Basic with OK1IAK's QSK CW mods

Add-on board image

This is a firmware fork for the Omnia Basic SDR (now Proficio Basic SDR) by Vojtech Bubnik OK1IAK. In the current incarnation, the firmware integrates a Iambic keyer, which produces an IQ transmit tone at VFO+1kHz frequency and a 1.2kHz sine sidetone at the pin 29 (P1[4], connected to the programming connector), therefore a full QSK is possible without the host SDR application even knowing the hardware is transmitting. An add-on board is proposed to provide three push buttons for a keyer control and an external amplifier is needed to produce a keyer sidetone.

The kits available from

The firmware has some unusual properties:

  • The Iambic keyer is based on the Stephen Trier KG8IH implementation, and it is written in VHDL, therefore the keyer runs without the PSoC CPU intervention.
  • The sidetone generator runs without the PSoC CPU intervention as well: It has been stitched from the D/A converter, DMA channels and a bit of VHDL. The sidetone generator produces a sine waveform with a smooth key up / down envelope.
  • The CW IQ tone is shaped with an error function as proposed by W9CF, with 4ms rise / fall times, producing an exceptionally click free keying.

There are following limitations of the current firmware:

  • The standalone CW transmit works only as long as a host application keeps a receive audio stream from the Omnia open. This is due to the fact that that the transmit audio packets are produced at the same rythm as the receive audio packets.
  • The sidetone is currently locked to 1.2kHz. This is to make the sidetone audible even with a tiny high frequency audio transducer. In the future the sidetone frequency will be made configurable.
  • There is currently no amplitude / phase correction available for the transmit IQ tone. This will change in the future, the amplitude / phase correction will be handled by pre-computing the corrected IQ waveforms into RAM.
  • The transmit IQ tone is fixed and there is no provision for the host application to change either the IQ tone / VFO offset, or the transmit VFO frequency. To operate this Omnia firmware with the HDSDR, one enable the "Tune fixed to LO<->Tune Offset" settings and set the "LO <-> Tune Offset" to 1kHz. In the future the Linrad host application will be modified to provide a TX VFO frequency to the Omnia immediately after the tuning click, so that the Omnia could retune its VFO autonomously at the first keyer symbol, maintaining the full BK functionality.
  • While this firmware feeds the host application with a muted audio stream during the TX intervals, neither HDSDR nor Linrad handle these zero audio receive intervals correctly, both the applications end up with generating an internal floating point quantization noise and pumping the AGC. The Linrad application will be modified in the future to handle these zero receive audio packets as mute commands. Unfortunately HDSDR is closed source and the author does not respond to such feature requests.
  • The keyer is locked to Iambic-B mode and to a fixed speed of 18WPM. Both will be made configurable in the future, either through add-on buttons or by host commands.

Following hardware extensions are recommended:

To allow a zero latency QSK, this firmware generates a sidetone on pin 29 (P1[4]). The sidetone is generated by an integrated 8 bit D/A current converter feeding an integrated 4.7k resistor connected to ground. Therefore the tone output exhibits steps at the D/A modulation frequency and the output cannot drive an audio transducer directly. A common LM386 integrated amplifier has been used to drive a tiny audio transducer or a small speaker. Another possibility is to feed the sidetone audio into a sound card line input and configure the integrated sound card mixer to mix the sidetone with the SDR receive audio.

A couple of buttons are always handy to control the integrated keyer without a host intervention. Having the keyer control integrated into the transceiver will make it easier to port the host application to any operating system or smartphone.

The add-on schematic has been split to two parts: The ESD protection dead-bug soldered onto the bottom of the Omnia bord, and the add-on board holding the big and heavy components. Add-on board schematic Add-on board schematic PDF

The ESD protection chip and the amplifier chip were found in Vojtech's junk box and they are not critical. Four silicon diodes were used to limit the LM386's Vss to 12V.

Other add-on board pictures could be seen here.

Building Firmware

The project was built with PSoC Creator 3.3 SP1

It is normal to get errors about missing files until you have built the project for the first time. This is because the generated files have been excluded from the git repository.

The "bootloader" project must be built before you can build the "basic" project. As of now the Release build of the "basic" project links incorrectly the Debug result of the "bootloader" project, so you have to build the Debug "bootloader" project before building the Release "basic" project. Current code does not fit the FLASH if the "basic" project is compiled in Debug mode, you have to build "basic" in the Release mode.

You can’t perform that action at this time.