Thursday, December 24, 2015

MMDVM ::: Open Source Multi-Mode Digital Voice Modem

Open Source Multi-Mode Digital Voice Modem
Introduction
The MMDVM is intended to be an Open Source Multi-Mode Digital Voice Modem project, which takes advantage of the power of a processor like an ARM and analog interface circuitry.
It is initially aimed at the Arduino Due with other architectures like the Teensy and STM32 potentially also supported.
The requirements for these processors being access to raw interrupts and an ADC and ADC ports as well as digital signalling ports. For this reason the Raspberry Pi and similar single board computers are not being targeted as access to the raw I/O is mediated by the operating system kernel and does not provide the performance. However such boards are very useful for hosting the interface of the modem to external networks such as ircDDB in the case of D-Star.
Hardware Interfacing
Currently the only hardware device specified is the Arduino Due, however the requirements are common to both the Due and Teensy.
The modem requires one analog input, one analog output, and a small number of digital inputs and outputs. The analog input requires that the audio is low pass filtered with a cut-off of around 5 kHz and the output then level shifted so that a zero input signal provides an output of half the rail voltage (3.3V in the case of the Due) for the ADC.
It is important that the low frequency characteristics of this stage is very good with little or no low frequency roll-off due to any coupling capacitors in the signal path. The analog output has very similar requirements to the input filtering with the caveat that the output signal from the DAC will be at half the rail voltage for a zero output.
Both the input and output can be inverted in software. One of the required output lines will be used to signal a transmit condition, the modem is capable of providing an inverted output if needed.
Another output can be used to drive a LED which is used by the modem to indicate that an incoming signal is being decoded. One of the input lines can be used to signal to the software that the radio is indicating carrier sense (COS).
Software Interfacing
The interface to the modem will be via a USB serial connection. On the Due this will be via the "Programming" USB port.  The "Native" USB port is used for logging/debugging messages if they are enabled at build time.
The speed for both ports is 115200 baud. The commands are split into generic commands and protocol specific commands. It is possible to build the modem firmware to include or exclude different modes, likewise it is possible to specify which modes are available at run-time also.
It is impossible to enable a mode that has not been built into the modem when the firmware was compiled.