Menu

Get in touch

If you have any general questions or comments you feel might benefit other people as well, I encourage you to post a comment on a relevant page, or use the forum! You can also send me an email by using the address mark at unsigned dot io. I encourage you to use my PGP key, that is posted in the sidebar on this page!

193 thoughts on “Contact Me”

I’ve just placed an order for a MicroModem DIY Kit, but ufortunately I’ll probably misunderstand something.
Could I use it connected to a normal Arduino Uno or Arduino Micro.
Or the forms factor is for other arduino boards?

Hi Paolo!
You can use it just fine with a normal Arduino UNO. In fact, it will work with any Arduino compatible board that has the ATmega328p microcontroller 🙂 A small guide with an example of how to connect the kit to an Arduino is included in the kit, it’s very easy. You just connect a few wires from the MicroModem board to the Arduino pins, and everythings ready!

Definitely go for the 5V version, as it is running at 16MHz. The 3.3v one is only 8MHz. All the code I have published expects a 16MHz operating frequency, so you would have to change that yourself if you go for 8 🙂

the line in and mic out part works, but i good ptt always pushed on my baofeng, same as you used, but my cable is fine, use it on a tnc2s as well.
but the thing is, i checked the mosfet circul and it seems fine, wenn i not send i have no bridge between – and ptt, when i send i have one, but on the ptt wire is a negativ -0.5v it shud be 3v + right?

I’ve been looking forward to implement this amazing modem myself with the help of your tutorial and the repository in GitHub, not sure of what am i doing wrong but i don’t seem to even compile the proyect.

Is there any way i can do it with the Atmel Studio (Visual micro) plugin? (same as arduino IDE i guess).
I would really apreaciate any help i can get!

Hi Den!
As far as i know, the Ultimate GPS board just outputs the GPS data over a standard serial port, so that should be no problem. I don’t have one myself, so can’t provide exact code for it, but it should be pretty straight forward: Just poll the serial port for incoming data and parse the lat/lon values from it. Then set them using the commands in the library and transmit a position update!

Hi Wladimir!
I can send to Brazil no problem! I’m not quite sure what you mean by wanting to use TCP/IP though? Do you want to receive APRS data from the internet and the send it over a serial connection to display the data on an LCD display? If so you actually don’t really need the modem, since there would be no need for demodulating a signal. You would already have the data directly available. If I misunderstand you, please elaborate 🙂

Hello, I need to get in contact to you to buy some micromodems.
Here in Costa Rica, we will launch a LEO satellite. Data came ashore using a link APRS radio.
I need to install micro modems in some hills in the country, in order to recover the satellite. This activity will be done in August, the event is call Campus Party, it’s a Technology Trade Show for hobbyist and makers. The webpage of the event is: http://costarica.campus-party.org/
We have a few weeks to setup the APRS network and the satellite.

I am experimenting with APRS and arduino.
Is there a code or hex file available to flash my arduino (uno) and recieve aprs packages.
Frist i want to recieve aprs packages and put them on a maps (like aprs.fi)
Later on I want to send gps coordinates back to the first modem; do you have experience with gps coordinations?

Hi Shawn!
There’s currently no resellers in the US, but I have them back in stock now. Shipping to the US is only 3.5€ without tracking. If you want it as a registered package with tracking, it’s a bit more expensive at 37€.

I have new orders in at the PCB fab, and also for components, but probably wont have stock until late december. I usually make 50 piece batches, but I’m upping the next one to a couple hundred probably since they sell out quite quickly 🙂

Still not decided on doing another run of DIY kits, but will post if I do 🙂

Currently doing research on building a cubesat and since we’re using only commercial off the shelf parts this modem seems like a great way to get our telemetry data back to the ground station. Being completely new to this I had a question. Would it be feasible to cut out the modem usb –> computer connection and have the actual arduino supply the data that we would like transmitted (if we had sensors recording data also connected to the Arduino) or would that be too much to handle for something like the Arduino Uno? If that isn’t possible I was thinking I could connect the modem via USB to another microcontroller (if possible) but we’re trying to minimize power consumption by doing it all on one board.

You can easily bypass the USB connection! If you buy the modems from here you can use the UART port directly on the modem for a direct serial connection to another arduino for example. If you build it yourself, just be sure to add some connectors for the serial pins!

first of all again congrat to your excellent work! It’s a lot of fun building things around… I just have a question, after running a coulpe hours the MicroModem the Path change by itself for example ti “WIDE1-1,9-2”. Any ideas?

Hi Mark,
I need your help. Last year I bought a Micromodem rev1 A1 board from you.
I lost the manual that show me what pins to connect to the arduino nano. please
let me know if there is a pdf file for this. thanks for your time.

Hi Mark,
I tried to register with my callname IU3GMS, but something went wrong at mail server, so I can’t register again. please check the user db.

I am using your LibAPRS on a Genuino Mega and a SimpleSerial on a Nano, that are “talking” together succesfully (for the Mega I have changed the port definitions).
I made a little change on AFSK.h that has determined a very high percentage of success in decoding.
It seem strange, but this change consists on the inversion of mark and space frequencies.
As this articles says (http://owenduffy.net/blog/?p=2101), I saw a very high quality on 1200Hz note and a poor quality in 2200Hz.
the transmission started with 2200 tone, the receiver heard that frequency and than the frequency transitions.
Starting with 1200, the receiver decode and sincronize better.
Have you ever tried this?

I am looking for 10 to 20 Bell 202 Dumb Modems for a special application in the alphanumeric paging service. The modem I have been using for the last 20 years is no longer in production.
My requirements are as follows: Dumb Modem (I have my own control signals). 300 to 1200 baud.
Standard Bell 202 tones.
In my application I use Audio in (FSK) Data out (Capable of Normal or Inverted polarity.
+12 Volts and Ground. 300 Baud Rate. And that is it.
Can You help me.
Thank You

I’m sorry, but I don’t use Windows, and don’t know about Code Blocks. If you have avr-libc installed, that will be all the includes you need. Maybe you need to set up a path to the libraries in Code Blocks?

Hello, I can’t register on the forum, so I ask here.
I just built the PTT and “soundcard” parts separately (first sending, second receiving data). I modified arduino APRS firmware (I left only raw data send and receive functions, I don’t need APRS at all, just AFSK code and a little AX25 code) and started testing!

Everything work good, I’ve sent millis() and received in terminal. OK. but… may be 1 of 20 packets is lost.
I know it’s only ~5% of loss, but is it okay? (only 20cm between radios). I don’t have oscilloscope and my radioschematic knowledge is not perfect (as AVR programming, too), but if someone will direct me, will be good!

P.S. APRS arduino lib don’t have CSMA and error-correction, I will try to implement them. My goal is to implement simple mesh network with GPS location updates and encryption by key.

Hi Roma!
I think 5% packet loss sound a bit high. Actually try moving the radios a little further apart, and if you are transmitting at higher power, make sure there is also at least 50cm between your modems and radios! If that does not change anything, I would increase the TX preamble a little and also make sure the input and output levels are well adjusted. This can be hard without an oscilloscope, but with a little trial and error, it should be possible to get it dialed in almost perfectly 🙂

Hello Mark,
I am not able to reply to threads due to still missing confirmation from administrator.
Could you please acknowledge my request in the forum intruduction or delegate it to somebody?
Regards,
Pete, Germany

Hello Heino!
I am all out of stock right now, but will have more in 2-3 weeks. Demand has been much higher than my production capacity for a while now, so I have been upgrading my workshop to be able to produce more units faster. I will start production of the new batches in 10 to 14 days, so if you can wait for it, they will be available again soon!

Hi!
I use your software midi katapult a lot for videosampling in Ableton Live. I would like to know if it is possible to make the launchpad mini (or the newer launchpads) compatible because the only one that work is the original launchpad. Is there a firmware sdk form novation that I could use? Thanks

I would like to order a pair of Micro Modems for an experiment. When will they be available? Also, can t he code be modified so it can be masked from the audio stream going to the transceiver? I intend to do that by using a very high cutoff HP filter, passing only frequencies above 400 HZ to the speaker amplifier. I don’t need high baud rate. I imagine the code is flexible enough to tailor the FSK frequencies.

Dear Mark,
I have been working on making a micromodem. In the documentation, you write, “The git repo includes a prebuilt .hex firmware file you can upload to the modem.” Are these the four .hex files located in the “precompiled” directory?
Thanks for a very detailed and complete project. I am afraid my skills are not up to the level of writing my own changes to the software, BUT, I have really enjoyed pushing past my ignorance and learning WinAVR, avrdude, and learning what a bootloader is. I hope you haven’t abandoned this project yet.
Bruce

Been looking into building one for the fun of it. So far so good minus a few hiccups. I just have a few questions about the settings for the transmit delay and tail using the kiss protocol version. How can I set these? I noticed some general information saying it could be set in the kiss version, but nothing describing how. My plan is to use it with APRSDroid and Xastir on the computer. Xastir has settings for these but don’t seem to do anything. APRSDRoid does not have these settings.
Can the code be edited and compiled to accomplish this? Or some other method?

Hi Bo
Something like that would be possible, but since MicroModem is primarily designed for radios, you would need to add a little extra circuitry to “pick up” the phone when someone rings. You’re welcome to send me an email with a bit more info on what you want to do, and I’ll try to guide you in the right direction!

Hi Mark,
I teach along the coast of Maine (USA) and would like to engage them in an electronics project. We have been playing with Arduinos and a couple have expressed interest in doing something like a High Altitude Balloon project, which I’ve done before with APRS beacons. Being on the coast, I’d like to try making a sounding buoy as well. These project ideas have something in common that hasn’t really been done much – an on-board “flight computer” which can transmit telemetry but can also receive commands. To do this, I’d like to use something like your MicroAPRS board – which I saw on your YouTube channel. It looks like something my students can “build from scratch”, which is important because I want them to feel like it’s their own project, and therefore something worthy of their time and attention. From your experience, would your MicroAPRS board work well? I have a radio for the remote unit and am starting to consider how the ground station should work, as I plan to use Processing to design a GUI for the ground station, to give it that “mission control” feel.
Thanks,
— Markus

Hi Markus
Sounds like a great project. I actually used to sell kits with PCB and through-hole components for building MicroModems, but I don’t carry those in the shop anymore. It’s still quite easy to assemble a working MicroModem on a breadboard or prototype board though, so it should be no problems. If you haven’t already found the schematics and such, they are all available on my Github page.

I think MicroModem would be a fine fit for the project. You could use the default firmware, or create a custom one using LibAPRS, depends on how you like to implement it really.

Sounds like a great idea with the Processing GUI! If it all comes together, please send me a few photos, would love to see how it turns out!

Outstanding! I have a question for you, since my tech knowledge is self-taught… I ask my friends about this and they say “oh yeah, a serial connection” like that explains the whole thing. And I’m sure it does – for them at least! So I’d like to ask what’s happening “under the covers” – feel free to direct me to resources you know of, they may have more information than what I’ve been able to find.

I see that, at least in the YouTube video, your MicroModem forms the “bridge” between the Arduino and the radio. While I can understand the serial data between the MicroModem and the Arduino, I’m still trying to wrap my head around the signals moving between the MicroModem and the radio. How is the MicroModem generating the sounds – the chirps that sound like a fax machine – that are transmitted to the radio?

Hi Markus
Sorry, I had been very busy, and forgot to get back to your comment. The modem is internally synthesising the sounds in software. A loop is running 9600 times per second, and calculates the analog voltage level to output based on what audio frequency the modem should output. Then, this analog voltage is achieved in the real world by using a 4-bit DAC connected to four of the logic pins.

UPDATE:
I think the approach I’m going to take is to use two Arduino units. One will be the MicroModem to handle communications, the other will be the actual flight computer to receive commands and send telemetry. If I can make this work with off-the-shelf parts, I’ll probably look to make a specialized PCB design that incorporates both Arduino units. We’ll see!
— Markus

So… I just realized something from your comments. My goal is to give students a hands-on experience with technology. This is why your hardware approach is the perfect match for what I’m trying to do – it’s an Arduino (which a student could make from scratch if they wanted to) and the MicroModem that a student can solder for themselves. I’d really like that kind of experience for the software side as well. But I see in your comments that the MicroModem coding for the Microduino is a “black box” experience (precompiled firmware.) I know I’m asking a lot, but is there any way I could talk you into sharing your original Arduino IDE sketches? Or some “Microduino Light” sketches with basic APRS functionality? I’d like students to work with the actual files and upload them to the Arduino. This would help students see that rather than “waiting for someone to develop an app”, they can get in and make things happen themselves.
Thanks,
— Markus

I did not use the Arduino IDE environment for those firmwares though, as it is a bit limiting when you’re used to just using a plain old GCC toolchain.

But I absolutely understand the appeal of the Arduino IDE, so that’s why I wrote LibAPRS. It’s a library that can be added to the Arduino IDE, that contains all of the heavy-lifting code for modulation/demodulation, line coding, DAC output and so on. That way you can just code actual programs, and not worry about the really complicated stuff. Here’s info on the library: https://unsigned.io/projects/libaprs/

I think that will do what you want. The students can use a standard Arduino Uno or similar, and solder all the MicroModem components on a separate board, that can then be connected to the Arduino, and they can write code and upload to the completed modem from the Arduino IDE 🙂

since i am interested in the code of your micromodem (i own one), but i am not very skilled in
programming, i have a fundamental question:
Nearly all Atmega328-based modems (trackers) use one digital out pin for the AFSK.
I know, that this is done by performing a PWM with a sine table.
Why are you using 4 pins and how is it done ? Is the Atmega328 working as a kind of 4 Bit DAC ?

Is it possible to explain to me ? Normally my world is hardware – not software 🙂

Hi Micha!
Yes, the four pins are used as a 4-bit DAC, you are exactly right. It yields a higher quality signal than just using PWM on one pin. The modem is synthesising the correct frequencies for the AFSK signal in software, and translating to analog values through the 4-bit DAC at 9.6KHz sample rate. Hope that makes it more clear!

Hi Mark,
Another question… I’m building the MicroModem from scratch. Rather than using a MicroDuino, I’m using an Arduino Mega, since it has the extra pins. Can you give me an exact list of what files (APRS.h, AX25.h, etc) will need to be included in my Arduino sketch? What is the syntax for sending and receiving a message coming from my radio?
Thanks,
— Markus

Hi Mark,
I have all the components and am starting to assemble them on a breadboard. I’m using ../ModemMicroduino/Modem.sch as the schematic. However I’m having some difficulty with the layout. There are places where the traces cross and they have a dot, indicating that the traces are connected – such as where R9 meets D3. However there are many other places where it’s not clear if the traces touch or not – such as R1, R2, R3, and R4 – there are two places where traces cross on their way to C1. Would it be possible to get an updated schematic that has a dot wherever the traces connect?
Thanks,
— Markus

Hi Mark,
Sorry to be a pain but I really want to get this up and running! I need some additional information regarding how to connect the MicroModem to the radio. I’m looking at the three connectors for the 2.5mm plug (sleeve, ring, tip) and the three connectors for the 3.5mm plug (sleeve, ring, tip.) I’m also looking at the schematic which has three “Radio” lead, one “PTT+” lead and one “PTT-” lead. Can you tell me what lead should be connected to what connector on each of the plugs?
Thanks,
— Markus

The pin options can be a little confusing, since it’s made to support as many different radio types as possible. I’ll explain it in general terms here, if you let me know what radio you use, I can probably provide more specific info.

The “AUDIO_IN” and “AUDIO_OUT” pins are pretty easy, AUDIO_IN is connected to the speaker/headphone output of your radio. AUDIO_OUT is connected to the microphone input of your radio. If your radio has a dedicated data port, use the in/out pins of that.

For the PTT part, there is a variety of options. There is one pin just labeled “PTT”. This is a 5V logic signal that is turned on when the modem requests PTT. So just before the modem starts transmitting, this pine goes from 0V to 5V, and stays at 5V during the entire transmission. Some radios have a “direct” PTT input like this (mostly mobile and base station radios, and almost anything with a dedicated modem or data port).

The other options is using the pin labeled “PTT_V+”. This option is mostly for use with handheld radios. Some radios supply a positive voltage on a pin of their headset connector, and when this pin is connected to ground, the radio will open the transmitter. Think of it as a simple push-button on a headset being pressed, and shorting the positive voltage to ground. The radio detects this, and opens the transmitter. As stated above, most handheld radios use this method. You just find what pin your radio supplies this voltage on, and connect it to the “PTT_V+” port of the modem. When the modem requests PTT, it will internally short the PTT_V+ port to ground, and the radio will open up the transmitter.

As a last resort, you can use the modem by using your radios VOX function, but I really don’t recommend it, since “real” PTT is much more stable and performs better.

Hi Mark,
Thanks for the info – very helpful to have that background! I’m tinkering with three radios – a Kenwood TH-D7, a Baofeng, and a Yaesu FT-2800m. I’m working off the schematic you have posted at http://unsigned.io/wp-content/uploads/2014/11/Schematic.pdf – specifically the pin-outs that seem to be related to the radio connections. I see a “Radio” block, containing pin-outs for “Line_Level_In”, “Mic_Level_Out”, and “Ground”. I see the “PTT+” block containing a pin-out for “PTT_V+”. I see the “PTT-” block containing a pin-out for “Ground”. I need to figure out how these connect to my plugs: 3.5 mm Sleeve, Ring, Tip and 2.5 mm Sleeve, Ring, Tip.
Thanks,
— Markus

Yup – building it myself. The hope is to be able to do this with students so they can build the electronics more or less themselves so they can see that not everything is a “black box” and they can actually make things.
— Markus

That’s right, the schematic you are looking at is the old “DIY” schematic, it is a bit simplified, and only has the pins “PTT+” and “PTT-“, not exactly like I described it in the above. You can add the logic level PTT signal like in the “full” MicroModem, by looking at the PTT schematic here: http://unsigned.io/wp-content/uploads/2014/12/Schematic.pdf

Since you’re going to be using a variety of different radios, I’d really suggest you familiarise yourself with how the PTT function works on the different types, then it’ll be easy to know how to hook things up for any radio. Also, a google image search for something like “[radio name] ptt pinout” will yield a lot of help in knowing what pins are what on various radios!

Hi Mark,
Thanks for the info! since I’m working with the “old DIY schematic”, I’d like to stick with that. (I have all the parts picked and installed on a breadboard at this point.) I’ve also been studying your YouTube video for this. (https://www.youtube.com/watch?v=L-LeizF6ixY&t=82s)

Basically, I feel like I understand the general schematic, but I’m having an “apples to oranges” moment trying to understand what part of your circuit connects to what plug going into the radio. If I focus on the Kenwood unit, I can see the schematic for the speaker and mic plugs. (http://manual.kenwood.com/files/TH-D7-English.pdf – see page 96).

I just need a list of what part of your circuit connects to what part of the plug (tip, ring, sleeve) for each of the two plugs (mic and speaker).

Hi Mark,
Thanks for the info! since I’m working with the “old DIY schematic”, I’d like to stick with that. (I have all the parts picked and installed on a breadboard at this point.) I’ve also been studying your YouTube video for this. (https://www.youtube.com/watch?v=L-LeizF6ixY&t=82s)

Basically, I feel like I understand the general schematic, but I’m having an “apples to oranges” moment trying to understand what part of your circuit connects to what plug going into the radio. If I focus on the Kenwood unit, I can see the schematic for the speaker and mic plugs. (http://manual.kenwood.com/files/TH-D7-English.pdf – see page 96).

I just need a list of what part of your circuit connects to what part of the plug (tip, ring, sleeve) for each of the two plugs (mic and speaker).

Hi Markus
I can understand that diagram on page 96 can be a little hard to decipher, if you’re not used to it 😉 Here’s a simplified connection diagram I found by googling “kenwood tnc pinout”: http://www.mfwright.com/KenwoodTHF6toKPC3.gif

That should make it absolutely clear what goest where. It’s the same way for 99% of all radios that use the Kenwood style connector. The PTT pin connects to the PTT_V+ pin on your modem.

Going tho. the tread, I want to be clear, before I place the order on Micro Modem
I use YAESU,FTM100DR, which has 10pin data port..
May I know , the connections diagram from PC – Modem – Radio..and want to use the Modem for Packet transmission AX.25
Thanks

Hi Mark – apologies if this is a repeat – the website wasn’t posting my note so I sent it again.

Thanks for the info! since I’m working with the “old DIY schematic”, I’d like to stick with that. (I have all the parts picked and installed on a breadboard at this point.) I’ve also been studying your YouTube video for this. (https://www.youtube.com/watch?v=L-LeizF6ixY&t=82s)

Basically, I feel like I understand the general schematic, but I’m having an “apples to oranges” moment trying to understand what part of your circuit connects to what plug going into the radio. If I focus on the Kenwood unit, I can see the schematic for the speaker and mic plugs. (http://manual.kenwood.com/files/TH-D7-English.pdf – see page 96).

I just need a list of what part of your circuit connects to what part of the plug (tip, ring, sleeve) for each of the two plugs (mic and speaker).

Hi Mark,
Thanks for the info! I’m just a little confused about the diagram you sent me. It has four leads (Mic, PTT, Spkr, Gnd) but your schematic has six leads (PTT V+, Gnd(1), Line Level In, Gnd(2), Line Level Out, Mic Level Out.) Can you tell me what connects to what? It’s a Kenwood radio, so can I assume:
3.5mm (Sleeve) PTT PTT V+
3.5mm (Ring) Mic Mic Level Out
2.5mm (Tip) Spkr Line Level In
2.5mm (Sleeve) Gnd Gnd(1) and Gnd(2)
Is that close?
— Markus

Hi Mark,
I think I have the hardware all set for the MicroModem!
Now I’m moving on to the software. I see that you have some firmware files available. However because I eventually want to do this with students, I’d like them to use the Arduino IDE, since they’ll be using that for uploading other kinds of sketches to their Arduino. Therefore, can you tell me which files I’ll need and what sketch I need to upload to the Arduino to complete the process?
Thanks,
— Markus

My suggestion would be to start off with one of the premade firmwares, just to test that the hardware is all working. The “SimpleSerial” version of the MicroAPRS firmware is very easy to communicate with over a serial console, it has a text driven interface with an interactive menu and help.

Once you know the hardware is OK, you can use LibAPRS (look in the “Software” section of my site) to easily program sketches in the Arduino IDE that can send and receive packets. LibAPRS takes care of all the heavy lifting of modulating, demodulating, packetising, checksumming and so on, and presents a simple API to send and receive data. There’s some included examples in the library to get you started.

Hi Markus
No, you don’t need an ISP programmer! Just upload it to the board over USB with the avrdude program. I personally find using avrdude easiest, especially on Mac and Linux, but if you’re on Windows and would rather like a GUI, there’s a free program called “XLoader” which you can use as well.

Hey Mark – Success! I still have a long way to go, but tonight I loaded the firmware and when I entered stuff into the serial monitor, it keyed the radio and transmitted! So I’m on the right path. Thank you for your patience – both over the past couple months and the questions still to come. Much appreciated!
— Markus

Hi from Istanbul, TA2IBT.
I’m a Search and Rescue member and responsible for communications. We need a communication module for teams comm. We can use PC-micromodem-radio combination for chat as youtube video : (https://www.youtube.com/watch?v=fWjoXkWOHYE).

We need something like a two way pager. We give pagers to our volunteers. Each pager has ID coded. In emergency situtation, we want to see where they are, are they active or passive for duty (they select) and communicate with all (send message to group). We maybe connect with phone (bluetooth) to send and receive messages.
– Send active APRS position
– Receive active APRS positions
– Send message
– Receive message

Hi Mark,
If I may, a small piece of feedback from someone who doesn’t have an engineering background but is willing to tinker until everything goes right. I absolutely *love* that you have something people can build themselves from scratch. As you move on to new versions of your board, I would ask that you keep the “do it yourself” option up to date or even expand it. It would also be really handy if the schematics continue past what you currently have to include wiring all the way to the plug. (I understand you can’t do this for all radios, but I think if you did it for just one radio, people like me could use that and adapt it to whatever radio we’re using.) Now that I have a functioning breadboard – and all the notes I’ve made about the journey to get to this place – I’m looking forward to tinkering over the course of the winter!
Thank you again – for your resources, your patience, and your willingness to answer questions!
Regards,
— Markus

Hi Markus
Thanks very much for your comments and suggestions, I appreciate it. I agree that the DIY versions and resources should be kept more up-to-date. It’s something I’ve also wanted to do, but since I don’t really know how many people still use it, I’ve prioritised it further down a very long list of what I want to do. All of unsigned.io is basically a one-man operation, and unlike many others who just have a fab in China do all production, I actually produce all the hardware myself in my small workshop in Denmark. So between design, production, programming software and user support, it’s a constant balancing act of time. That being said, I will definitely try to get some time in to update the DIY instructions here in January or February.

Thanks a lot Markus, I will probably take you up on that! It would be a very great help! I am currently working on the final design of a new modem coming out soon, and after that, I will get in touch with you about this.

This sounds great – can’t wait to see the new modem! If I may… playing around with APRS stuff this week, I’m starting to understand about telemetry and how it’s displayed on APRS.fi. It would be super cool if you could include a couple sensor inputs in your new design.
— Markus

You’re not the first to request that, so there is now 4 user IO pins on the modem, that can be used as digital inputs or outputs, or analog inputs. There’s also free UART port that can communicate with whatever you’d like, and expansion ports for GPS and Bluetooth LE modules on board.

The PTT circuitry has been much improved, and four different PTT styles (should cover 99.9% of radios) are now selectable just by moving a jumper on the board.

Lot’s of software improvements as well. The modem is now both AX.25 and Ethernet compatible, and supports 300, 1200 and 2400 baud AFSK, selectable in software.

You’ll also notice there is now an SD card slot, useful for many things 🙂

Ok Mark – time for the next leap in my learning! I have implemented the serial firmware on the open source MicroModem, as we’ve discussed. Now I want to take the next step of building my own firmware. I’m guessing I need some libraries, but not sure what I need beyond APRSLibrary. I’ll see what I can put together, but suggestions and cautionary tales welcome!
— Markus

Hi Mark,
Another question – I’m using your file Basic_usage with the make-it-yourself modem. I ran the pre-compiled firmware and was able to make it work correctly. However the Basic_usage sketch is behaving oddly. I put in the necessary information (my callsign, destination callsign, etc.) and it will transmit a packet. However when it does so, the two LEDs both light dimly. The radio transmits for what seems like a long time. When it’s done transmitting, there is a very brief pause before it tries to transmit again. This doesn’t seem right. Is this something you’ve seen before?
Thanks,
— Markus

To add some detail – I’ve tried this with both a Baofeng and a Kenwood D-7 and I get the same response. If I run the sketch with no radio attached, one of the LEDs comes on which seems to correspond to a transmission. As soon as I connect the radio, it behaves as noted above. This is set with the ADC at 5v. When I change the ADC setting in Basic_usage to 3.3v, the behavior is different when connected to the radio. The LED I assume is the transmit light comes on fully (no dimming) at the same time the transmit light on the radio comes on. However it doesn’t key the radio. Not sure what’s going on here…
— Markus

Well OK! So now it’s behaving appropriately, I have no idea why. Something else I’ve noticed – the serial monitor only contains garbage characters. Will tinker with this more and see what happens.
— Markus

Time for “Name That Function” in the “Basic_usage” file! There is a function called “processPacket()” called at the end of the file. I can’t find this function anywhere, even in Internet searches. Any idea what’s being called?
Thanks,
— Markus

As the comments state just above the function definition: “Here’s a function to process incoming packets. Remember to call this function often, so you won’t miss any packets due to one already waiting to be processed”

As you can see in the code, the processPacket() function formats and prints out the received packet to the serial monitor. You might have noticed that there is also a aprs_msg_callback() function at the top of the file, that gets called when a packet has been decoded. So why not just print out stuff directly from this function? Why does the aprs_msg_callback() function simply copy the packet to another memory location, and set the “gotPacket” flag to true?

As you can read in the comments just above the function, the aprs_msg_callback() function will get called from within an interrupt. That interrupt needs to run 9600 times a second, so you only have about 0.1 milliseconds to execute code in each interrupt run. Printing out to the serial terminal takes a long time, so we need to execute that from the main program loop. That way the interrupt can, well interrupt, the slower running code, and everything will work. If the serial printing was being executed from within the interrupt code, demodulation and decoding would not be able to work while the packet was being printed out.

I highly encourage you to read through all the code in the Basic_usage example, and all the comments, a few times, from end to end. It should answer most questions 🙂

It would be awesome if we could work together at some point on improving the documentation for all of this, as you suggested. I’m primarily a programmer, not an educator, so while I try to make things as clear as possible in the documentation, it doesn’t always work 😉

Well I feel a little silly now… I did look through the whole file, and even used the search functionality. Not sure what was going on but thanks for the clarification! And yes, I’m up for helping out however it’s handy, particularly during the summer when school is out of session.
— Markus

A couple more questions about the “Basic_usage” file – neither of them about things that aren’t working:
1) On line 18, there are comments that start out, “You always need to include this function…” – can you talk a little more about what function this is referring to?
2) On lines 28 and 29, it talks about printing info, ending in “… from your main loop, like this:” – was there supposed to be something else there? The next line of code talks about setting the value for “gotPacket” but doesn’t deal with printing.
Apologies if this feels like I’m picking at small details, but I’m still learning how this all goes together and need to make sure I understand things correctly, though I’m sure this is one of those “everyone else gets it” items… 😉
— Markus

The comments starting on line 18 refers to the aprs_msg_callback() function. The aprs_msg_callback() is not called by the user, therefore you won’t find a reference to it inside the “Basic_usage.ino” file. Rather, the library itself calls back to this function when a packet has been decoded.

No, there was not supposed to be something else in there 😉 Try reading my previous comment again, and specifically the part starting with “So why not just print out stuff directly from this function?”.

As mentioned before the aprs_msg_callback() will get called from an interrupt. You can’t do anything that takes more than approximately 0.05 milliseconds inside the aprs_msg_function(). If you’re unsure exactly what I’m talking about when I say “interrupt”, try to read up on that topic. I know it’s a bit daunting when coming purely from the Arduino environment, which abstracts those things away, but you need at least a basic understanding of how an interrupt works, to understand why the code in the example is set up as it is.

To try and sketch it out, the aprs_msg_callback() function will not print anything out itself. It will just do two very simple things. One, copy the contents of the packet to a variable that the main program has access to, and two, it will set the variable gotPacket to true. That’s all.

Inside the programs main loop the processPacket() function is called. Inside the processPacket() function, there is a check to see whether gotPacket is set to true. If it is, the processPacket() function will print out the info.

If you can explain to me why we have to make this arrangement, you will have understood the code, I think 🙂

Hi EJR
While I have not tested it with Winlink specifically, it will probably work. One thing that might be a problem is that MicroModem does not have enough RAM to hold a long queue of data to be sent out in its internal memory. If Winlink uses it’s own flow control system, that should not be a problem though. If you need a higher-performance modem, you might want to wait a short while until OpenModem (https://unsigned.io/wp-content/uploads/2019/01/P1080689-e1548774569559.jpg) is released. It is much more powerful, can handle large amounts of data in queue, and has many new features. It will be available very soon.

Could you let me know the exact link to the firmware file you used? Also, please check that the potentiometer on the modem is set correctly! If it is turned all the way to one side it will be almost silent, and hard to measure on the scope!

I love and use your midi Katapult to create a simple lightmap for my launchpad while DJing with serato. It’s the only way I’ve found to create lights while not using Ableton. I’d like to upgrade to the Mk2 Launchpad and would like to pay for your time to make the software work on the new launchpad. Is that something you’d be able to do? I DJ as ‘Hot Dub Time Machine’ (www.hotdubtimemachine.com) here’s a photo of the app being used: https://www.dropbox.com/s/xh9cd7mhy3dktgo/re%20output%20%28101%20of%20141%29.jpg?dl=0

HI
After the realization of several digipeaters based on TW Icom and Microsat digipeater I want to realize an autonomous digitpeater powered by solar panels so very low consumption.
In addition, the reception site is very used by the vhf and to avoid any remark the reception will remain in 144.8 but the emission (300mw) will be in uhf to my igate.
To do this I intend to use 2 DRA 818 one in reception and the other in transmission uhf the modules are sold by SV1AFN and already include harmonic filtering and audio.
In addition to your module must I program 2 micro .. to drive the rx module and tx module?
Or your module has the ability to drive the 2 DRA, in addition to its function of digipeater.
Thank you Best regards
Roger Van Klaveren / 3A2NG

Hi Roger
You could use two MicroModems connected back-to-back over the serial connection, one connected to each radio module. Or you could use one module connected to both VHF and UHF radio modules, and then use the experimental digipeater firmware. Be aware that you need to configure and compile the digipeater firmware yourself at this point, and that it should still be considered as beta. It is in use several places, but there might still be undiscovered bugs, so be aware of that 🙂