Project tutorial
External S-Meter on Icom Radios with CI-V Port

External S-Meter on Icom Radios with CI-V Port © GPL3+

Add an external S-meter on any Icom amateur radio transceiver that has a CI-V control port.

  • 4,235 views
  • 2 comments
  • 8 respects

Components and supplies

About this project

This circuit uses an Arduino Uno or Nano to send a CI-V command to an Icom radio to ask for signal information, read the answer, convert it and display it on an analog output, where you can connect an analog (Arsonval) S-meter.

It is powered by the Antenna Tuner port on the Icom radio. If your Icom does not have a tuner port, you can use any other port or connector that provides a +12V output (at least 200 mA). An external DC power source can also be used.

If you don't have an Antenna Tuner connector, you can use a PC computer power supply connector, and trim it with cutters to fit the Icom tuner connector.

This project is designed for an Icom IC-7000 transceiver, but it can be adapted to any Icom radio with a CI-V port.

You can use the CI-V "00" universal address on some Icom radios, making this converter compatible with any Icom radio, without changing the CI-V address in the code.

Ferrites are installed on input & output cables to eliminate RF induction. The +12 V DC to the S-meter is not necessary; it could be used to power meter backlight or any other optional features.

The 10 k ohms potentiometer is used to attenuate the signal output (which is too high for most analog meters) and calibrate the analog meter to get a full scale reading with a powerful local signal (+60 dB).

Some other similar projects, using Arduino as a CI-V interface:

https://on7dq.blogspot.com/2017/02/ic-7300-paddle-or-key-easy-solution.html

https://www.qsl.net/on7eq/en/ Click on "projects" button

Code

Icom CI-V S-meterC/C++
// IC7300 Testbed for S-meter readout and other functions
// by Luc Decroos - ON7DQ/KF0CR
// modified & adapted by Daniel VE2BAP, 2018-12-01

#include <SoftwareSerial.h> // for comms to IC7000
#define BAUD_RATE 19200     // CI-V speed
#define TRX_address (0x70)  // HEX $70 = Icom IC-7000
//#define TRX_address ((byte)00)  // $00: Icom universal address (works for all radios).

// serial connection
// RX = Icom radio to Arduino  : to pin 2 via resistor 4k7
// TX = Arduino to Icom radio  : to pin 7 via diode 1N4148, with pull up 10k to Vcc (5V) on tip of 3.5 mm connector

SoftwareSerial mySerial = SoftwareSerial(2, 7); // (RX, TX)

int readCounter; // counts the number of bytes received from the radio
int sMeterVal1;  // stores the most  significant BCD byte containing signal info.
int sMeterVal2;  // stores the least significant BCD byte containing signal info.
int sMeterOut = 11; // External analog S-meter connected to pin 11.

//---------------------------------------------------------------------------------------------

void setup()
{
  pinMode(13, OUTPUT); digitalWrite(13, LOW); // force LED (pin 13) to turn off.

  pinMode(2, INPUT);  // CI-V serial communication from IC7000
  pinMode(7, OUTPUT); // CI-V serial communication to IC7000
  pinMode(sMeterOut, OUTPUT); // set sMeterPin for output
  
  mySerial.begin(BAUD_RATE);
  mySerial.listen();  // only one port can be made to listen with software serial
  // see reference https://www.arduino.cc/en/Reference/SoftwareSerialListen
  while (mySerial.available()) mySerial.read(); // clean buffer
}

//---------------------------------------------------------------------------------------------

void loop()
{
  // read and display S-meter value

  mySerial.flush();

  // start sequence: send "read S meter" command to radio.
  mySerial.write(0xFE); mySerial.write(0xFE); mySerial.write(TRX_address); mySerial.write(0xE0);
  mySerial.write(0x15); mySerial.write(0x02); // Read s-meter , command 15 02
  mySerial.write(0xFD); // end sequence
  delay(20);
  
  // now read info from radio
  int nbChar = mySerial.available();
  
  if (nbChar > 0) {
    for (int readCounter = 0; readCounter < nbChar ; readCounter++) {
      byte byteRead = mySerial.read();

      if (readCounter == 6){
        sMeterVal1 = ( (byteRead/16*10) + (byteRead%16) ); // First byte: convert from BCD to decimal.
      }

      if (readCounter == 7){
        sMeterVal2 = ( (byteRead/16*10) + (byteRead%16) ); // Second byte: convert from BCD to decimal.

        analogWrite(sMeterOut, ((sMeterVal1 * 100) + sMeterVal2)); // Calculate and write the S-meter value on the S-meter output pin.
        delay(20);
      }
    }
  }
}

Custom parts and enclosures

icom_ci-v_-_arduino_external_s-meter_1_-_copie_d3ccibBjYE.jpg
Icom ci v   arduino external s meter 1   copie d3ccibbjye
icom_ci-v_-_arduino_external_s-meter_2_2MlMq3xvm1.jpg
Icom ci v   arduino external s meter 2 2mlmq3xvm1
icom_ci-v_-_arduino_external_s-meter_3_Edfe66OhJm.jpg
Icom ci v   arduino external s meter 3 edfe66ohjm
icom_ci-v_-_arduino_external_s-meter_4_GoLb4FDoPd.jpg
Icom ci v   arduino external s meter 4 golb4fdopd
icom_ci-v_-_arduino_external_s-meter_5_8BB9YuMgOR.jpg
Icom ci v   arduino external s meter 5 8bb9yumgor
icom_ci-v_-_arduino_external_s-meter_6_I6a4pvohqr.jpg
Icom ci v   arduino external s meter 6 i6a4pvohqr

Schematics

Icom CI-V S-meter schematic
Icom ci v   arduino s meter t3d5pcuuih

Comments

Author

Default
ddufault
  • 2 projects
  • 4 followers

Additional contributors

  • The main idea, communication between arduino & ci-v port. by Luc ON7DQ

Published on

July 19, 2019

Members who respect this project

Zz70

and 7 others

See similar projects
you might like

Similar projects you might like

External Roger Beep for Icom Transceivers

Project in progress by VE2BAP

  • 716 views
  • 0 comments
  • 3 respects

Detecting Heart Rate with a Photoresistor

Project tutorial by 3 developers

  • 14,969 views
  • 5 comments
  • 40 respects

8-Bit IO Port Library for Arduino

Project tutorial by ambhatt

  • 6,656 views
  • 7 comments
  • 14 respects

(Ab)use an Arduino as AM Music Transmitter!

Project tutorial by Doctor Volt

  • 5,329 views
  • 14 comments
  • 31 respects

Auto-Keyer for Radio "Fox Hunting"

Project tutorial by nfarrier

  • 4,660 views
  • 7 comments
  • 11 respects

Comparison of Sensor Precision Taking External and Body t°

Project tutorial by Diana Khalipina

  • 2,740 views
  • 6 comments
  • 8 respects
Add projectSign up / Login