EME Interface

The completed Interface, displaying the Moon position and antenna position. You can also see that auto-tracking is on, the current time in GMT is displayed and the PTT line is not currently active.



One thing that has always bugged me about my current EME setup is that I need to have my shack computer fired up in order to accurately know my current array position(s), especially elevation. Let's face it, there are times that it would be nice to move our antennas and accurately know where they're pointing without having to boot up our computers. And even when we do have it fired up, there are times where we're running some other program (in my case, I prefer to use W9IP's dos version of RealTrak as my EME program) and some incompatibilities exist.

For example, I have a devil of a time running both RealTrak and FFTDSP at the same time under Win98, due to the AD board I use in conjunction with RealTrak. And while it could be argued that it would be simpler to use a 2nd computer (they are cheap these days), my solution was to build a separate interface that allows me to read antenna position with or without RealTrak running.

Besides, I enjoy designing and building these sort of projects.

As it turns out, the microcontroller I used (A BasicX BX-24) also provides an ideal method of handling T/R sequencing switching, so it also performs this function. This allows me to replace my old analog one and combine two separate pieces of equipment into one, integrated unit. It will take an active low PTT signal and provide 4 outputs that are each delayed by 20ms (more on this later). Thanks to John, K0PW for suggesting this idea.

I also wanted this interface to work with some other programs I have, such as Nova for Windows and Wisp to control my rotor's automatically if I so choose. It does so with only 1 IC, one inexpensive LCD display and a handful of discrete parts. While I had most of these things in my junkbox, if one had to buy all parts new it would cost less than $125 to duplicate. This is considerably less expensive than some other products out there.


I use a precision 3 turn potentiometer for determining antenna azimuth position and a 1 turn precision one for elevation, which is a common method used by many EMEers. My azimuth pot is driven via a 3-to-1 reduction chain drive, so one turn of the antenna mast provides 3 turns of the pot. My elevation pot is the usual counterweight driven arrangement mounted to the horizontal boom of the H frame. Both pots are 2% precision (more on this later). Feeding regulated 5 volts to the masthead provides me with:

0 - 5 V for 0 - 360 degrees azmith

0 - 1.25 V for 0 - 90 degrees elevation

All my interface does is convert these voltages into a meaningful readout, accept drive "signals" from various programs and use that to drive the antennas. Of course, manual steering is also incorporated.


In order to prevent premature death of your favorite GaasFet preamp, as well as making sure all the antenna changeover relays have settled before actually generating RF power (at the power levels used for EME, this is not an option), the BX-24 waits for an active low on the PTT input, then switches each output with a 20ms delay between ( the amount of delay is easily changed). When the PTT line goes high again, the above process is simply reversed.


I decided to use a BasicX BX-24 for my project, since I have several on hand. These are complete microcomputers, with RAM, ROM, a serial interface (for programming and debugging) and a Basic interpreter all in a small package. It is manufactured by Netmedia Inc and is extremely compact. Some may ask why I didn't use a PIC for this project instead of the more expensive BX-24. The answer is simple:

  • The BX-24 requires no external RAM, ROM or I/O support. This simplifies the hardware significantly.
  • No special programmer or exotic interface is necessary. The compiled code is downloaded into the IC using just a serial port on your computer. The BX-24 even handles the RS232 translation!

Netmedia Inc. provides free development and programming software. The BX-24 has 400 bytes of RAM, 32K of program PROM, built-in 8 channel 10 bit A/D converters and it can execute 65,000 lines of code per second. It also has a real time clock and can multitask. It's a real powerhouse!

And since this microcontroller is programmed in a form of Visual Basic, this makes for easy program development. Much code between both is portable (with very minor changes here and there) and you can modularize your code as well! It also stores its programs in flash prom, so it is easily and rapidly re-programmable (a blessing during program development) and can be done so 100,000 times.


For this project, I chose an LCD+ display that has lots of extras:

  • High quality 4 x 20 Backlit Super Twist LCD Display
  • 8 10-Bit Analog to Digital Converters (ADCs)
  • 8 High Current Relay Driver Outputs (500mA Each)
  • 4 x 4 Matrix Keypad Interface
  • 256 Backlight and contrast levels
  • Frequency definable Buzzer
  • 8 User Definable Characters
  • 2400 - 57,600 Baud Data rate
  • Built-in Voltage Regulator allows 5 - 15 Volt operation

.All this for $60 US! And it greatly reduces the discrete component count!


Some may question the use of 10 bit A/D conversion, since this only gives a maximum 360/1024 or 0.35 degree accuracy. In reality, the tolerance of the potentiometers used are the bigger factor, but even with these figured in, the total worst case error for this system is closer to 3%. This is more than adequate for all but the most narrow patterned arrays (and certainly more than precise enough for my 4 yagi array).


Looking at the schematic , the first thing you notice is there is only one IC !! This can't be!. Well, remember that most of the work is done in software and all we need to do is convert the analog voltage from the pots into something the BX-24 can understand, display the results on the display, buffer the outputs to drive our rotors and control our sequence timing.

All communications with the LCD is done via a serial comport. This not only provides the readout data, but also commands the LCD unit for controlling the relay drivers. As pointed out earlier, the BX-24 has built-in A/D conversion with 8 channels, and so does the LCD+. I opted to use the one on the BX-24 itself for this project.

The isolation and T/R relays at my masthead are designed to be active only when powered up. In other words, if no power is supplied, the preamp's input and outputs are terminated into 50 ohms and the coax from the station is connected directly to the antenna array. This allows for use should something fail and has the added advantage of terminating the preamp input when the station isn't in use. You can see the diagram here.

The BX-24 also handles my sequencing needs. The control lines for the preamp isolation and T/R relays are normally low, which means the relays are energized during receive and de-energized during transmit.

When the PTT line (which comes from the transceiver) goes low, the BX-24 immediately switches (unkeys) the preamp isolation relays, delays 20ms then unkeys the T/R relays, delays another 20ms then keys the amplifier, delays another 20ms and then finally keys the radio. When the PTT like goes high again (done transmitting), the above sequence reverses. Transistors that can handle several amperes (TIP41) are used for switching the relays and can easily do so without failure.

I usually use W9IP's RealTrak for DOS, which handles my tracking and CW keying needs and I wanted to retain the capability of using that program (which requires a separate DAC board installed in the computer), so I included provisions in my design to do so. Of course you may not want to include these provisions, and the associated parts may be deleted.


Although this project is simple enough to build on perfboard, I designed PC boards for those who are inclined to use that method.

Component placement

Board trace (top)

Board trace (bottom)

Parts list


My azmuth rotor is an Alliance HD-73. I installed a couple of relays in the control unit, and drive them from the interface for clockwise and counter-clockwise rotation. While this rotor isn't exactly heavy duty, I've used it for over 5 years with no problems.

My elevation control is a TVRO style linear actuator, which normally requires 36 VDC. My interface contains the relays used to drive it and, while I only supply it with 24 VDC, it moves my array just fine. One relay switches power to the actuator, while the other controls the DC polarity for UP/DOWN. Nothing fancy, but it works fine. If one wanted, the relays could be replaced with transistors.


When first powered up, the BX-24 initializes the LCD display and sets the A/D converters to a known state. It then commands the LCD+ to send it's A/D azmith data, converts it to degrees and writes that to the display. It then does the same for the elevation data.

The software then checks for data input from the computer (as supplied by Nova, Wisp, etc). If there is no valid data (the software expects to see data in the form of "AZxxx.x ELxx.x"), it simply checks the A/D data again and displays it.

If valid data is found, the software checks the current antenna position against the heading supplied by the computer and, if found to be outside the deadband, the appropriate "relay output" on the LCD+ is pulled LOW and the respective transistor switches the relays to move the rotors as needed. Once the actual antenna heading agrees with the value read from the computer, the rotors are switched off again.

If the PTT line from the transceiver goes low, the BX-24 immediately jumps to the sequence routine and temporarily suspends the tracking until the PTT input line goes high once again. And while the multitasking capability of the BX-24 would make it possible to have it continue to update the display while the sequencer routine is running, I opted not to do this since it results in only a maximum delay of 2 minutes for antenna updates. This shouldn't be a problem while actually operating (the moon doesn't move 3 degrees within a 2 minute period, right?)

After initialization, the program flowchart goes something like this:

1) Read antenna azmith and display

2) Read antenna elevation and display

3) Check for valid data from computer.

4) If no valid data, check PTT input

5) If PTT low, then jump to sequencer routine. If not, go to # 8

6) When PTT goes high, return to # 1

7) If valid data, move antenna to agree with computer data

8) Go back to # 1

You can download the source and binaries here


Obviously, the first thing you want to do is make certain that your pots actually provide a varying voltage for changes in azmith/elevation. I'll only deal with the calibration of my interface; I leave the calibration for whatever program you run up to you (if needed). You need to supply regulated 5 volts to your potentiometers at the masthead.

I know these procedures are ridiculously obvious, but I thought I'd throw them in for good measure :)


Rotate your antenna to its full counter-clockwise position (which will be 0 degrees). Adjust the pot at the masthead for EXACTLY 0 volts.

Now rotate your antenna to its full clockwise position (360 degrees). Your pot should provide 5.0 volts. If it doesn't, rotate the antenna back to full counter-clockwise and double check for 0 volts. It should be possible to adjust the pot for no more than 10 mv error at either end of the range.


Set your antenna to the horizon (0 degrees). Adjust the pot for EXACTLY 0 volts.

Elevate your antenna to 90 degrees and verify your pot is supplying as close to 1.25 volts as possible.

Take the time you need in order to get the above correct and you'll be rewarded with an accurate system.