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)
  • Large data payload size of up to 792 bytes
  • 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! If you have the old version of the hardware, select the 5V reference build of your chosen version. If you have the new hardware version (greater than 2.0 printed on the PCB), select the 3.3V reference build.

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+ and PTT_GND pins. Most Kenwood-style handhelds will have +3v on the ground pin of the MIC jack, that will trigger PTT when connected to the ground pin on the SPK jack.


Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>