Saturday, December 22, 2007

A day in the lab

I have a few AML 1900MHz amplifiers. They have 3 boards, one has the actual amplifier devices, one is a control board and one I can't readily tell. The control board has several parts that look like I can recycle:
  • Lattice ispLSI 2032 CPLD
  • Atmel AT89S53 8 bit microcontroller
  • 74HC541D Octal buffer, tri-state line driver
  • MAX489 Low-Power, Slew-Rate-Limited RS-485/RS-422 Transceiver
  • XM03AB LMC6464 Quad Micropower, Rail-to-Rail Input and Output CMOS Operational Amplifier
  • LM2902D Single Supply Quad Operational Amplifier
  • LT 031 16601 - can't find... house part?
  • LT 024 364B14 - can't find... house part?
  • JM05AB ADC1038 10-Bit Serial I/O A/D Converters with Analog Multiplexer and Track/hold Function [Discontinued]
  • Summit S93X6Xs - really obsolete
I'm thinking of a visit to the Salvation Army for a toaster oven to strip this board.

On the ez430 front, Sigurd and Tommy have laid out an RS-232 interface. Sigurd is using an RS232 to TTL kit from NKC Electronics, and Tommy suggests a Maxim MAX3111E. Either way, I need to build up a board to interface the ez430 ro the outside world.

Spent a bit of time looking at my new 8-12.4 GHz mixer. It's an Anaren 7A0128, an eBay special. I hope to use it to mix 144.100 with 10224 to get 10368.100. At first blush, I put +7dBm LO (10224 from a microwave brick) and 0dBm IF (Yaesu FT-290RII) and looked at it with an HP 432. Almost nothing. Rats. What the heck. Hook it up to the HP 141T and see what I can see. There's a mixing product all right, but it's down around -30dBm. Need to look at it some more. I could really use a signal generator in the 432MHz range, or maybe 1296MHz. Too bad my 1296 transverter isn't finished :-( Maybe I ought to make an 1152 source and finish it!

In random link stumbling, came across Solder Smoke, where two hams podcast discussions about workbench projects. Also, W7ZOI's page, from the EMRFD book.

Thursday, December 20, 2007

Experimental Methods in RF Design


Experimental Methods in RF Design by Wes Hayward, Rick Campbell and Bob Larkin. I've been reading and reading and reading. What an incredible book. I've learnt so much stuff, it's hard to praise this enough. I have a good head for digital electronics, but RF is voodoo. These guys do a great job. I'm making a shopping list so I can start building some of the gear they so lovingly explain.

Way recommended!

Wednesday, November 21, 2007

TI MSP430 MCU

Texas Instruments has a cool microcontroller in their MSP430 line. It's the eZ430-F2013. It's a USB programmer/debugger and a teeny detachable board that has an F2013 on it. It's not only incredibly convenient to play with, it's only US $20! To top it off, you can buy a batch of 3 more detachable T2012 boards for another US $10! How can you beat that?

As a programmer, I found their IDE from IAR Systems a bit scruffy, but I've been using Eclipse for some time which makes comparisons iffy to say the least. I understand there's an Eclipse project that uses GCC to create MSP430 binaries... that should be interesting to track down. One issue with that is possible problems exchanging code with fellow hams. There's a group over in western Massachusetts taking a class using these things and it might be a good idea to standardise for the benefit of all.

The little USB stick has an LED on it (P1.0) and it seemed logical that my first project would be to flash the little bugger to make CW (Morse Code). My C is rusty, so I did it in assembler, by brute force. Might as well record that effort here for posterity.


;*******************************************************************************
;
; Play CW by flashing the LED
; intended for the MSP430-F2013 on the EZ430 USB development board
; P1.0 is an output port with an LED attached
;
; IAR workbench 4.09A
; 2007-11-18
;*******************************************************************************
#include "msp430.h"
;-------------------------------------------------------------------------------
NAME main
PUBLIC main
; Interrupt Vector
ORG 0FFFEh ; MSP430 RESET Vector
dc16 RESET
; Progam code
RSEG CSTACK
RSEG CODE
;-------------------------------------------------------------------------------
RESET MOV #SFE(CSTACK), SP ; Set stackpointer (256B RAM)
main mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
bis.b #001h,&P1DIR ; Set P1.0 to output direction
clr.b &P1OUT ; reset P1.0
;-------------------------------------------------------------------------------
; flash the LED using the message you want
; this is an initial non-repeating preface
call #space
call #space
call #v
call #v
call #v
call #space
; this message repeats
loop call #c
call #q
call #space
call #d
call #e
call #space
call #k
call #c
call #two
call #h
call #i
call #z
call #space
call #space
call #space
; now generate a long "carrier"
mov.b #001h,&P1OUT ; LED on
call #space
call #space
call #space
call #space
call #space
call #space
call #space
call #space
call #space
call #space
mov.b #000h,&P1OUT ; LED off
call #space
jmp loop
;-------------------------------------------------------------------------------
;
; This section forms the various CW characters
;
;-------------------------------------------------------------------------------
; space
space call #pause
call #pause
call #pause
call #pause
call #pause
ret
;-------------------------------------------------------------------------------
a call #dit
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
b call #dah
call #dit
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
c call #dah
call #dit
call #dah
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
d call #dah
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
e call #dit
call #gap
ret
;-------------------------------------------------------------------------------
f call #dit
call #dit
call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
g call #dah
call #dah
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
h call #dit
call #dit
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
i call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
j call #dit
call #dah
call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
k call #dah
call #dit
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
l call #dit
call #dah
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
m call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
n call #dah
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
o call #dah
call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
p call #dit
call #dah
call #dah
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
q call #dah
call #dah
call #dit
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
r call #dit
call #dah
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
s call #dit
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
t call #dah
call #gap
ret
;-------------------------------------------------------------------------------
u call #dit
call #dit
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
v call #dit
call #dit
call #dit
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
w call #dit
call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
x call #dah
call #dit
call #dit
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
y call #dah
call #dit
call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
z call #dah
call #dah
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
one call #dit
call #dah
call #dah
call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
two call #dit
call #dit
call #dah
call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
three call #dit
call #dit
call #dit
call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
four call #dit
call #dit
call #dit
call #dit
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
five call #dit
call #dit
call #dit
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
six call #dah
call #dit
call #dit
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
seven call #dah
call #dah
call #dit
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
eight call #dah
call #dah
call #dah
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
nine call #dah
call #dah
call #dah
call #dah
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
zero call #dah
call #dah
call #dah
call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
period call #dit
call #dah
call #dit
call #dah
call #dit
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
comma call #dah
call #dah
call #dit
call #dit
call #dah
call #dah
call #gap
ret
;-------------------------------------------------------------------------------
question call #dit
call #dit
call #dah
call #dah
call #dit
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
slash call #dah
call #dit
call #dit
call #dah
call #dit
call #gap
ret
;-------------------------------------------------------------------------------
;
; This section sets the individual elements and overall timing of each element
;
;-------------------------------------------------------------------------------
; dah
dah mov.b #001h,&P1OUT ; LED on
call #pause
call #pause
call #pause
mov.b #000h,&P1OUT ; LED off
call #pause
ret
;-------------------------------------------------------------------------------
; dit
dit mov.b #001h,&P1OUT ; LED on
call #pause
mov.b #000h,&P1OUT ; LED off
call #pause
ret
;-------------------------------------------------------------------------------
; inter-character gap
gap call #pause
call #pause
call #pause
call #pause
ret
;-------------------------------------------------------------------------------
; delay
; this sets the basic on or off time.
; Larger values mean slower CW
pause mov.w #040000,R15 ; max 65535
L1 dec.w R15
jnz L1
ret
END


Incredibly, this thing worked, and creates CW by flashing the LED!

I did a quick hack in C that looks like this:


// Flash the F2013 LED in CW
// IAR workbench 4.09A Kickstart

// TODO: translate character to CW

#include "msp430.h"
#include "string.h"
#define SHORT 3
#define LONG 7

int dot(void);
int dash(void);
int space(int);
int flash(char[]);

int main( void )
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= 0x01; // Set P1.0 to output direction

for (;;)
{
flash("...- ...- ...- -.-. --.- -.. . -.- -.-. ..--- .... .. --.. ");
}
}

// takes an array of char and flashes that message
int flash( char chars[])
{char c;

for (int i=0; i<=strlen(chars); i++) {
c=chars[i];
switch (c)
{
case '.':
dot();
break;
case '-':
dash();
break;
case ' ':
space(LONG);
space(LONG);
break;
default:
space(LONG);
space(LONG);
break;
}
}
return 0;
}

int dot(void)
{
P1OUT = 0x01; // LED on
space(SHORT);
P1OUT = 0x00; // LED off
space(SHORT);
return 0;
}

int dash(void)
{
P1OUT = 0x01; // LED on
space(LONG);
P1OUT = 0x00; // LED off
space(SHORT);
return 0;
}

int space(int time)
{unsigned int i;

do
{time--;
i = 10000;
do i--;
while (i != 0);
} while (time != 0);
return 0;
}


This too, works although I really don't think I like the dots & dashes. I figure my next step is to use actual letters and convert them via an intermediate function call.

Tuesday, September 18, 2007

September VHF QSO Party

September was not a calm contest. For a variety of reasons, we didn't get up to the mountain until early Friday morning - a full day behind. My personal goal of a full suite of bulkhead connectors for 10, 24, 47, tower power and control was satisfied. I tested every one before the contest by pulling out the gear, hooking it up and running it. It all worked, both in testing and on Mt Greylock. But I'm ahead of myself.

Friday was clear and hot: sweltering hot. We set to work unloading the tower trailer. All the towers were re-taped with appropriate colour codes, and the colour chart was lovingly removed from Wilfrid and put on the back of Roy so that anybody could tell which tower was which. We got all the tower sections off the trailer, pushed the trailer into the circle and started unloading the antenna trailer (which was already in the circle.) We self-organised (woo hoo! shades of eXtreme Programming!) into crews that assembled towers and antennas. Don't forget the guys tying tree ropes and uncoiling guy wires...

By lunch time, we'd assembled all the towers and got 3 pushed up. Took a break for lunch and went at it again. By nightfall, had all the towers up and most of the antennas, too. In my case, I had the 440 yagi, 10GHz wideband, 47GHZ and 24GHZ wideband on the tower. Note to self: 47GHz goes all the way up, onto the top section below the curve!

Saturday dawned early, bright and hot again. I'm the default IT guy, although poorly suited to the task. I got the computers running the newest version of RoverLog and started working on the fiber runs between trucks. Of course there's always some fiddling, but after swaping connectors inside the hub (Roy) the fiber came up.

Had to get my own station set up, but that went pretty fast due to the bulkheads. The 222/432 truck was having issues with their rigs. 222 in particular didn't get on the air until after the contest started. In a tizzy over the network (no network, no contest!) I waited until late to haul up the 6 foot dish and TWT. I didn't get on the air until after the contest started, but I had a backup operator so I wasn't completely worried.

Eventually, it all came up except the 2m computer. It turned out that there was an IP address conflict, which meant we had to change the IP address. Of course we also had to change the IP address in all the RoverLog config files, and a restart of RoverLog lost all the skeds. Not good.

By and large, it's a simple matter to pass a calling station among the lower bands, because most of the lower band Qs are made on voice. That means the lower band stations (on average) are busy for less than 30 seconds. On microwaves, many, many Qs are made with CW. Some of those Qs are very weak stations, and it can take upwards of 10 minutes to dig the Q out. Unline the lower bands, microwave stations drift in frequency; especially rovers.

When a pass comes in for the microwaves, there's a very good chance that the 902/1296 station is currently engaged in a QSO. That means the incoming station has to wait - in effect, to take a number. Depending on how busy things are, that can be a deep stack. Because it's impossible to tell if any given QSO will be done on SSB in 30 seconds or on CW in 10 minutes, we have to schedule 10 minute blocks for inbound microwaves. This can result in a situation where we work someone quickly and have a 9 minute gap before the next sked. The same situation holds true for the higher microwaves as well.

From the perspective of a rover waiting to work us, it must seem horribly frustrating to have to wait so long for us to turn the dish and work him, but it's an artefact of how our microwave stations are set up. The fact is that a typical rover is much more agile than a multi-op station can be. We don't have all our microwaves on one tower, with a single operator to handle them all. The microwave duties are spread among 4 different operators and 4 towers. If one of the 2304 stations is transmitting, the other has to wait (ARRL rules.) So we sometimes do goofy things like sked you on 3456 before 2304... to squeeze those extra minutes into the schedule.

The rain moved in on Saturday, and completely wiped out my 24GHz Qs. Between rain and fog, the duraation of the contest was wet. Made only a few 24GHz QSOs, but did make a bunch of 10GHz Qs. Wanted more, but between scheduling problems with RoverLog and the lack of success on the lower uW bands, I didn't get too many stations who worked their way up the bands to me.

When stations called in on 432 and asked to go to 10GHz, it takes time to turn the tower - over a minute sometimes. And I don't get to work you if the dish isn't pointed your way!

The end of the contest was disappointing. We realised late Sunday that the scoring was incorrect. It looks like the logs are OK, it's only the scoring that's the problem. So we really don't know our score yet...

Monday went fantastically well. The weather spit only a little bit and we got everything taken down and loaded up in what seemed like record time.

And so another contest comes to a close.

Thursday, June 14, 2007

June ARRL VHF contest

It was a long contest, but it's time to record the goings on. Spent this contest as the high microwave operator for the W2SZ contest group. High microwaves means 10, 24 and 47GHz. We mount these dishes on a single tower (Rohn 25) along with a 440 liaison antenna. There are 3 full sections of Rohn 25, a top section with a mast clamped inside and a base that's attached to a prop pitch motor that we use to turn the entire tower. The guy wires are attached to a free rotating guy collar...

From the top, on the mast:
440 yagi,
10GHz wideband (2 foot dish)

...on the tower
47GHz FSCW (1 foot dish)
24GHz wideband (2 foot dish)
10GHz narrow band (6 foot dish)

Logged my QSOs with Roverlog 2.4.3

Didn't have too much trouble setting up, although there are lots and lots of cables to be run. A note for the future: 10WB cables are short.

The prop pitch means that I can position the tower to about a degree of accuracy, but it also means it takes a while to turn it. That means careful planning between QSOs.

Had a lot of fun. Black flies were out in force and sleep was at a premium but I'll be back to do it again!

Saturday, January 27, 2007

January 2007 ARRL VHF sweeps

Whew! That was a lot of work!

I'm just catching my breath after roving with KJ1K through New Jersey, Pennsylvania and New York. Roving, here means driving to a hilltop, unpacking the car, releasing and setting the antennas and contacting as many people as possible on as many amateur radio bands as possible. Then packing it all up and doing it again.

Sigurd did the most wonderful job packing the car (his Honda Element)
. He was very prepared, and it was a genuine treat to be able to see him in operation. The operation was in two parts: I worked 3 of the low bands from the front seat using an Icom IC-706mkIIG.

  • 6m, 100W, vertical whip tuned for 52.525
  • 2m, 50W, log periodic beam on rotator on the roof (amp busted)
  • 440, 100W? to the log periodic
Sigurd worked the rest of the bands from the back
  • 220, 100W? to the log periodic
  • 903 + 1296 off one feed to the 2 foot x 4 foot dish on the trailer hitch
  • 3 & 5GHz off another feed to the 2x4 (had to get out and change feeds)
  • 2GHz was busted :-(
The dish is pointed using the venerable Armstrong method (get out and turn it with your arm.) Sigurd has an ingenious mounting system with the dish clamped to a vertical mast, That mast has a bearing at top and bottom allowing the mast to rotate. A compass rose at the top helps pointing. The vertical mast is clamped to a piece of aluminum tube at the bottom which is bolted to the trailer hitch. At the top, a horizontal aluminum tube telescopes out of an assembly bolted to the roof rack. This allows for adjusting the mast so it's plumb. Very cool. The whole thing tucks up close to the back for driving, and pulls away to allow for some freedom of rotation.

My notes are sketchy at best and my memory isn't what I ever think it is :-) but here's my recollection:

20th January
Sandy Hook NJ. FN30. I believe we were at the south side of the peninsula because we had a beautiful view of the Twin Lights. I believe we were at the north east corner of this parking lot which has a great view of New England. Unbelievably, two windsurfers were whooping it up in the bay behind (west) us. They had enough wind - it was blowing gale force. There was a crowd of bird watchers searching for a rare Siberian LONG-BILLED MURRELET.

Ocean Gate NJ. FM29. Operated from a spot just off the beach that I believe is here. Facing New England again. One of the neighbours came out to see what we were doing. Nice guy; just wanted to make sure we weren't hoodlums. Much less wind, thankfully! Noticed that 903 had a pretty wicked buzz/hum/motorboating that we didn't notice at Sandy Hook. While driving to the next grid, activated FN20 in flight. That was sort of interesting, watching the GPS, the map and the logging program all at the same time :-) Drove to Lancaster, PA and stayed at a Holiday Inn there.

21 Jan
Lancaster PA. FM19. This isn't the exact location, but it's close. What beautiful country! We passed by several Amish people on their way to church in their horse-drawn carriages. It was surely a test of faith to travel like that in the cold, but there they are. We collected more than a few odd looks as we drove through the area (although this was pretty common everywhere!) We missed K1TEO which was disappointing. Went back to the hotel for a bio-break and checked out.

Quick drive to FN10 on the other side of town (close but not exact) when we discovered we were having trouble hearing on 1296. 144.260 was noisy too, although I think it was power line hum. Heard the WA1ZMS beacon in Virginia but couldn't work him.

Hazleton PA. FN10. Figured we'd try to get a few more while we were still here. Stopped at an industrial park near here. 2m has noise in the s5-s7 range. Yuck. Thinking that 1296 preamp failed, so Sigurd pulled it. No joy?! An alternate site might be near the Cracker Barrel Restaurant, but it needs to be surveyed. Thank heaven for modern topo maps! I have to add that as a Battlestar Galactica fan, I'm rather pleased that it's located in Frackville.

We were going to go up Camelback Mountain in Tannersville bue we discovered that the road was quite icy above the ski area. Was very lucky to reach N3NGE and K3TUF to let them know we had to abort. Made the QSOs under a metal gasoline station awning with the beam pointing into the building!

West Orange NJ. FN20 Eagle Rock Reservation. The Google map doesn't show it, but there's a memorial to the victims of September 11 there, and the trees are cut down to the east. One looks over Manhattan; almost directly at the Empire State Building. It's a beautiful site, and we made many QSOs here. We now realise that the microwaves are all gone. Wonder if it's from the new high power 3456 amp burning out the antenna relay?

Newburgh NY. FN21 near I-84. Stopped to activate the grid and make as many QSOs as possible before the contest ended. Only had the low bands but it was definitely a good idea to stop here. Was able to make a few QSOs in flight, logging on paper to save Sigurd's night vision. Was a good way to end the contest. Last Q was with K1TEO, whom we otherwise would have missed in this grid.

Thanks for all the Q's and for all the folks who showed me such patience and kindness. Was a very nice January rove, and I have the fever to do it again! 73 de KC2HIZ/r