Dec 242017
 
Info on how to interface/control ICOM radios via RS-232 port.
File ICOMRS.ZIP from The Programmer’s Corner in
Category Science and Education
Info on how to interface/control ICOM radios via RS-232 port.
File Name File Size Zip Size Zip Type
ICOMRS.TXT 20055 5353 deflated

Download File ICOMRS.ZIP Here

Contents of the ICOMRS.TXT file








Computer Control of ICOM Amateur Gear

Carl Clawson, N7KBV



General Description


Several ICOM products feature a built-in computer
interface connected to a 1/8" phone jack on the rear panel.
However, ICOM gives no information about this interface in
the instruction manuals that I've seen. The information
exists within ICOM, and my dealer managed to get it for me.

This interface, called the "CI-V" by ICOM, is standard
on the following models: 735, 761, 275, 375, 475, and
R7000. Earlier models used the CI-IV parallel interface,
which can be connected to CI-V by ICOM's UX-14 converter.
Models using the CI-IV are the 751, 271, 471, 1271, and R71.
The information I got from ICOM was written with the 735 in
mind, but a listing of a BASIC program to control the R7000
was appended. I believe it will help with the other models,
too. The control codes and data format should be the same
for all of them.

The computer interface allows you to do such things as:

- Set and read the frequency and modulation mode

- Set VFO A, VFO B, or memory mode

- Select memory channel

- Store displayed frequency into memory

- Transfer displayed memory-mode frequency to a VFO

Even without a computer, you can run a cable between
the remote control jacks of two rigs, and whenever the fre-
quency or modulation mode of either is changed, the other
will track it if possible. (If the rigs have incompatible
frequency coverages, like the 735 and R7000, funny things
can happen.)

The interface is bi-directional, using TTL levels on a
single line for sending and receiving serial ASCII data.
You may need an appropriate hardware interface to convert,
for example, RS232 to TTL. (I understand that Commodore
computers have TTL inputs and outputs so that no interface
is needed with them.) I used the Motorola MC1488 and MC1489
chips powered by two 9-volt batteries to interface to my
RS232 line. Appendix 1 lists the pinouts used for this
interface. If you'd rather buy something, ICOM sells the








- 2 -



model CT-17 level converter for RS232.

The interface uses a "carrier-sense, multiple-access
with collision detection" local area network protocol, so
that multiple rigs can be connected in parallel without dif-
ficulty. Thus, you can use the same RS232 line and level-
converter interface to control many rigs. Each rig must
have a unique address, which is set by internal jumpers.
Each model comes factory preset to its own address, which is
04 for the 735 and 08 for the R7000. Appendix 2 has infor-
mation on the jumper settings.

I will use the words "receive" and "send" to refer to
data transmission. Thus a "receiver" isn't necessarily an
R7000; it's any device receiving data from the CI-V bus. I
will use the word "rig" to mean an ICOM product using the
CI-V interface.



Data Format


The rigs send and receive data in variable length pack-
ets, which are formatted as follows:

Byte # Contents

1 hex 'FE' (i.e. 11111110 binary, 254 decimal)
2 hex 'FE'
3
4
5
6-n
n+1 hex 'FD'

The two hexadecimal FE bytes signal the beginning of a
packet, and the FD byte signals the end. is the con-
trol code sent by the computer to the rig, which determines
the action that the rig will take. In some cases, the
receiving rig will include a control code in its response to
the sender; see the section "Control Codes and Responses"
below. is the address of the device sending the data,
and is the address to which the data is being sent.
When a rig responds to a data packet, it addresses that
response to the in the packet. Thus, if your computer
requests a rig to report its frequency, it will address that
report to the computer and other rigs will ignore the data.
(Of course, the computer can lie about its address and trick
one rig into talking to another!) Your computer should use
its own unique, non-zero address on the network. I will
assume in the examples that the computer is at address 02.
There are two control codes that can cause any rig on the
network to respond when sent with =0; I discuss these








- 3 -



below.

Bytes #6 through #n contain any data required by the
control code, in BCD format with 2 decimal digits per byte.
Frequency data is sent starting with the byte containing the
1-Hz and 10-Hz digits. These digits are sent even if they
are not used by the rig, so that the data format is the same
for all rigs regardless of their frequency coverage and
resolution. For example, consider the frequency 25.13244
MHz. This is broken up into two-digit groups:

25 13 24 40

It is then coded in BCD. In other words, consider each
digit group to be a hexadecimal number instead of decimal.
The decimal values of these BCD digit groups are 2x16+5=37,
1x16+3=19, 2x16+4=36, and 4x16+0=64. Now send these groups,
starting with the least significant. The complete data
packet will be, in hexadecimal,

FE FE 40 24 13 25 FD


If you have more than one rig on the network you may
occasionally receive a sequence of 5 bytes of hex 'FC'.
This is the "jammer code" used by a rig to indicate that a
collision has occurred. Each rig, when sending, monitors
the interface. If it does not receive exactly what it sent,
then a collision occurred, i.e., another rig was sending
data at the same time. If a rig detects a collision when
sending a packet, it will wait until the network is idle,
then send the jammer code. A rig that receives this code
will realize that a collision has occurred and ignore the
previously received packet. Because the ICOM remote control
ports are bi-directional, your computer will receive every-
thing it sends, so you can check for collisions from your
computer, too.



Control Codes and Responses


Most of the following codes are addressed to a specific
rig, which addresses an acknowledgement packet to the
contained in the control packet. The first two codes, 00
and 01, can be sent to the "group call address" of 00, in
which case any rig will receive them without sending an ack-
nowledgement. These two codes are sent in this way by any
rig when its mode or frequency is changed by manual control,
and are received by any rig on the network. This allows a
number of rigs to track each other in frequency and mode
without computer intervention. Rigs can be inhibited from
sending and receiving group call packets by an internal








- 4 -



jumper. See Appendix 2 for more details. These codes can
also be sent with a specific, non-zero , in which case
they will be received by the addressed rig even if the group
call function is disabled.

00 Set frequency. See above for format of frequency data.
See code 05 below for more details.

01 Set modulation mode. One or two data bytes are
required to indicate the mode desired.

Data Mode

00 LSB
01 USB
02 AM
03 CW
04 RTTY
05 FM
05 00 SSB (R7000)


02 Report tuning range. No data required. The rig will
report its frequency limits in the format

FE FE 02 2D FD

(Hex 2D is the ASCII hyphen.) According to ICOM, some
rigs report the lower limit first.

03 Report frequency. No data required. The addressed rig
returns its displayed frequency to the sender in the
format

FE FE 03 FD


04 Report modulation mode. No data required. The
addressed rig returns its mode to the sender using the
codes listed above. Rigs with selectable bandwidth
return an additional byte indicating the bandwidth.
The format of the response is

FE FE 04 FD

The bandwidth codes are:

Data Bandwidth

01 Width 1 (widest)
02 Width 2 (narrower)
03 Width 3 (narrowest)










- 5 -



05 Set frequency. The data format is given above. If the
data contains fewer digits than the rig uses, the
digits sent will be changed and the rest will remain
the same. If the rig receives valid frequency data
within its tuning range, it responds with a packet con-
taining the data "FB":

FE FE FB FD

If it didn't like the data, it responds with the data
"FA":

FE FE FA FD

These acknowledgement codes are used by all following
commands.

The 735 responds to out-of-range frequency data by
sending the "FA" acknowledgement and: 1) If the fre-
quency it receives is less than 0.1 MHz, it sets its
frequency to 0.1 MHz, 2) If it received 4 bytes of fre-
quency data that is more than 30 MHz, it sets itself to
30 MHz, and 3) If it received more than 4 bytes of fre-
quency data, the data is ignored.

06 Set modulation mode. If one byte is sent, it sets the
mode per the above table. If two bytes are sent, the
second is the IF bandwidth.

07 Set VFO status. If no data is sent, the rig changes
from MEMORY mode to VFO mode. If data 00 or 01 is
sent, the rig sets VFO A or VFO B respectively.

08 Set memory channel. If no data is sent, the rig
changes from VFO mode to MEMORY mode. If BCD channel
data is sent, the rig changes to that memory channel.

09 Store displayed frequency and mode into displayed
memory channel. No data required.

0A Write frequency and mode from displayed memory channel
to a VFO. No data required.



Examples


I will give a few examples of codes and responses for
the 735. The 735 is at address 04 and the computer is at
02. First, let's find out what's in memory channel 1 (code
08 to set the channel, and code 03 to read the frequency).
Assume the 735 has the frequency 7.12750 MHz stored in
memory #1.








- 6 -



Computer to 735:

FE FE 04 02 08 01 FD

735 to computer:

FE FE 02 04 FB FD

Computer to 735:

FE FE 04 02 03 FD

735 to computer:

FE FE 02 04 03 00 75 12 07 FD

Now let's change the frequency and mode to 14.02500 MHz USB
(codes 05 and 06).

Computer to 735:

FE FE 04 02 05 00 50 02 14 FD

735 to computer:

FE FE 02 04 FB FD

Computer to 735:

FE FE 04 02 06 01 FD

735 to computer:

FE FE 02 04 FB FD

Now store the changed result back into memory #1. This
channel is already displayed, so we need only the store com-
mand, code 09.

Computer to 735:

FE FE 04 02 09 FD

735 to computer:

FE FE 02 04 FB FD
















- 7 -




Appendix 1 -- RS232 to TTL converter


This is an easily built converter that will run your
ICOM gear from a standard RS232 line. It can be built in an
hour or two for about $10. The converter uses two inexpen-
sive, widely-available chips -- the Motorola MC1488 line
driver and MC1489 line receiver. The only other components
needed are a box, connectors, a power switch, and a couple
.01 or .1 capacitors to bypass the power supply leads. I
used two 9V batteries for power. Power for the 1488 can be
+-9 to +-15 volts, and the 1489 requires +5 to +10 volts.
With a suitable DC-DC converter chip and a 78L05 or 78L08,
you could power the circuit off of your 13.8-V supply. Or,
if you're clever, figure out a way to trickle charge two 9V
nicads off of your RS232 line.

The pinouts are as follows:

For the 1488 -

Pin Connect to

1 -V
2 ICOM remote jack center conductor
3 RS232 pin 3 (RD)
7 Ground
14 +V


For the 1489 -

Pin Connect to

1 RS232 pin 2 (TD)
3 ICOM remote jack center conductor
7 Ground
14 +V

Ground pin 7 of the RS232 line and the outer conductor of
the ICOM remote jack, and you're on line.




















- 8 -




Appendix 2 -- Jumper Selections


There are jumpers in the ICOM rigs to set the device
address, baud rate, and to enable the group call feature.
You must look on the schematic to find them. The jumper to
enable the group call feature is called the "transceive" bit
by ICOM, and may be labeled with "TRV" on the schematic.
The others are labeled "DBn" on the 735 and R7000; look for
something similar. The rigs are factory-set to 1200 baud,
transceive enabled.

I have specific information from ICOM on the 735
jumpers, and for the R7000 I have a likely guess based on
the 735 codes and the schematic.

For the 735 -

The jumpers use lines labeled DB0 through DB5 at con-
nector J22 on the PL board. Lines DB0 through DB2 set the
device address. Line DB3 is the transceive enable. The
baud rate is controlled by DB4 and DB5 according to

DB4 DB5 Baud

0 0 undefined
1 0 9600
0 1 1200
1 1 300

The 735 is set at the factory to address 04.

For the R7000 -

The jumpers use lines DB0 through DB7 at connector J17
on the logic board. The address is set by DB0 through DB4,
DB5 is the transceive enable, and the baud rate is set by
DB6 and DB7. The factory address is 08.

If you have any other rig, you can determine its
address by hooking it up to your computer and changing the
frequency or modulation mode manually. You will receive a
group call packet that contains as its 4th byte the address
of the rig.



















 December 24, 2017  Add comments

Leave a Reply