Welcome to the new FlexRadio Community! Please review the new Community Rules and other important new Community information on the Message Board.
If you are having a problem, please refer to the product documentation or check the Help Center for known solutions.
Need technical support from FlexRadio? It's as simple as Creating a HelpDesk ticket.

MORCONI, the ultimate CW interface.

MORse COde Network Interface for Flex 6X00/8X00 Series Radios

After the successful development of WKFlex, I was still looking for the ultimate solution to the lack of a remote option for transmitting serious CW with the Flex. I considered adding the FlexRadio native CW API protocol to WKFlex but was attracted by the idea of developing a more sophisticated yet simple and functional solution. Thus, MORCONI was born.

MORCONI is a microprocessor-managed interface that connects your networked radio to your straight key, bug, or any electronic key. Once programmed and configured, it does not require a computer connection (other than for power, if you don’t want to use an external power supply) and works completely standalone. You can think of it as a remote extension of your radio’s key jack.

Acknowledgements

Before digging deeper into the project, I want to thank Mike, VA3MW and Andy, VA3CW from FlexRadio for making a 6300 available to me for debugging the code while waiting for my 8600 to be delivered. I also want to thank Len KD0RC, who influenced me with his TeensyMaestro project.

The Interface

If you’re not comfortable with microprocessors or soldering connectors, please keep reading, there is a solution!

The project is built around a Teensy 4.1 32-bit microcontroller. Several benefits come with using this board, such as:

  • Native Ethernet Interface
  • Audio library
  • Arduino-compatible programming language
  • Easy updates using a firmware-like procedure

The board with the Ethernet chip and the Ethernet connector kit, can be purchased through PJRC or Amazon and is relatively inexpensive. By the way, I’m not affiliated in any form with PJRC.

Once you get the board, connect your Morse key or the output from your electronic keyer to PIN 0 and GROUND. The sidetone output is connected between PIN 1 and GROUND and goes to an amplified speaker or your computer’s sound card input. In my prototype, I used a 3.5 mm mono jack for both.

Firmware version 1.0 – 20240731 can be downloaded from my Dropbox:

https://www.dropbox.com/scl/fi/qs2jn5l7aqe1yeo0gnr9e/MORCONI.zip?rlkey=6kk2str7yeptenu86wek0n34f&dl=0

The package consists of three files:

MORCONI.INO.HEX (the firmware)

MORCONI.CFG (the configuration file)

TEENSY.EXE (the Windows version of the firmware loader, it is available for several OS platforms)

Edit the MORCONI.CFG file (self-documented) and change the IP address of the radio to match your radio (local network or remote router exposing the API port of your radio). For now, you can leave everything else with default values. Save the file on a microSD card and insert it into the Teensy slot. Connect the Teensy to your computer, run the Teensy.exe uploader, search for MORCONI.INO.HEX, and upload it to the microprocessor.

Turn on the radio, run SmartSDR, and if everything went well, you’ll hear a high-speed “K” sent from the speaker. The internal LED, which was ON and RED, indicating no connection to the radio, will turn OFF, and you should be in business.

Some Extra Thoughts

I wanted to make it easy for everyone to build this interface, which created some limitations. The lack of a Human Interface like a display and a controller does not allow using the Flex discovery protocol and Multiflex; therefore, the only way to configure the connection to the radio is through the configuration file. If there is enough demand, I can develop a deluxe version with a small display and an encoder.

I’m working on a 3D printed enclosure.

If you really, really want, I can build the interface for you. Reach out to me offline.

The source code will be available on GITHUB once sanitized.

Known Issues for Version 1-20240731

Sidetone Audio: Generates some clicks. I’m working on fixing this; there are some options to be tested.

SmartSDR Failback: There are already some failback strategies implemented in the code. If the radio disconnects, the interface starts a recovery routine and keeps trying to reconnect. If the radio is connected, the interface waits for SmartSDR to connect before initializing. There is not yet a failback procedure if the radio stays connected but SmartSDR goes down; this will be developed in the next release.

73 de Max, N5NHJ (I8NHJ)

«1

Comments

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Nicely done Max! I tried it and it works great. In my case, I have a router that is starting to fail, so I have my Flex, computer and all peripherals (TeensyMaestro, Morconi, etc) plugged into a switch with no connection to the router. This meant specifying an IP address for the Morconi in the same LAN segment as the radio (169.254.something). I changed the SD card accordingly and had instant success!

  • Mike-VA3MW
    Mike-VA3MW Administrator, FlexRadio Employee, Community Manager, Super Elmer, Moderator admin

    I just got my Teensy 4.1 today. I'll try to get this tested ASAP as well, but I am sure it is great!

  • Dan-N7HQ
    Dan-N7HQ FlexRadio Employee, Community Manager admin

    Terrific!!! The best things happen in our community. I am building mine this weekend!

  • Mike-VA3MW
    Mike-VA3MW Administrator, FlexRadio Employee, Community Manager, Super Elmer, Moderator admin

    Nice work.

    I can get to my remote radio (6600) via a VPN, so I can do a direct IP connection to port 4992.

    DHCP didn't seem to work for me, but once I hard coded it, it was fine, and I knew what IP address the Teensy was so I could ping it to make sure it was on the LAN.

    The ethernet adapter only came with 1 6-pin header, so I had to get creative by soldering the head pins without the holder. No big deal.

    I took the output from my WinKeyer and connected it into Teensy as described and it was on the air and using the sidetone from the WinKeyer worked FB. I thought about casing it, but heat-shrink seems to work. :)

    I did plug some Airpod headphones into the headset and it was plenty loud enough.

    I had the radio on 40M and the power set to 1 watt and called CQ. I wanted to see if the RBN copied me which would confirm I was sending readable CW.

    Nice work Max!

    Mike va3mw

  • Mike-VA3MW
    Mike-VA3MW Administrator, FlexRadio Employee, Community Manager, Super Elmer, Moderator admin

    One of the amazing things about CW over the LAN is how hard it is to do and make it work correctly. You can't just send DOTS and DASHES over a LAN (or VPN for that matter and have it sound like you sent it.

    As an example, so remote solutions will have the WinKeyer copying your sending, decoded that you sent an A. Then the WK sends the A to the radio which has a built in WK and then the radio sends out the A in perfect CW.

    While this is a solid working solution, you can see that the WK has to wait first to copy the CW letter and then send it to the radio. The radio always runs a single character behind. Not so bad for an E but a long wait for a Zero.

    The FlexRadio engineers identified this as a problem back on day 1 around 2012 or so. Hence, what they do is measure the Time of each DIT or DAH and Space and pass that to the radio. So, if you send weird stuff, the radio will transmit weird stuff as well. And, this allows operators to maintain their fist signature.

    Those of you who want to see what it looks like, I captured a small amount of the data stream from Max's MORCONI as it is being sent out on the LAN. You can see the command, 'cw key 1' and a time duration and a 'cw key 0' and a time duration.

    The way FlexRadio did this makes this very robust and allow for LAN (or VPN/WAN) jitter.


    C631|cw key 1 time=0xB85A index=225 client_handle=0x6A2C5ABC
    C632|cw key 0 time=0xB93B index=226 client_handle=0x6A2C5ABC
    C633|cw key 1 time=0xB993 index=227 client_handle=0x6A2C5ABC
    C634|cw key 0 time=0xB9DE index=228 client_handle=0x6A2C5ABC
    C635|cw key 1 time=0xBAC5 index=229 client_handle=0x6A2C5ABC
    C636|cw key 0 time=0xBB10 index=230 client_handle=0x6A2C5ABC
    C637|cw key 1 time=0xBB5C index=231 client_handle=0x6A2C5ABC
    C638|cw key 0 time=0xBBA7 index=232 client_handle=0x6A2C5ABC

  • N5NHJ
    N5NHJ Member ✭✭✭

    MORCONI for FLEX Version 1.1 is ready for you to download from

    http://www.dropbox.com/scl/fi/lnhsjbkw4ctrocli0b5y5/MORCONI-FLEX-V11.zip?rlkey=n1yapmyjs586c4ykiqzvio3w7&dl=0

    Version 1.1 fixes the sidetone audio clicks.

    The package also contains a document with a configuration example for remote installation.

  • N5NHJ
    N5NHJ Member ✭✭✭

    I've just created a discussion group: MORCONI+subscribe@groups.io

  • N5NHJ
    N5NHJ Member ✭✭✭
    edited August 24

    The 3D printed box files are available. Please, reach out to me directly.

    Soon there will be a MORCONI interface available for any radio.

  • N5NHJ
    N5NHJ Member ✭✭✭

    A short video demostrating the MORCONI system.

    This is about the AllRigs version. For FlexRadios you just need the Client box.

    73, Max

  • N5NHJ
    N5NHJ Member ✭✭✭
    edited August 31

  • Hi Max et al

    Just a quick update on my project's progress.

    I found the dynamic IP address configuration on my local network didn't work for some reason; static IP address works fine and is probably my preferred option, so no problem here.

    I use a VPN here to my remote site - Morconi connects to the Flex OK; I see the message in SmartSDR as Morconi's IP address connects and the unit sends a K.

    I am driving the Morconi with a WinKey unit; the audio from the Morconi goes into a soundcard on my PC - so I have sidetone, no problem.

    In use, Morconi works great! I listened to my transmitted signal from the remote station (about 10km away). All was good - great work Max!

    I have just one small issue which seems to have started since I implemented Morconi.

    If I start SmartSDR first, then put 5v power onto the Morconi unit and wait for it to connect - everything works fine.

    However if SmartSDR is started when Morconi is already powered up, the Flex will not put any power out. PTT works as expected OK but if I press Tune, or send CW from Morconi, or send CW from the Flex CWX function, no power output.

    To revert the Flex back to normal I have to switch it off (via the remote on/off function) and restart it.

    Then, I can only use Morconi successfully with the Flex if I power Morconi up after SmartSDRE starts.

    There is no Flex message to indicate TX inhibited. Any ideas please?

    Thanks

    John G4IRN
  • N5NHJ
    N5NHJ Member ✭✭✭

    Hi John.

    Thanks for the detailed update. I’m glad to hear that the interface is working well.

    If you’d like, we can investigate why the DHCP didn’t work. I need to understand a bit more about your network configuration to help with this.

    The "No Power" issue is something I've seen before. Don’t worry; this is a software glitch and is not related to the hardware or specifically to MORCONI. When a client (MORCONI, in this case) connects, the radio sends some information, including the address of the SmartSDR client that controls the radio.

    If this information is not available when the client connects (e.g. if SmartSDR is not up and running yet), it can be challenging to get that information and update the configuration. The result is that the radio goes into TX mode but has no power output (don't ask me why...).

    I've already sent a quick note to Erik KE5DTO about retrieving the Handle in an easier way.

    I can try to mitigate this issue when I have my radio to test with (waiting on the 8600).

    In the meantime, the only suggestion I have is to start MORCONI after SmartSDR.

    73, Max

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Max, when you connect your Marconi to the radio, do you do a bind to the GUI client? Without the bind, several things won't work properly (RF power, CW speed, etc.).

  • N5NHJ
    N5NHJ Member ✭✭✭

    Hi Len, thank you for the suggestion.

    I do ensure that MORCONI is properly bound to the GUI client other ways, as you say, almost nothing works. The issue reported by John appears to be a recurring glitch in the radio's firmware rather than a problem with MORCONI. I've seen it and it has been reported several times in different situations.

    Apparently, if the client_handle is somehow incorrect, this is what happens.

    Rebooting the radio, indeed, resolves the issue and restores normal operation.

  • HA8RD
    HA8RD Member
    Hi Max! This little microcontroller is great, it works very well. I have a problem that I have one key and here is Dot and Dash, how do I connect it??
    73 DE Laci HA8RD
  • N5NHJ
    N5NHJ Member ✭✭✭

    Hi Laci.

    I'm not sure if I understand your question. MORCONI accepts any straight key, or paddle, or electronic keyer.

    You just need to connect your key or keyer to the input PIN of the microprocessor.

    Please ask a more specific question and I'll be happy to provide an answer. Also, please join the MORCONI groups.io list.

    73, Max

  • HA8RD
    HA8RD Member
    Yes, the question was not clear. Paddle keys have 3 wires. The teensy only has 2 wires, gnd and pin 1. Do I need a Winkeyer to convert it?
    73 Laci
  • N5NHJ
    N5NHJ Member ✭✭✭

    Hi Laci,

    MORCONI doesn’t include an internal keyer logic for several reasons:
    First, I wanted to keep the code clean and focused on its primary goal—communicating with the Flex. Additionally, everyone has their own preferred keyer, (I personally favor the C-MOS Super Keyer above all others), and it’s simple to connect the output of your keyer to the input of the MORCONI interface.

    However, if there’s significant demand for this feature, I’d be happy to consider adding it, along with other potential functions, in a "Deluxe" version with ****, display and other amenities.

    For now, I’ve chosen to keep the project straightforward and easy to build.

    Thank you for joining the MORCONI groups.io! I’ll share this response there as well.

    73, Max

  • HA8RD
    HA8RD Member
    Thanks Max! It's a great thing, so now I have sidetone, it was very careless to use the first key so I can't hear my own voice back. I use my radio remotely, so I want to add as few things as possible. I work with the help of the keyboard 90% of the contest program, but sometimes the elkey ​​is necessary. My station is 2 km away from the city.
  • N5NHJ
    N5NHJ Member ✭✭✭

    I'm happy it worked for you. Stay tuned for firmware releases in the next few weeks.

    Max

  • N5NHJ
    N5NHJ Member ✭✭✭

    Happy to report that MORCONI is working flawlessly with my new 8600.

    73, Max

  • N5NHJ
    N5NHJ Member ✭✭✭

    MORCONI FOR FLEX FIRMWARE 1.3 AVAILABLE FOR DOWNLOAD

    A new release of the MORCONI-FLEX system is now available for download:

    MORCONI FOR FLEX FIRMWARE 1.3

    Updated documentation and release notes are also available.

    RELEASE NOTES

    This release

    • fixes the disconnections bug initially reported by John G4IRN.
    • implements the internal keyer emulating IAMBIC (no memories), Curtis A, Curtis B (Accukeyer), and the CMOS Superkeyer (Logikeyer).

    Designing and integrating these timing options into efficient, fast-processing logic has been both a challenging and rewarding task.

    To refine the timing, I referred to John Curtis's 8044 Series Keyer-on-a-Chip Application Note and Karl DJ5IL’s All About Squeeze-Keying.

    I’m also pleased with the Logikeyer’s performance and responsiveness.

    To use the internal keyer:

    • Connect paddles to pin 0 (Dot) and pin 3 (Dash).
    • Connect a linear potentiometer (25K) for speed adjustment between 3.3V, GND, and A9.
    • Verify the config file and update it based on your set-up

  • JasonSt
    JasonSt Member ✭✭
    edited October 28

    This is something we would have to build, correct?

    73, Jason KD9ZHF

  • N5NHJ
    N5NHJ Member ✭✭✭

    Hi Jason,

    I can build it for you.

  • WX7Y
    WX7Y Member ✭✭✭✭
    edited October 30

    I have a Teensy WITHOUT the Network chip's, Will the Teensy work with the Marconi or do I need to find either the Network IC's for my existing Teensy or replace the Teensy with one that has them.

    Thanks and 73

    Bret / WX7Y

  • N5NHJ
    N5NHJ Member ✭✭✭

    Hi Bret,

    Without the network, MORCONI is unable to fulfill its main mission, as there is no other method to connect the radio remotely. You need either the chip or a new board to proceed.

    73, Max

  • WX7Y
    WX7Y Member ✭✭✭✭

    Thanks Max.

  • K9SO
    K9SO Member ✭✭

    I built mine into a Winkeyer box and got it working directly with my new Flex8600. I won't be using the MORCONI keyer functionality, but that will be useful to some.

    For now, the Mag Jack is just pigtailed out of the box and Velcro'd to the side as I'm not too good at drilling square mounting holes. I'll probably print up a new cover and do that better.

    Everything is powered from the Winkeyer USB port by running the internal 5v on pin 2 of the ICSP connector to the Teensy power port. All of the Winkeyer features I use with other applications are preserved, but now it has a cool MORCONI remote feature too!

    I can still use the Winkeyer internal sidetone, but I added a 1/8" jack on the side for connection of the MORCONI sidetone pin to powered speakers.

    I think Max may be adding a couple of I/O connections (and other improvements) tomorrow in a MORCONI version 4 to drive external LEDs to be able to see the connection status when mounted in a box.

    Very nice work, Max.

    73, Fred

    K9SO

  • N5NHJ
    N5NHJ Member ✭✭✭

    Release 1.4 of the MORCONI-FLEX system is now available for download:

    Download MORCONI-FLEX from:

    https://www.dropbox.com/scl/fi/sad97h5ts9nhhf2z7eqij/MORCONI-FLEX.zip?rlkey=8tk903xyksd3x7c3k4916lj2v&dl=0

    Updated documentation and release notes are also available from:

    https://www.dropbox.com/scl/fi/19l8o6w8rrb5zuymv7wdg/MORCONI_FLEX.pdf?rlkey=m97rue9meixf1ddqaqym0zy72&dl=0

    This firmware update includes the following improvements:

    • Automatic reconnection when drops from SmartSDR are detected. (Thanks, G4IRN)
    • New config parameter: Keyer KFactor (ms). This parameter adjusts the internal keyer's dot/dash timing by adding ms milliseconds and subtracting ms milliseconds from spaces to compensate for the transmitter's keying relay delay.
    • New config parameter: Keyer LogiFactor (xx). This parameter allows fine-tuning of the CMOS Superkeyer/Logikeyer intervention timing. It is highly sensitive; the standard value is 33.
    • Configuration improvement: The routine now trims extra spaces before and after parameter values in the config file. (Thanks, K9SO)
    • PIN 4 enhancement: Follows CW keying status, which can be used to connect an LED for visual feedback. (Suggestion by K9SO)
    • PIN 5 enhancement: Now mirrors CW keying status in reverse, also useful for connecting an LED. (Suggestion by K9SO)
    • PIN 6 enhancement: Turns HIGH when a connection to the radio is successful, providing visual feedback for connection status. (Suggestion by K9SO)

    73,
    Max

  • K9SO
    K9SO Member ✭✭

    I cleaned up the Winkeyer installation a lot (no more pigtailed Ethernet Magjack). Details are posted on the Morconi groups.io site. I now have a nicely packaged Ethernet-enabled Winkeyer thanks to Morconi.

    I was finally able to install and test this at my North Carolina location controlling my 8600 in Wisconsin 800 miles away. I can listen to my transmitted signals from Wisconsin (keyed from NC) on my local 6600 in NC. Morconi's latency is almost identical to that of the Maestro. I have about a 35mS RTT between sites and a 10mS TX delay set. I can't measure it exactly, but overall end-to end latency is well below 100mS. That's good enough for serious search and pounce contest speeds.

    I haven't detected any keying errors whatsoever and things are fast enough I can actually use the received signal at 30 wpm instead of the sidetone for paddle keying.

    I like the Morconi solution better than both the RemoteRig and the Maestro solutions since it connects automatically to the server site within seconds after power up and no additional programs (or Maestro bootups) have to be run. The Maestro costs $1500 and the RemoteRig pairs will run you over $500. This can be built for about $50 when connected to a Flex.

    Thanks to Max again for bringing this low cost paddle keying solution to us CW ops. It is highly recommended.

    73,

    Fred, K9SO

Leave a Comment

Rich Text Editor. To edit a paragraph's style, hit tab to get to the paragraph menu. From there you will be able to pick one style. Nothing defaults to paragraph. An inline formatting menu will show up when you select text. Hit tab to get into that menu. Some elements, such as rich link embeds, images, loading indicators, and error messages may get inserted into the editor. You may navigate to these using the arrow keys inside of the editor and delete them with the delete or backspace key.