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.
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 needs to be configured correctly to talk to the interface. This needs to be done in PowerSDR under Setup > CAT Control.
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.
#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
Here are some demo videos of the interface in action.