Flex Radio PowerSDR to CI-V Interface

This project uses a PICAXE-18X to interface my Icom IC-910 to PowerSDR, the FlexRadio SDR PC control software, so when selecting a signal on the waterfall in PowerSDR it tunes the IC-910 to the correct frequency.  This translates the IF offset from the centre frequency in both PowerSDR and the IC-910 and commands the IC-910 to the new frequency.

This interface is used to control the frequency on my Icom IC-910H using the PowerSDR software.  PowerSDR uses Kenwood CAT commands which is the first thing, I need to translate them to Icom CI-V ones and PowerSDR has no idea what frequency my IC-910H is on, it only monitors the IF output on 10.850MHz which doesn’t change with respect to the IC-910H frequency.
It is also not quite so simple as that! As PowerSDR is used to monitor the 10.850MHz IF from the IC-910H and has no idea what frequency my IC-910H is on when I select a signal from the PowerSDR waterfall I can’t just send the correct frequency to the IC-910H.  I need to calculate the offset of that signal from the centre of the IF, read the IC-910H frequency and apply the offset to it and then command the IC-910H to this new frequency.

An example is: if I’m monitoring 144.300MHz on my IC-910H and in PowerSDR see a signal 10KHz up and select it, this will be 10.860MHz on PowerSDR, then my interface would receive a Kenwood style CAT command of the new frequency from PowerSDR of 10.860MHz but this is no good for the Icom.  The steps I need to take are I calculate in the PIC that 10.860MHz is 10KHz higher than the IF centre, I then read the current IC-910H frequency, 144.300MHz (in this example) and apply the 10KHz to it which makes it 144.310MHz.  I then over CI-V I send 144.310MHz to VFO-B on the IC-910H and at the same time 10.850MHz to PowerSDR on the serial interface.  Before I write to the IC-910H I first normalise VFO-A and VFO-B making them the same (144.300MHz in this example) before writing to VFO-B as this allows me to come back to the original frequency just by pressing the VFO button.  I also need to send 10.850MHz to PowerSDR so it resets to monitor the centre of the IF otherwise if it stayed on 10.860MHz after I moved the IC-910H to 144.310MHz then PowerSDR would be actually monitoring 10KHz higher which would be 144.320MHz in reality.

If you goto my Icom IC-910H IF mod page you will see details of how to modify the Icom IC-910H radio to tap into the 10.850MHz main band IF.  The only issue I have is my tap point is after the 10.850MHz filter so is limited in bandwidth to about 15MHz either side of the IC-910H centre frequency. See the filter shape below.

Project Pictures

IMG_20101207_183300 (Large)IMG_20101207_183207 (Large)IMG_20101207_183246IMG_20101207_183224 (Large)

Schematic

Flex CI-V Interface_v0.1

Modes of Operation

I’ve designed the circuit to have 2 modes of operation, Track and Spot.  In Track mode the interface follows the frequency changes in PowerSDR and updates the Icom IC-910H in real-time much as you so as you tune through the band. Spot mode though is much more useful if you are using it contest style to monitor and watch for stations nearby you haven’t yet worked.  In Spot mode the interface indicates a new frequency has been selected in PowerSDR but doesn’t load the new frequency into the IC-910H until the ‘Send Spot’ button is pressed.  This means the main operator could be calling CQ while a second operator finds a station to work, then you as the main operator can decide when to press the button and go work him, in between CQ’s for example.  When the ‘Send Spot’ button is pressed the interface normalizes VFO-A and VFO-B, i.e. makes both of them both equal the current operating frequency then sends the new frequency to VFO-B in IC-910H which also selects it, this allows the main operator to work the new station before pressing the VFO button on the IC-910H to return to VFO-A and the original operating frequency to carry on calling CQ.

PowerSDR Configuration

PowerSDR needs to be configured correctly to talk to the interface.  This needs to be done in PowerSDR under Setup > CAT Control.

image

In the CAT Control section select the COM port which you have connected the PowerSDR to.  Set the Baud to 9600 which is also defined in the code, if you want to run this slower then also modify the RS232Baud Symbol in the PICAXE code.  Make sure you have also selected TS-2000 as the [radio] ID and ‘All Kenwood AI Command’ is checked.  On the radio set the Baud rate also to 9600.

Code

#PICAXE-18X

#rem
-------------------------------------------------------------------------------------------------------------
# PowerSDR <> CI-V Interface - © Gavin Nesbitt, M1BXF - December 2010							#
#																		#
# This code is used on an interface which sits between PowerSDR and it's Kenwood CAT commands and an Icom	#
# using CI-V commands to allow PowerSDR to change the frequency on the Icom based upon signals received	#
# in the PowerSDR waterfall from the Icom IF interface.									#
#																		#
#																		#
# Code can be reproduced in full or in part as long as the source is acknowledged. 					#
-------------------------------------------------------------------------------------------------------------
#endrem

'Define inputs
'Logic 	Phy	Use
'RS-232 In	6	Serial input from PowerFlex
'Out4/In4	3	CI-V input / output

Symbol CIVinPIN	= 7
Symbol CIVoutPIN	= 6
Symbol RS232inPIN	= 6
Symbol RS232outPIN= 7
Symbol InDataPIN	= 3
Symbol OutDataPIN	= 2
Symbol Autoupdate	= 0
Symbol UpdateBut	= 2
Symbol CIVoutbaud = T9600_8
Symbol CIVinbaud  = T9600_8
Symbol RS232Baud	= N9600_8
Symbol CHSM		= B6

'Definfe frequency digits
Symbol FlexOffset = W0
Symbol F1 = B2
Symbol F2 = B3
Symbol F3 = B4
Symbol F4 = B5

Symbol I1 = B7
Symbol I2 = B8
Symbol I3 = B9
Symbol I4 = B10
Symbol I5 = B11
Symbol I6 = B12
Symbol I7 = B13
'Symbol AorB = B13
SETFREQ M8

'setint %00000000,%00000100

Start:
If PIN0 = 0 then GOTO ClearManual
If PIN2 = 0 then GOTO ManualFreq
If PIN6 = 1 then
 HIGH OutDataPIN
ENDIF
LOW InDataPIN 	'stop signalling - we will have for here from the error check below
Goto Start 

ManualFreq:
HIGH InDataPIN	'signal we are getting data
SEROUT RS232outPIN,RS232Baud,("FA;")
SERIN  RS232inPIN,RS232Baud,CHSM,CHSM,CHSM,CHSM,CHSM,CHSM,F4,F4,F1,F2,F3,CHSM 'Listen for CAT command from PowerSDR

SEROUT CIVoutPIN,CIVoutbaud,($FE,$FE,$60,$E0,$07,$A0,$FD) 'CI-V Command to swap VFOs
PAUSE 50
SEROUT CIVoutPIN,CIVoutbaud,($FE,$FE,$60,$E0,$07,$01,$FD) 'CI-V Command to swap VFOs
PAUSE 50

Goto Manuals

Setup:
Pause 120		'used to stop the system going into a loop
SERIN  RS232inPIN,RS232Baud,CHSM,CHSM,CHSM,CHSM,CHSM,CHSM,F4,F4,F1,F2,F3,CHSM 'Listen for CAT command from PowerSDR
'Only desired characters are used, CHSM used to save none desired characters.					
If PIN0 = 1 then GOTO START				'Capture we have moved to manual mode

Manuals:
HIGH InDataPIN	'signal we are getting data
If F4 <> $38 and CHSM <> $31 then goto START 	'Make sure the frequency is in the correct range, i.e 10.8xxMHz

SEROUT CIVoutPIN,CIVoutbaud,($FE,$FE,$60,$E0,$03,$FD) 'CI-V Command to read freq from CI-V
SERIN  CIVinPIN,CIVinbaud,CHSM,CHSM,CHSM,CHSM,CHSM,I5,I4,I3,I2,I1,CHSM 'Frequency of Icom
'Only desired characters are used, CHSM used to save none desired characters.

LOW InDataPIN 	'stop signalling - we have all the data
HIGH OutDataPIN	'signal we have data to send to the ICOM

BCDTOASCII I5,I6,I7		'Convert to individual registers for easier calculation
I7 = I6
BCDTOASCII I4,I5,I6
BCDTOASCII I3,CHSM,I4
I3 = CHSM

IF F1 > 52 THEN 			'For frequencies above the center
F1 = F1 - 53 '10KHz
F2 = F2 - 48 '1KHz
F3 = F3 - 48 'Hz

 I6 = I6 + F3
  IF I6 > 57 THEN
   I6 = I6 - 10
   I5 = I5 + 1
  ENDIF
 I5 = I5 + F2
  IF I5 > 57 THEN
   I5 = I5 - 10
   I4 = I4 + 1
  ENDIF
 I4 = I4 + F1
  IF I4 > 57 THEN
   I4 = I4 - 10
   I3 = I3 + 1
  ENDIF 

ELSE					'For frequencies below the center

 F1 = 52 - F1 '10KHz
 F2 = 58 - F2 '1KHz
 F3 = 58 - F3 'Hz
 IF F3 = 5 THEN
  F2 = F2 - 1
 ENDIF	
 IF F3 = 10 THEN
  F3 = 0
 ENDIF	
 I6 = I6 - F3
  IF I6 < 48 THEN
   I6 = I6 + 10
   I5 = I5 - 1
  ENDIF
 I5 = I5 - F2
  IF I5 < 48 THEN
   I5 = I5 + 10
   I4 = I4 - 1
  ENDIF
 I4 = I4 - F1
  IF I4 < 48 THEN
   I4 = I4 + 10
   I3 = I3 - 1
  ENDIF 
ENDIF

I3 = I3 * 16			'For CI-V we need to add the registers to get a single 16 bit word for 100 & 10KHz
I4 = I4 - $30
I3 = I3 + I4

I4 = I5 * 16			'For CI-V we need to add the registers to get a single 16 bit word for 1 and 0.xKHz
I6 = I6 - $30
I4 = I4 + I6

SEROUT CIVoutPIN,CIVoutbaud,($FE,$FE,$60,$E0,$05,$00,I4,I3,I2,I1,$FD) 'CI-V Command to program CI-V freq

ClearManual:
SEROUT RS232outPIN,RS232Baud,("FA00010850000;")'Set the frequency in PowerSDR back to 10.850MHz so the ofset from 10.850 can be caluculated								'otherwise we don't calculate the offset correctly.
LOW OutDataPIN	'signal we have now sent data to the ICOM
Goto SETUP

 

Demo Videos

Here are some demo videos of the interface in action.

Leave a Reply

%d bloggers like this: