40m WSJTX again very busy this morning
Friday, 16 March 2018
Tuesday, 27 February 2018
ICOM CI-V Interface
As part of a project to make a voice controlled transceiver for use by blind amateurs we need a CI-V interface from a USB port to the 3.5mm CIV jack on our ICOM 718. These slides show the thinking/research done so far. There is still some way to go to get all the voltages I/O currents and logic correct...
This may not be of interest to everyone. If you spot any errors please email techgroup-m0ifa at gmail.com, thanks
Saturday, 27 January 2018
First steps to re-design PA
As you may have read below, my QRP PA failed. Actually it failed twice and cost me money since I just replaced the amplifier module with another one, which then again failed - no idea why!
So I have decided to build my own amplifier. Here's me breadboarding the first stage
I decided to use the common RD16HHF1 transistor, I discovered that it has a grounded tab, connected to the Source of the MOSFET. Good. An amp stage using this will give about +20dB gan. So for an output of +40dBm 10W 22V, I will need an input drive of 2.2V. I will need a preamp to get up to this level from my VFO 0dBm output. I chose to try a very simple circuit. This preamp seems to work well and is giving me the drive I wanr for the output stage. Here's the planned circuit
Moe news later when I have built the complete PA. Should get up to 10W output...
Monday, 22 January 2018
Friday, 5 January 2018
Caprice PA finished, then failed!
I have been slow, I know, in getting the QRP PA finished. This is a 3W PA for 40, 30 & 20m with control using a Arduino Nano. It started out like this
Then I got stuck on two fronts. One cutting the holes in the case I had planned, and second writing the software that allows an exciter (VFO or QRP transceiver) to tell the PA to switch TX/RX and which band LPF to chose.
I solved the box problem by inducing my son who owns a small engineering company to mill out the holes and rectangles out of the front and back panels of the box.
Then I stuck my head down and had a long think about controlling the PA. What I settled with is to have a 4-way 3.5mm jack lead connect the VFO to the PA. This was dictated because one of the apps that runs on my VFO (AD9851 + Arduino Uno with OLED display, is a GPS location or Maidenhead locator detector, and the GPS plugs into a 4-way jack). The jack connections are Ground, Arduino pin A1, A0 and +5V. The A1 & A0 connections carry the GPS RX & TX signals. But for the PA they provide four controls (in binary HIGH/LOW on the two pins). These switch the PA into RX or TX on 40, 30 or 20m.
This is what the PA now looks like inside and out.
The integrated Amp is top left, the LPF at the bottom and the Nano and TX/RX switching relay is at top right.
Here the top box is the VFO - which can be programmed to transmit CW, QRSS, JT65, WSPR etc, the middle box is a power meter (0.1uW to 10W range) and the bottom on is the PA. The display on the PA shows either TX, or LPF the band selected.
Here's the code used in the PA which illustrates the decode and use of the A0, A1 signals
// PA_V2 Caprice system
// V1.1 17-12-30 changed input pins to A0, A1
/* Jack Body GND
Ring A1 control bits
Ring A0
Tip 5V
*/
// HEADERS & LIBRARIES
// oled init & functions
#include "Oled.h"
// CONNECTIONS
// relay outputs (active HIGH)
#define PTT 5
#define B6 6
#define B7 7
// PARAMETERS
// modes
#define RX 0
#define TX40 1
#define TX30 2
#define TX20 3
// GLOBAL VARIABLES
char disp[][4] = {"", "40m", "30m", "20m"}; // display
byte mode, band; // mode 0-3, band 1-3
// SETUP
void setup() {
pinMode(A0, INPUT_PULLUP); // bus LSB
pinMode(A1, INPUT_PULLUP); // bus MSB
pinMode(PTT, OUTPUT); // T/R relay
pinMode(B6, OUTPUT); // Band LPF relays
pinMode(B7, OUTPUT);
oled.begin(); // init oled display
// init 40m RX
swPA(TX40); // mode 40m, set LPF
swPA(RX); // back to mode RX
}
// LOOP
void loop() {
// read mode input
mode = getMode(digitalRead(A1), digitalRead(A0)); // read 0000 00xx
// switch PA
swPA(mode);
dispUpdate();
}
// GET MODE
// A1 & A0 gets mode, returns 0-3 (RX-TX20)
byte getMode(bool b1, bool b0) {
if (b1 == HIGH && b0 == HIGH) return RX; // 0 RX
if (b1 == HIGH && b0 == LOW) return TX40; // 1 TX 40m
if (b1 == LOW && b0 == HIGH) return TX30; // 2 TX 30m
if (b1 == LOW && b0 == LOW) return TX20; // 3 TX 20m
}
// SWITCH PA
// set PTT & LPF relays (HIGH = on), set band
void swPA(byte m) {
// first check RX or TX
if (m == RX)
digitalWrite(PTT, LOW); // RX
else {
digitalWrite(PTT, HIGH); // TX
// chose LPF freq
switch (m) {
case TX40:
digitalWrite(B6, LOW); // 40m
digitalWrite(B7, LOW);
break;
case TX30:
digitalWrite(B6, HIGH); // 30m
digitalWrite(B7, LOW);
break;
case TX20:
digitalWrite(B6, HIGH); // 20m
digitalWrite(B7, HIGH);
break;
}
band = m; // set band 1-3 for display
}
delay(200);
}
// PICTURE LOOP
// Display band or "TX"
void dispUpdate() {
oled.firstPage();
do {
dispMsg(60, 0, "PA");
if (mode == RX) { // if RX
dispMsgUL(30, 15, disp[band]); // display band
dispMsgL(50, 50, "RX");
}
else {
dispMsgUL(45, 15, "TX"); // otherwise show "TX"
dispMsgL(50, 50, disp[band]);
}
} while (oled.nextPage());
}
FAILSo there I was, a new QRP PA. But... first the best output I could get was 1.5W on any band. And then after a couple of changes to the band and T/R it failed altogether and the best output was 10mW, almost the same as the input from the VFO. Fail. And so far I have no idea why. The choice now is to order another Chinese RF Amp module or to build my owm small amplifier... not decided yet.
Friday, 29 December 2017
Final PA RXTX and LPF band control - the Caprice system
I previously gave a set of sketch code for the VFO or QRP to control the PA, to switch it from RX to TX and set the LPF to a band, 40, 30. 20m. The control signals are carried on two wires of a 4-way jack. The two control bits were connected to Arduino pins 12 & 13. But these pins, I realise are used in the QRP for TX & RX switching and so cannot be used for PA control. So I have changed to A0 & A1 pins.
This has meant a change also to the GPS sketches so the TX and RX serial data is read from these pins.
So the new code is as described below:
Caprice System
The Caprice system uses a 4 wire bus to supply power and signals. These are carried on a 4-way 3.5mm jack. The signals connect to Arduino A0 & A1.
Jack Power/Signal Socket Wire
Body GND Brown (B)
Ring PIN A1 Yellow (Y)
Ring PIN A0 Orange (O)
Tip 5V OUT Red (R)
OLED Power/Signal Wire
GND Black (K)
VDD Brown (B)
SCK Red (R)
SDA Orange (O)
PA Connections (top)
OLED
________________
o o o o o o o o |
O R B K
SDA VDD
SCK GND
Jack
o o o o o o o o |
Y O R B - -
A1 5V 12V
A0 GND GND
Outputs from GPS
A GPS uses the following connections:
GND
A0 - RX from GPS
A1 - TX to GPS
5V
Output from sketches
In the Caprice system sketches use the following connections:
GND
A0 - LSB of command (was 12)
A1 - MSB of command (was 13)
5V out
The output signals encode the signals to set the PA into one of 4 modes (0, 1, 2 & 3):
// modes, 00, 01, 10, 11 on A1, A0
#define RX 0
#define TX40 1
#define TX30 2
#define TX20 3
// SETUP
// include in setup...
// jack PA control outputs
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
// init band, RX
setPA(TX40); // mode 40m, set PA LPF
setPA(RX); // back to mode RX
This function outputs the modes to the PA.
// SET PA MODE
// modes 0, 1, 2, 3 output on A1, A0, active LOW
void setPA(int m) {
// set mode
switch (m) {
case 0:
digitalWrite(A1, HIGH);
digitalWrite(A0, HIGH); // RX
break;
case 1:
digitalWrite(A1, HIGH);
digitalWrite(A0, LOW); // TX40
break;
case 2:
digitalWrite(A1, LOW);
digitalWrite(A0, HIGH); // TX30
break;
case 3:
digitalWrite(A1, LOW);
digitalWrite(A0, LOW); // TX20
break;
}
}
Relay wiring
o------- 40m
in/Out---o/ /B6
o-----|
|----------|
| o------- 30m
|---o/ /B7
o------- 20m
PA Input
The PA inputs the signals and decodes them to modes (0, 1, 2 or 3):
// CONNECTIONS
// relay outputs (active HIGH)
#define PTT 5
#define B6 6
#define B7 7
// PARAMETERS
// modes
#define RX 0
#define TX40 1
#define TX30 2
#define TX20 3
// GLOBAL VARIABLES
char disp[][4] = {"", "40m", "30m", "20m"}; // display
byte mode, band; // mode 0-3, band 1-3
SETUP includes
pinMode(A0, INPUT_PULLUP); // bus LSB
pinMode(A1, INPUT_PULLUP); // bus MSB
pinMode(PTT, OUTPUT); // T/R relay
pinMode(B6, OUTPUT); // BAND 6
pinMode(B7, OUTPUT); // BAND 7
// init 40m RX
swPA(TX40); // mode 40m, set LPF
swPA(RX); // back to mode RX
The mode input is read from A1 & A0
// read mode input
mode = getMode(digitalRead(A1), digitalRead(A0)); // read 0000 00xx
/ GET MODE
// A1 & A0 gets mode, returns 0-3 (RX-TX20)
byte getMode(bool b1, bool b0) {
if (b1 == HIGH && b0 == HIGH) return RX; // 0 RX
if (b1 == HIGH && b0 == LOW) return TX40; // 1 TX 40m
if (b1 == LOW && b0 == HIGH) return TX30; // 2 TX 30m
if (b1 == LOW && b0 == LOW) return TX20; // 3 TX 20m
}
The mode is used to switch the TX/TX PTT relay (Antenna to PA or RX) and the LPF relays.
// SWITCH PA
// set PTT & LPF relays (HIGH = on), set band
void swPA(byte m) {
// first check RX or TX
if (m == RX)
digitalWrite(PTT, LOW); // RX
else {
digitalWrite(PTT, HIGH); // TX
// chose LPF freq
switch (m) {
case TX40:
digitalWrite(B6, LOW); // 40m
digitalWrite(B7, LOW);
break;
case TX30:
digitalWrite(B6, HIGH); // 30m
digitalWrite(B7, LOW);
break;
case TX20:
digitalWrite(B6, HIGH); // 20m
digitalWrite(B7, HIGH);
break;
}
band = m; // set band 1-3 for display
}
}
The PA display shows UL Band when in RX mode, and "TX" when transmitting.
// PICTURE LOOP
// Display band or "TX"
void dispUpdate() {
oled.firstPage();
do {
dispMsg(60, 0, "PA");
if (mode == RX) { // if RX
dispMsgUL(30, 15, disp[band]); // display band
dispMsgL(50, 50, "RX");
}
else {
dispMsgUL(45, 15, "TX"); // otherwise show "TX"
dispMsgL(50, 50, disp[band]);
}
} while (oled.nextPage());
}
Friday, 8 December 2017
ICOM718 Digital INterface
Here is the working ICOM "SEND" or PTT circuit. The PC or Mac is connected to the interface using a serial USB <-> RS232/TTL interface cable - costing just a few pounds on Amazon... The signals output from the adaptor that I bought are 3.3V logic, and there is a 5V power supply. I use the negative logic (active LOW) RTS signal to drive the gate of the BS170 MOSFET, when HIGH the 3.3V turns it on and a LOW level turns it off. The output of the BS170 stage is used to drive the diode input on the 1N35 optocoupler, thus giving an active LOW output to the ICOM SEND (PTT) line.
The Audio circuits have yet to be tested and will be published here later. The box that has been made is shown below, Front and back.
The front has a switch which will be used to disable the computer PTT/RTS signal to prevent it being accidentally activated during system set-up, along with volume controls for the IN and OUT audio channels. The back has a cable with USB plug (containing the USB <-> RS232/TTL adaptor), the DIN connector to the ICOM718 (using a custom made cable to the rear ICOM 13 pin Input/Output, a Jack for CV-I control signals and two audio jacks for connections to the soundcard of the PC or Mac (I use a small plug-in USB sound interface).