CAT control via microprocessor

So I have a bit of a new mini-project: I have decided to turn my attention to adding (limited) μ-(microprocessor)-control of my radio to the list of things I am working on.

Arduino Uno

Arduino Uno microcontroller board

This whole idea stemmed from my desire to make a one-off microprocessor all-in-one satellite tracking and Doppler tuning apparatus. Essentially, a dedicated microprocessor would track a selected satellite and then tune the radio’s downlink frequency to match the Doppler shift during the pass. All of this can be done via some Kepplerian elements stored on an SD-card and some moderately sophisticated calculations.

Due to the sad state of amateur satellites (in my humble opinion), I have decided not to pursue the tracker functionality (for now).

Having already done some research on the Doppler tuning portion of the project, I was well aware of what could be done with an Arduino board (I am too lazy to solder a purpose-built board), CAT (computer) control protocols, and the microphone jack of a Yaesu FT-857D radio.

FT-857D mic pinout

FT-857D mic pinout

Yes I could have done the easy thing and decided to use the CAT jack on the rear of the FT-857D but what fun is that? Honestly though, I wanted to keep that port clear for other uses (such as a tuner which may not have a CAT-port pass-thru). While browsing the various Yaesu FT-8*7 manuals, I noticed a little gem on page #60 (PDF page #62) of the FT-897D (not 857!) manual. Also, browsing the function menus (specifically selection #59) indicated:


So long as you do not plan to use the mic, it is possible to pass CAT protocol data to the radio through the microphone port (ie. digital modes!) if you select: CAT in the MIC SEL menu.

RJ45 plug for FT-857D CAT control

RJ45 plug for FT-857D CAT control

To make the appropriate cable, I took a piece of 2-pair telephone cable and connected the RX, TX and GND pins to an RJ45 connector. In the photo, you will also see the yellow conductor connected in the RJ45 plug. This is NOT necessary for the CAT connection, and it will be unused in this example.

The green conductor (let us call it RJ45 pin 1) is connected the RX port of the Arduino (normally that would be pin-0) and the red conductor (RJ45 pin 2) is connected to the TX port (normally, pin-1) while the black conductor (RJ45 pin 7) is connected to any available ground (GND) on the Arduino.

To control the radio, various commands may be issued to the radio using a variant of the Yaesu CAT control protocol. After packet sniffing the serial data, I learned many of the codes which I later found in the FT-897D manual on page #64 (PDF page #66). The commands must be issued as a five-byte serial data packet. As an example, to change the frequency of the radio to 144.390MHz for APRS work, you would issue the command as:

14 43 90 00 01       (the 01 is a “command” byte)

In the standard Arduino development environment, I store the command in a byte array:

// set constant variable to the N.A. APRS frequency of 144.390MHz
const byte aprs[5] = {0x14,0x43,0x90,0x00,0x01};

and then issue that command to a software-based serial port (named rigCat) as follows:

for (byte i=0; i<5; i++) {

which then tunes the radio to 144.390MHz as desired.

Initially, everything was working just fine as it was connected since the FT-857D CAT uses TTL level logic (+5V) and the Arduino is compatible with these levels. Not long after I had some success, the setup stopped working. Now I am in the troubleshooting stages. With 10-hour days at work, I am only interested in short-duration project sprees at the moment. I’ll post updates to the project as I solve the μ-control interface issues.

This entry was posted in Project and tagged , , , , , , , , , . Bookmark the permalink.

3 Responses to CAT control via microprocessor

  1. Actually I was digging around trying to figure out the CAT protocol of sorts. That link to the Yaesu pdf helped some.

    I want to build a transceiver that has a DDS synthesizer controlled by and Arduino to tune. But I wanted to make it so an Arduino can read CAT commands and tune the DDS automatically. So now I’m trying to dig around and see about understanding the commands, sequences, etc. This way I could use much of the software already out there to control my transceiver.

    73, KM4OLT

  2. Ismael, PU1MIB says:

    Hi James,

    Some of the pictures are missing on the page. I’m considering using the CAT interface + the Meter Jack + Arduino to build an antenna analizer, with the Arduino driving the FT857D to sweep thru a range of frequencies, and each frequency step transmit some signal to get the SWR result in the Meter Jack. This result could be relayed to a computer for storage and analysis.

    Would you mind sharing the pictures and the Arduino code?

    Many thanks,


  3. W8FET says:

    Very cool. I don’t have my 857 yet, but I wanted to do something similar with an arduino controlling the radio for APRS bursts when I wasn’t actively transmitting on another frequency.

    Did you make it any further with this?

Leave a Reply

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