KT-8900D Review Follow-up #1

This is a follow up to A Brief Review of the KT-8900D

Testing Turn-around Time

One of the key metrics when evaluating a radio for packet use is turn-around time.  This is the time it takes for the radio to switch from transmit to receive.  The turn-around time for a packet radio needs to be fast in order to hear responses from the other packet stations.  Most packet stations and digipeaters will reply within a few tens to a few hundred milliseconds from the time it received the packet.  When a radio takes more than 50-100ms to turn around, it will be difficult to catch the start of the packet,  sync with the preamble and decode.

Turn-around time has not been an issue for ham radios for quite some time.  The turn-around time for most modern ham rigs is very fast, typically well under 100ms.  For reference, the turn-around time for the Kenwood TM-V71A is about 20ms.

Turn-around time has only become an issue again recently with the advent of RDA1846-based radios.

Test Setup

To test turn-around time, the KT-8900D was connected to a dummy load and to a Jetstream power supply.  It was powered on and set to low power.  STE, RP-STE and RPT-DL were turned off.  The unit’s microphone was plugged into its RJ-45 socket.

To perform the test I set up a test harness on a breadboard.  I plugged one end of a cable into the radio’s rear 3.5mm speaker/mic connector and the other end into a jack mounted on the breadboard.  I connected the sleeve of the jack to ground and connected the scope’s channel 1 to the audio output and channel 2 to the PTT line.

The PTT line sits at -3.3V and is grounded to trigger PTT.  I set the scope to trigger on the downward edge of the PTT signal (CH2).  I triggered PTT by manually shorting the PTT signal to ground and by using the hand-held mic.  The hand-held mic gave the best results, with no bounce and lower turn-around time.

I steadily increased the time base on the oscilloscope starting from 1ms until I was able to capture the start of the audio signal.

The Results

So here is the horrible truth about the KT-8900D turn-around time.

700ms turnaround time.  This radio isn’t going to just miss the start of a packet — it’s going to miss the entire thing.  This is bad.  Really bad.

This is worse than the Baofeng UV-5R, which has a measured turn-around time of 300ms.

This radio is wholly unsuitable for packet work, including APRS.

A Brief Review of the KT-8900D

Over the years we have received a few questions about inexpensive mobile rigs for use with our TNCs.  Mostly what people are after are the cheap Chinese radios that can be had for around $100.  I have never been keen to buy one of these Chinese radios because either they are cheap and incredibly bad or they get decent reviews, cost almost as much as the respected Japanese brands, yet are still lacking important features such as dual receive and a MiniDIN-6 data port.

This review isn’t about one of the more expensive Chinese mobile radios — it is about a $99 radio (the QYT KT-8900Dmobile radio) and my very brief experience with it so far.  And when I say brief, I mean it.  I’ve had it in the shack less than 6 hours as I write this.

I should make it clear why I wanted to review this radio.  It has one standout feature that all other radios in this class lack: a 3.5mm jack in the back (link to image) with audio in, audio out, and PTT.  It’s not a standard MiniDIN-6 data port, but it is something we can work with to connect a TNC.

In the 6 hours I have had it, one thing is abundantly clear.  The radio is deaf on 2m.  Stay tuned though… we have a bit of a surprise below and we’ll learn a few things along the way.

Setup and Testing

I connected the radio to my Jetstream JTPS35MCMA power supply.  The radio comes with a universal 12V accessory plug connector and the Jetstream has an 12V accessory power port.  I then connected the radio to my DIamond X6000A base station antenna.

I turned on the KT-8900D and tuned the receiver to 144.390.  I could hear a few APRS packets coming through but it wasn’t sounding very good.  I should be hearing a lot more packets, and the packets I could hear should be a lot clearer.  I went through the menu and turned off all the various features that needed to be off and left the radio on with the squelch open to listen.  If you are familiar with the Baofeng menus, you’ll be right at home with this radio.  The similarities between the two are striking.

One item of note is that the user interface on the KT-8900D is challenging.  The radio uses a rotary encoder that doesn’t seem to do a good job of detecting the direction of rotation.  It makes navigating the configuration settings at first a confusing experience, and then a frustrating one.  It randomly jumps backwards instead of stepping forward through the menu items.

With the radio monitoring APRS traffic in the background I made a custom cable by snipping the end off of a 1 meter straight-through 3.5mm TRRS male to male cable and soldering on one of our 3.5mm plugs to match the pinout of the radio with our TNC.

A few minutes later I plugged a prototype TNC I’ve been working on into the radio, went through the config app to get the audio settings adjusted, then let it start decoding while I went off and had lunch.

The 3.5mm jack on the radio is buried pretty deeply in the metal case, with a rather narrow opening.  If the molded connector on the cable I used was any wider, it would not have fit.  The 3.5mm connector I attached to the cable was too wide and would not fit in the hole.

I came back about an hour later and had a total of 3 packets decoded.  I should point out at this point that I can decode anywhere from 4000 to 8000 packets a day depending on the weather and troposphere from my Kenwood TM-V71A or my Yaesu FT-991.  That’s about 170-330 an hour — with 200 an hour about typical.

Some background information…

I’m in Chicago.  There is a lot of out of band RF here.  It is a tough environment in which to evaluate a 2m receiver.

The KT-8900D is another one of those radios from China that covers 136-174Mhz on VHF built primarily for the Chinese domestic commercial market.  And just like the ubiquitous Baofeng HTs and virtually all radios in this price point, it uses an RDA Microelectronics RDA1846S chip for modulation and demodulation.  This chip performs horribly in an RF-rich environment.  Unless you have a very narrow filter on the receiver front end, it will desense in an environment like this.  Virtually all Chinese radios of this caliber use this chip and they all suffer to some degree from this same problem.

The RDA1846 was designed as a low-cost solution for cheap bubble-pack FRS and MURS HTs, not for mobile rigs.

This problem does not happen with well designed superheterodyne receivers.  But those cost more money to build.

Well that sucks.  What can we do about it?

I have a notch filter from PAR Electronics in the shack that I purchased a number of years ago to try to help with some out of band interference.  It’s been sitting on a shelf unused for quite a while.  I thought — what the heck, what can it hurt?  So I attached the filter.

I plugged the filter in and immediately started to see packets being decoded.  The change was incredible.  I let it go for an hour and the packets kept coming in.

Remember kids, the only difference between screwing around and science is writing it down.

So, I needed to get some real numbers.  I fired up Xastir, which will log all of the packets it receives along with a timestamp.  I configured the TNC port for receive only in Xastir.  And it recorded 117 packets in a one our time span.  I removed the notch filter and recorded for another hour.  Zilch. Nada. 0 packets decoded.  I added the notch filter back in. 97 packets decoded in an hour.

You will notice that this is still at least 30% fewer packets than expected from my normal rigs.  But this is a holiday weekend and the atmosphere can do screwy things to VHF propagation, so I need to do a lot more testing — with the Kenwood, and with the QYT with the notch filter.  There’s really no need to test without the filter. The radio is clearly deaf without it.  2 hours and 3 packets decoded in Chicago. That’s UV-5R bad.

Now here’s the real kick in the pants:  the notch filter costs almost as much as the radio.

So, stay tuned.  We’ll post more as we play around with this.

The KT-8900D is essentially a Baofeng UV-5R with a 20W power amplifier.

First follow-up posted here: KT-8900D Review Follow-up #1

Arduino KISS TNC

Create a Mobilinkd TNC on a breadboard for just a few dollars.

The Mobilinkd TNC1 started its life, as with many things these days, as an Arduino project.  It quickly took on a life of its own, first gaining Bluetooth capabilities when I discovered the latent abilities of APRSdroid.  And then gaining a battery and recharging circuitry before finally ending up as a product that could be mass-produced.

But underneath it all is still the Arduino project that it started out as.  With a few minor tweaks to the firmware to remove the Bluetooth and battery bits, the same firmware that runs in the Mobilinkd TNC1 will run on an Arduino.


The TNC doesn’t use Bluetooth, so you cannot use it with APRSdroid, but you can use other packet and APRS software on your computer over the Arduino’s USB serial port.

Shopping List

Here are the things you will need for this project:

  • Small Breadboard (IB401 w/Jumper Wires – $5; Amazon)
  • Arduino Nano v3 (Generic Arduino Nano v3.0 – $12; Amazon)
  • 10KOhm Resistor (Qty 3)
  • 100KOhm Resistor
  • 1KOhm Resistor
  • 2.2KOhm Resistor (maybe)
  • 10nF Capacitor
  • 100nF Capacitor
  • NPN Transistor (PN2222 or equivalent)
  • 3.5mm 4-pole jack (SparkFun BOB-11570 – $4)
  • TNC cable for your radio (~$10; Mobilinkd)
  • 3.5mm 4-pole extension cable (optional but recommended – $7; Amazon)

The resistors, capacitors and transistor cost just a few cents in total if you have them lying around.  Otherwise you can find a various starter kits that include the breadboard and a set of electronic components for around $20.

You can skip the 4-pole connector and wire a cable directly into the board if you want to save yourself a few bucks.

You will also need a computer (Linux, Windows or OS X) and a mini-USB cable to load the Mobilinkd firmware onto the Arduino and to run the APRS or packet software.

Getting Started

Take a look at the breadboard.  The pin rows are numbered from 1 to 30.  And the pin columns in the middle are labelled “a” through “j”.  There are power rails along either edge.  We will only be using the power rail closest to the “j” column for this project (the top two rows, red and blue,  in the diagrams below.)


Plug the Arduino Nano into one end of the board.  The Arduino pins should start at row 1.

Breadboard TNC_bb_1

3.5mm Connector

Plug the 3.5mm connector into the other end, in column “a”, pins 27-30. The SparkFun connector will facing out the rear of the breadboard.

(The pinout on the SparkFun connector is different than the TRRS connector that I used in the picture at the top of this article.  Some of the parts in this tutorial will be in different places on the board than what is shown there.)

Breadboard TNC_bb_2

(Big shout out to Rick Waldron for the BOB-11570 connector component for Fritzing.)

Just note the following:

  • Sleeve is ground.
  • Ring2 is audio out (TX)
  • Ring1 is PTT
  • Tip is audio in (RX)

PTT Circuitry

Plug the transistor into column “a”, rows 21-23.  The flat part of the transistor is facing the nearest rail.

  • Emitter in a:21
  • Base in a:22
  • Collector in a:23

Run a wire from e:23 (Collector) to the negative rail (Ground).  Plug one end of the the 1KOhm resister into e:22 (Base) and the other into g:22.  Run a wire from j:22 to j:3 (Arduino D10) .  And then run a wire from e:21 to e:28 (3.5mm Ring 1).

Breadboard TNC_bb_4

PTT (Alternate)

If your radio does not use a separate PTT signal, you will need one additional component.  You will need 2.2KOhm resistor.  Instead of a wire from e:21 to e:28, you will need to plug the 2.2KOhm resistor from d:21 to d:17, and then run the wire from e:17 to e:29.  This multiplexes the PTT signal on the audio output line.  If you are using this with an Icom, Yaesu or Alinco HT, this is likely what you need.

Breadboard TNC_bb_4b

Audio Output

The TNC generates audio using PWM (pulse-width modulation).  This is filtered by the radio’s audio circuitry into a nice smooth audio waveform.

Plug the 100nF capacitor into e:29 (3.5mm Ring 2) and f:29, jumping the middle of the board.  Plug the 100KOhm resistor from g:29 to g:25.  Connect a 10KOhm resistor from j:25 to the negative rail (Ground).  Then run a wire from i:26 to i:7 (Arduino D6).

Breadboard TNC_bb_5

The two resistors form a voltage divider that takes the 0-5V audio output and reduces that to 0-500mV.

Audio Input

The TNC uses the ADC on the Arduino to capture the audio input, which is then decoded.

Plug the 10nF capacitor into e:27 (3.5mm Tip) and f:27, jumping the middle of the board as we did with the audio output.  With the remaining two resistors, plug one into j:27 and the negative rail (Ground), and the other into i:27 and the positive rail (5V).  Be careful not to short the resistors.  Run a wire from h:27 to a:4 (Arduino A0).

Breadboard TNC_bb_6

In case you are wondering, the pair of resistors are there to add a 2.5V DC offset to the audio signal.  This is needed because the audio signal comes in at about +/-1V.  The ADC on the Arduino can only handle input voltages between 0-5V.  With the offset, we get an audio signal that varies from 1.5-3.5V.

Power & Ground

Run a wire into a:12 (Arduino 5V) into the positive rail (5V).  Run a wire from i:12 (Arduino GND) to the negative rail (Ground) and from a:14 (Arduino GND) to the negative rail.  It is always a good idea to tie all of the ground connectors to the ground rail.  Finally, run a wire from e:30 to the negative rail.  This ties the 3.5mm connector’s sleeve to ground.

Breadboard TNC_bb_7


That’s it for the hardware!  Go through the instructions one more time.  Make sure the wiring matches and that there are no shorts (easy to do with the bare wires on the discrete components).  If everything looks OK, we are ready to proceed to uploading the TNC firmware.

Firmware Installation

For this you will need  a program called “avrdude” and the firmware from the Mobilinkd GitHub site.  These instructions are going to assume that the firmware is being installed from a Linux host, but the process is very similar on Windows and Apple OS X.  The major difference is that “avrdude” is available as an easily installed component of most Linux distributions.  Getting and installing avrdude for Windows or OS X is a little more involved.

Download the firmware from the GitHub site.


You should have a file called “mobilinkd-473-arduino.hex”.

Plug the mini-USB cable from you computer to the Arduino.  Find the USB serial port being used.  It will typically be /dev/ttyUSB0.  On my computer it is /dev/ttyUSB1 because another USB device is plugged in.

Run the following command to upload the firmware:

avrdude -c arduino -p m328p -P /dev/ttyUSB1 -b 57600 -U mobilinkd-473-arduino.hex

You should see the TX/RX LEDs flash for a bit as the firmware is uploaded, and you are done.

You now have a fully functional KISS TNC with a USB serial port.  It has PTT signalling that, depending on how the circuit is configured, will work for just about any radio.

Leave the cable plugged into the TNC because this is how your computer will be communicating with the TNC.

Connect Your Radio

Before plugging in your radio, please be careful with RF around computers and in your shack.  The wires on the breadboard and the leads on the components are all small antennas.  It is best if you have an external antenna, keeping the RF well away from you work area.  Or you can use a dummy load while testing.  If you have neither of those things, please at least set your radio to low power.

Plug the extension cable into the 3.5mm jack on the breadboard.  Plug your TNC cable into your radio, making sure it has a ferrite bead on it.  Then plug the TNC cable into the extension cable.

Running APRS Software

The last step of the process is to run APRS software on your computer.  That is a bit outside the scope of what I had intended for this article.  Xastir is an easy-to-use GUI app on Linux.  Just set your software to connect to a KISS TNC on the same COM port that you used when you uploaded the firmware.  Set the serial port to 38400, 8N1.

If you are on Windows or Linux, you should be able to use the Mobilinkd TNC configuration programs to adjust the TX volume and monitor the RX volume, as well as set the various KISS parameters.

Connection Tracking Hack

This page provides instructions on how to modify the Mobilinkd TNC1 to allow it to track the Bluetooth connection state and to configure the TNC to drop packets when Bluetooth is disconnected.  This is necessary when using the TNC as a digipeater and iGate.

Please note: all TNCs that we currently sell include this feature.  This page exists to help those that purchased their TNC before May 2014.

The Challenge

The Mobilinkd TNC from the factory queues packets indefinitely. That’s great when you walk away from the TNC with your smartphone in your pocket, and then come back a few minutes later. All the packets that were received by the radio and decoded by the TNC get queued in the Bluetooth module and then downloaded to your phone when you return. The only downside is that the packet times are a bit off.

Georg Lukas, DO1GL, the author of APRSdroid, mentioned that, in order to use the TNC as a digipeater, it is important that old packets are discarded. Otherwise it is possible that old packets are digipeated and iGated. This is bad behavior on APRS and affects everyone in range of the radio and possibly the world if acting as an iGate.

It has certainly happened to me while performing routine station maintenance on WX9O-4. I forgot to turn off the TNC while doing an hour of maintenance. When I brought up the APRS system, to my chagrin, a bunch of outdated packets were digipeated and iGated.

How do we make this work?  This wasn’t a consideration when the TNC was designed.

The Solution

It turns out the Bluetooth module toggles one of its pins as the Bluetooth connection is established and dropped. But this pin is not connected to the TNC’s MCU (microcontroller). To make this work, we are going to need to break out the soldering iron!

The BT module uses PIO9 to indicate connection status.  It normally takes the pin high when connected and low when disconnected.

The TNC has an exposed ISP (in-system programming) pad that makes it possible to connect to three otherwise unused I/O pins on the MCU (MOSI, MISO and SCK, or PB3, PB4 and PB5).  We just need to connect the PIO9 pin from the BT module to one of the pads.

After a bit of work on the TNC firmware and the Bluetooth module configuration, I found that it is possible to configure the pin on the MCU to read high when not connected and to configure the BT module to hold its pin high when the BT link is disconnected and set it low when connected.  In this way, the only way the pin on the MCU goes low is when both connected to the BT module and the BT link is established.  That allows the TNC to easily detect that it has been modified.

The Upgrade!

To make this work,a few things need to happen:

  1. A 4.7kΩ resistor needs to be soldered be soldered between the PIO9 pin on the Bluetooth module and the SCK pad on the ISP connector.
  2. The TNC firmware needs to be updated to a version that supports connection tracking.
  3. The Connection Tracking option in the firmware needs to be enabled.ConnTrackBoardConTrackFirmwareAnnotated.jpg


You will need a Mobilinkd TNC of course.


  1. 4.7kΩ resistor (1/8 watt)
  2. 2.5mm (.098″) shrink tubing cut to 37mm
  3. TNC shrink wrap


  1. X-acto knife
  2. Soldering iron with temperature control and a very fine tip
  3. Hot air gun (or a hot-air rework station)
  4. Solder braid
  5. Fine solder (.5mm/.020″) or solder paste
  6. Helping hands soldering stand
  7. Diagonal cutter
  8. Needle-nose pliers
  9. Electrical Tape
  10. ESD mat and wrist strap

Please do not attempt this modification if you do not have a good, temperature-controlled soldering iron.


Be very careful of ESD (electro-static discharge).  The TNC can be damaged if proper care is not taken.  Perform the work on and ESD mat and use and grounded wrist strap.


Start by upgrading the firmware to build 464 or later. (A more detailed post on upgrading the TNC firmware will follow.)



Start by removing the plastic wrap from the TNC. Be very careful not to cut yourself or the battery.


Use a sharp X-acto knife.  Start with the hole by the slide switch.  Work the blade toward the near end first.  Then work the blade slowly and carefully towards the far end.  A sharp blade should cut through the plastic fairly easily.  Angle the blade towards the board and away from the battery.


Peel the plastic away from the TNC and discard it.


Unplug the battery from the TNC.  Pull on the plug or pull on the wires near the plug.  Do not pull on the battery.  Put the battery aside.



You will be soldering a 4.7kΩ resistor from PIO9 on the Bluetooth module to the SCK pad on the ISP pad.  The resistor must be sheathed in shrink tubing to insulate it from the circuit board.  Both ends of the resistor will be soldered from the top of the board.


Install a fine tip on your soldering iron and set the temperature to 315°C (600°F).

The amount of solder on the pads connecting the Bluetooth module varies.  You may wish to remove some solder from the PIO9 pad before soldering the resistor to the pad.  Use the solder braid to remove any excess solder on the pad.

Put a 2mm bend at one end of the resistor to form an “L”.  Use the helping hands to hold the resistor on the PIO9 pad.  This is the third pad from the end by the antenna, near the outer edge of the TNC circuit board.  (Refer to the diagram above if unclear which pad to use.)


Solder the resistor to the pad.


Slide the shrink tubing over the resistor.


Bend the resistor over the circuit board and slide the free resistor lead through the SCK hole.


Solder the resistor to the hole from the top.  Do not solder the resistor from the bottom of the circuit board.  And do not use so much solder that it flows through to the other side of the through-hole. Doing either may later damage the battery.


Cut the lead flush to the bottom of the circuit board. It is important that the lead does not protrude through the hole.


Cover the bottom of the pad with electrical tape to help protect the battery when reassembled.  Press down firmly.


If the resistor lead pokes through the tape, the resistor lead is too long.  Do not reassemble the unit in this condition.  Remove the tape and cut the resistor lead flush and try again.


Set your heat gun to 155°C (310°F).  Shrink the tubing.


Attach the battery.  Wait at least 5 seconds then power on the device.

Start the Mobilinkd Configuration program and connect to the TNC.  You should see the “Conn Track” button active.  If it is not, verify that you have the latest version of the firmware installed and the lastest version of the configuration utility.  (The Android verions 0.8.3 is known to work.)

Enable “Conn Track” on the TNC and then exit the configuration program.  You should now find that the TNC receives packets only when the Bluetooth link is established.


The best option for re-assembly is to print or purchase a case!

The Mobilinkd TNC1 case is now a Thing on Thingiverse!  If you have access to a 3D printer, you can print your very own.  If not, we sell freshly printed cases in your choice of Black or White in the store: http://store.mobilinkd.com/collections/kits