I've been hard at work during the last while making a new version of MicroModem. Particularly I wasn't too fond with the consistency in quality of the Microduinos I used as the processing board for the modems, and also very tired of Microduino occasionally using fake FTDI chips, which causes all kinds of headaches. So I set out to create a new version of MicroModem, with everything integrated on one board.
This allows me to source all the components, including the ATmega328p and the FTDI USB chips myself, thus ensuring that the quality of the modems are top notch every time. Sourcing the Microduinos was also a bit of a problem because of the very long and irregular lead times when ordering from them, which made it more or less impossible to manage stock, when I only do as small production runs as I do. Don't get me wrong, I really like Microduinos, but they're just not the best for this application :)
Today I'm happy to present a sneak preview of the next version of MicoModem! Please note that these boards are prototypes, and do not represent the quality of the final product. The final modems will come on a really nice black PCB with gold plated pads :) Functionally, the hardware is almost the same as before, featuring an ATmega328p, USB serial connection, the modem circuitry and adjustable output level.
The biggest change is that the demodulator ADC is now referenced from a regulated 3.3v supply instead of the 5V (rather noisy) bus. This gives much better receive sensitivity and performance, especially in noisy conditions. I should also mention that they are fully Arduino compatible, so you can reprogram them straight from the Arduino IDE over a USB connection! More on why this is awesome in the next section...
Here's a photo of the MicroModem prototype compared to an USB thumb drive. The dimensions of the board are 29 x 49 mm, so it's pretty compact! It's actually only 66% of the total footprint of the Microduino-based version.
The other big update is that I am in the process of a very big re-write of the entire MicroModem and MicroAPRS firmwares. I want to move away from the BertOS foundation of the project, to better be able to optimise resource usage, and make the software more platform-independent. BertOS is awesome, but it is stupidly difficult to make it target multiple different processors. In the future, a firmware like MicroAPRS should be able to easily support many different processors. which brings us to the next point...
Arduino compatibility! I'm really excited about this! Concurrently with the release of the new modems I will release an Arduino library, that will make it very easy to create your own MicroModem firmware straight in the Arduino IDE. Want to make your own APRS tracker? How about something like this:
#import <MicroAPRS.h>
#import <GPS.h>
APRS myAprs;
GPS myGPS(Serial);
void setup() {
APRS_init(myAPRS);
GPS.begin(9600);
myAprs.setCallsign("NO1CLL");
myAprs.setSSID(1);
}
// Transmit a simple beacon every 30 seconds
void loop() {
GPS.parse(GPS.lastNMEA());
myAprs.setLat(GPS.lat);
myAprs.setLon(GPS.lon);
myAprs.transmitLocation("MicroAPRS Tracker")
delay(30000);
}
// This function gets called by the APRS
// library whenever a packet is received
void aprsCallback(APRSPacket *packet) {
Serial.print(packet.data);
}
Plug your MicroModem into your computer, hit upload in the Arduino IDE, and you're good to go! The MicroAPRS functions will run "in the background" of your sketch taking care of the heavy lifting, leaving you to implement the stuff you care about very easily! I think this will be a really great thing, both for people who buy a modem from me, but also for people who want to make their own.
It will be possible for someone with only minimal experience to build and program their own AFSK / AX.25 / APRS modem! And if you buy the modem from me, you get a professional quality modem, that is totally open source and the most flexible and customisable one currently on the market :)
The new firmwares and Arduino libraries will of course be backward-compatible with the previous MicroModem versions! There will be a hardware detect feature in the library and firmwares that checks for hardware version and adjusts some configurations accordingly.