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. .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo. Thomas Brown, KA2UGQ BITNET: twb0@lehigh.bitnet Lehigh University Box 855 ARPA: twb0%lehigh@ibm1.cc.lehigh.edu Bethlehem, PA 18015 UUCP: ..!att!twb0@lehigh.bitnet (215) 758-1200 AX.25: ka2ugq@ka2ugq.nj.usa.na (145.01 MHz) Stress: The confusion caused when one's mind overrides the desire to choke the life out of someone who desperately deserves it.