- Important info!

MicroModem is now discontinued, and I will not be producing any more units for sale. All information on this page is historical and for reference purposes.

If you want a complete, pre-built unit, please have a look at OpenModem instead. It offers a much more powerful feature-set, is easier to use, and is the platform I will be developing in the future.

While I will not be producing more MicroModems or developing the firmware further, all resources for MicroModem, including software, schematics, build-info and source-code will be kept available for existing installations, and for any users that still want to build their own MicroModems.

If you want to build your own AFSK1200 modem, MicroModem is still a very viable option, since it is easy to build, and very well documented. It is also incredibly stable, with many units in the field running for years at a time without issues.

What is it?

MicroModemGP is a general purpose firmware for my open source AFSK1200 modem, MicroModem. By flashing the firmware to a MicroModem or a compatible build, you can use it to send and receive data packets over more or less any kind of analogue connection. On this page you can find general usage information and the latest pre-compiled firmware images.


  • Send and receive data packets with almost any radio
  • Easy to use input and output connections (standard 3.5mm TRS jack in version with case, direct audio in and out connectors on board)
  • Supports data payload size of up to 564 bytes per packet
  • PTT trigger functionality
  • Transmit and receive LEDs
  • Supports running with open squelch
  • Supports KISS serial protocol
  • Supports direct serial mode
  • Full P-persistent CSMA support in KISS mode
  • Fully open source, all code is available on GitHub

Download Latest Precompiled Images

There's currently two versions of the firmware available, a version using KISS and a version using direct serial. Take your pick, download, flash and enjoy!

You can flash the firmware with avrdude or similar programs. Using avrdude, the command would look something like:

avrdude -p m328p -c arduino -P /dev/ttyUSB0 -b 115200 -U flash:w:MicroModemGP.hex

KISS mode or direct serial framing

When the modem is running in KISS mode, there's really not much more to it than connecting the modem to a computer, opening whatever program you want to use with it, and off you go.
You can also use the modem with direct serial framing. If using direct serial framing, the firmware uses time-sensitive input, which means that it will buffer serial data as it comes in, and when it has received no data for a few milliseconds, it will start sending whatever it has received.
If you're manually typing things to the modem from a terminal, you should therefore set your serial terminal program to not send data for every keystroke, but only on new-line, or pressing send or whatever. You can also compile the firmware for KISS mode serial connection, if you have a host program using KISS.

Changing settings in KISS mode

Most KISS compatible software supports changing the preamble time (called TX delay in some programs), tail time, persistence and slot time parameters over the serial connection.
It's important to note that some programs (Xastir, for example) will reset the modem when connecting to it, and then immediately send configuration commands. This has the unfortunate effect that the configuration commands are sent to the bootloader, instead of the booted firmware. If your program does not allow you to disable resetting or to set a delay for sending the configuration commands, you can manually disable the reset functionality by connecting a resistor of around 100 ohms between the VCC and DTR pins. This will ensure that the modem is not reset, even if the host program sends a reset command.

Connecting to a Radio

You will need to connect the Audio In port of the modem to the speaker output of your radio, and the Audio Out port of the modem to the input of your radio. Most handheld radios will need microphone level audio on the input port, otherwise the transmitted audio will distort, making packets hard to decode. You should also also connect GND from your radio (usually the GND pin of the speaker jack) to the GND port of the modem. The PTT circuit works by closing a switch (using a MOSFET) between the PTT_V+ and GND pins. Most Kenwood-style handhelds will have +3v on the ground pin of the MIC jack (connect this to PTT_V+ on MicroModem), that will trigger PTT when connected to the ground pin on the SPK jack (connect this to GND on MicroModem). Some radios can accept a logic-level PTT signal, and will have a dedicated PTT pin. For these radios, use the "PTT" pin on the radio to the "PTT" pin on MicroModem.

10 thoughts on “MicroModemGP

  1. Hi Mark,
    Firstly let me thank you for your good work.
    I am experiencing very different RX performance between the microaprs & MicroModemGP firmware.
    The ‘microaprs-5v-ss-latest.hex’ works great even on a noisy signal – really impressed, but the ‘MicroModemGP-5v-direct.hex’ doesn’t receive packets at all well, not even 100% on a fully quieting signal.
    I’ve not tried the 3V versions as I have a filtered 2.5V bias on the A0 input.
    The modems are made from genuine Arduino Uno’s (as I had a couple) and the passives added on a proto shield.
    The test set-up is identical for both firmware versions, all I did when I found the issue with the MicroModemGP-5v-direct.hex version was to flash the two Arduino boards back to the microaprs-5v-ss-latest.hex file.
    Would you expect the RX performance to be the same?
    Chris G6WHI

    1. Hi Chris
      Something’s definitely not right there. Performance should actually be better on the MicroModemGP firmware, since it employs FEC and interleaving. It’s admittedly been a while since I tested the 5V version, so maybe a change somewhere has caused issues. I’ll have to look into it. Thanks for bringing it to my attention!

      1. Hi Mark,
        Following your reply I altered one of my modems to use 3.3V on ARef, re-biased A0 to 1.65V and flashed that modem with MicroModemGP-3v-direct version, having re-flashed the other modem back to MicroModemGP-5v-direct version.
        Just sending data in the direction so that the 3.3V version was receiving, same poor RX result as the 5V version.
        I then re-flashed the 3.3V modem with microaprs-3v-ss-latest and the 5V one with microaprs-5v-ss-latest and it works great again.
        So it looks like there’s something wrong with both the 3 and 5V versions of MicroModemGP- -direct.
        Hopefully this is an easy fix, as I’d love to do some experiments with MicroModemGP-5v -direct
        Chris G6WHI

        1. Thanks so much for testing it out. A bug must have snuck in somewhere. I’ll have a look at it and see what’s going on!

        2. Hi Chris,
          I know it’s been a while since you write, but I still wanted to let you know that the performance issues with MicroModemGP have been fixed now 🙂

          1. Hi Mark,
            Thank you for the update and the fix, I will download and test.
            I assume that as there’s only one Direct Serial version now, it’s 3.3V bias?

          2. Correct, there was very little use of the 5v bias firmwares, so I only compiled 3.3v bias firmwares this time around.

  2. Do you already have a version that works with GPS and is it possible to connect on your cell phone to send messages?

  3. I have some DIY APRS TNC builds I made up for use with the MicroAPRS firmware. I’ve never been able to get Winlink to work using MicroAPRS, probably normal. I assume that this MicroModemGP firmware is capable of such?

    I have tried flashing it to my Arduino Nano boards. But whenever I send a packet, it sounds “off” compared to it normally would. Nothing is ever decoded with APRS or anything else. I based my schematic directly off the MicroAPRS guide. APRS works perfectly with MicroAPRS. Not at all with MicroModemGP. Is there more to making this work, and will it work with Winlink? Looking for guidance.


    1. The old MicroAPRS firmware was quite limited in terms of buffer space and packet sizes, due to RAM constraints of the chip. That is probably why you could not get it to work with Winlink. The MicroModemGP firmware will unfortunately not help in that regard, since it inherits the same problems. It was made as a general purpose modem firmware better suited for running IP and custom protocols on MicroModem hardware.

      The new OpenModem Firmware should be perfectly capable of handling programs like Winlink.

Leave a Reply

Your email address will not be published. Required fields are marked *