Field Day 2017

Setting up for landing on runway 35 at KTIW

Just like last year, the weather was absolutely great for field day this year. I was lucky enough to be high up in the air this year and worked a lot of stations on 146.52 and 146.55 FM. Thanks to everyone who was patient in the pile-up. It’s tricky to do this in the air when there are so many stations that can hear you, but not each other.

VFR Flight from KMMV to KTIW (Direct Flight Path). Cruise altitude 10,500 ft.

Confirmed Contacts

Call sign, Location

  1. Operating as N1QQ, 1C/OR
  2. KF7UOQ
  3. KC7TAK, Beaver Creek, OR
  4. KK7PR, Bald Peak, OR
  5. N7DB, Sandy, OR
  6. KG7FOP, Sheridan Peak, OR
  7. KK4IBO, I-5 Northbound Exit 21
  8. W7HRY, Silver Star Mountain, WA
  9. WA7ASF, Troutdale, OR
  10. W7PRA, Corvallis, OR (100+ miles)
  11. KI7FCI, Vernonia, OR
  12. WA7LK, Enumclaw, WA
  13. K7KID, Naselle, WA
  14. K7BPH, Brush Prairie, WA + (op. KG7IED)
  15. AE7ZC, Beaverton, OR
  16. KC7VH, Southeast Portland, OR
  17. K7BH, Vancouver, WA
  18. Crossed Washington-Oregon Boarder, Hereafter Operating as N1QQ, 1C/WWA
  19. KK7PR
  20. KF7VWA, Woodland, WA
  21. W7PIG, Camano Island, WA (150+ miles)
  22. W7RC, Ridgefield, WA
  23. KA7AUY, Salem, OR
  24. WA7AIA,
  25. KG7SJY, 5 miles N. of Battleground, WA
  26. KG7RQJ, Coupeville, WA (150+ miles)
  27. VE7VVC, Vancouver, British Columbia, Canada (225+ miles)
  28. W0MUD, Astoria, OR
  29. WB7OSC, E. of Amboy, WA in the Gifford Pinchot Nat. Forest
  30. N7RIG
  31. KI7F
  32. KI7DFG, Montesano, WA
  33. KF7HQR, Enumclaw, WA
  34. K7SMA, Northeast Portland, OR
  35. N7KE, Redmond, WA
  36. AC7CL, Silverdale, WA
  37. NE7NE, Shelton, WA
  38. K7EZI, Port Ludlow, WA
  39. KC7IGT, Renton, WA
  40. K7LED, Marrowstone Island, WA
  41. KB7NMU, Yelm, WA
  42. AD7BF, Everett, WA

Grid Dip Meter

Grid Dip Meter
Heathkit HD-1250

A grid dip meter is, in it’s simplest form, an oscillator. One function of this device is to determine what frequency, or frequencies, a particular LC circuit is tuned to. This is accomplished by placing the device in close proximity with the LC circuit under test. Inductive coupling between the meter and the circuit being tested allows the resonant frequency to be measured. When the frequency of the meter is tuned to the frequency of the LC circuit under test a dip will be observed on the meters indicator. More information about how to use this device can be found on YouTube in a video by Alan, W2AEW.

HD-1250 Grid Dip Meter
Inside the HD-1250

I thought it would be interesting to take this little meter apart and see what’s inside. While most of us are familiar with how to use one of these meters, and what they look like on the outside, I’m guessing that unless you’ve assembled one of these nifty devices yourself that you won’t be quite as familiar with the parts inside.

In the photographs you will see some familiar components. The large device with the moving interweaving plates is the variable capacitor. This capacitor, along with the inductive probe chosen sets the frequency of the oscillator. Other big ticket items include the battery on the left, the variable potentiometer to set the gain of the front panel meter seen with the small thumb-wheel attached, and the single-sided circuit board on the bottom.

Grid Dip Meter Circuit Board
HD-1250 Circuit Board

I admire the simple sheet metal construction of these Heathkit devices. Their simplicity certainly contributed to their low cost, and high availability that made the Heathkit line so popular. I found the method they used to create a tapped mounting hole in the edge of the sheet metal to be particularly clever. This is a technique I could certainly use in the future.

The single-sided pcb in this meter looks like it was likely drawn by hand. This semi-artistic method of pcb design has gone by the wayside in favor of modern CAD software, but you can still learn a lot by studying these designs. I can appreciate the quality of the work here, especially considering it was done on paper.

Moonbounce Communications

MoonBack when I was in high school I used to coordinate a weekly on-the-air meetup of younger ham radio enthusiasts. We called it the Evergreen Intertie Youthnet.

It was a fun group of people, and I remember having some interesting conversations about all kinds of things relating to ham radio. Even though the main focus of the net was to discuss things that young ham radio operators would be interested we would usually have hams of all ages participate.

Every now and then we would have a ‘special feature’ where a guest would share a little bit about a project, or something to do with ham radio. I just happened to record this one of John, W7OE, talking about earth-moon-earth communications. This was recorded some time in 2008 I believe.

HF beacon using Arduino

I recently got a cheap 40MHz signal generator board off of ebay for a few bucks. This board is based on the Analog Devices AD9850, but the ones you find on eBay are probably knock-offs.

Parts List:
Source Code:

I modified some code I found online to use it to be able to send Morse code from the serial port on my computer using putty. Putty is a nice piece of free serial terminal software. The output power is very low (easily measured in microWatts with a small antenna) but after some impedance matching and a amplifier stage you could easily use this for a nice HF beacon project. Here is the code if you want to try it for yourself:

Arduino Code:
//Has the ability to send morse code from the serial port

#define WPM 20
#define pttOut 13
#define pwmOut 5
#define toneFrequency 400  //Hz
#define W_CLK 8       // Pin 8 - connect to AD9850 module word load clock pin (CLK)
#define FQ_UD 9       // Pin 9 - connect to freq update pin (FQ)
#define DATA 10       // Pin 10 - connect to serial data load pin (DATA)
#define RESET 11      // Pin 11 - connect to reset pin (RST)
#define txfrequency 14015000

byte morseLookup[] = {
	//Letters
	B01000001,B10001000,B10001010,B01100100,B00100000,B10000010,
	B01100110,B10000000,B01000000,B10000111,B01100101,B10000100,
	B01000011,B01000010,B01100111,B10000110,B10001101,B01100010,
	B01100000,B00100001,B01100001,B10000001,B01100011,B10001001,
	B10001011,B10001100,
	//Numbers
	B10111111,B10101111,B10100111,B10100011,B10100001,B10100000,
	B10110000,B10111000,B10111100,B10111110,B10111110,
	//Slash
	B10110010
};


void setup(){
	Serial.begin(9600);
	Serial.print("Loading...");
	pinMode(pttOut,OUTPUT);
	pinMode(pwmOut,OUTPUT);
	pinMode(4,OUTPUT);
	digitalWrite(4,LOW);
	pinMode(3,OUTPUT);
	digitalWrite(3,HIGH);
	setupDDS();
	delay(500);
	Serial.println(" complete");
}

void loop(){
	if(Serial.available()){sendSerialMessage();}
	transmitString("Test");
	delay(5000);
}

// transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
void tfr_byte(byte data)
{
	for (int i=0; i<8; i++, data>>=1) {
		digitalWrite(DATA, data & 0x01);
		pulseHigh(W_CLK);   //after each bit sent, CLK is pulsed high
	}
}

void sendFrequency(double frequency) {// frequency calc from datasheet page 8 =  * /2^32
	int32_t freq = frequency * 4294967295/125000000;  // note 125 MHz clock on 9850
	for (int b=0; b<4; b++, freq>>=8) {
		tfr_byte(freq & 0xFF);
	}
	tfr_byte(0x000);   // Final control byte, all 0 for 9850 chip
	pulseHigh(FQ_UD);  // Done!  Should see output
}

void pulseHigh(int pin){
	digitalWrite(pin, HIGH);
	digitalWrite(pin, LOW);
}

void setupDDS(){
	pinMode(FQ_UD, OUTPUT);
	pinMode(W_CLK, OUTPUT);
	pinMode(DATA, OUTPUT);
	pinMode(RESET, OUTPUT);
	pulseHigh(RESET);
	pulseHigh(W_CLK);
	pulseHigh(FQ_UD);  // this pulse enables serial mode - Datasheet page 12 figure 10
}

void sendSerialMessage(){//Gets a string from the serial port, and send it out via morse code
	delay(10);
	char message[64];
	int length = 0;
  
	while(Serial.available() && length < 64){ message[length] = Serial.read(); length++; message[length] = '\0'; } transmitString(message); } void transmitString(char* message){ for(int i = 0; message[i] != '\0'; i++){ Serial.print(message[i]); transmitChar(message[i]); } Serial.println(); wordSpace(); } void transmitChar(char character){ int lookupValue; if(character > 64 && character < 91){ //Capital Letter (0-25) lookupValue = character - 65; } else if(character > 96 && character < 123){ //Lower Case Letter (0-25) lookupValue = character - 97; } else if(character > 47 && character < 58){ //Number (26-36) lookupValue = character - 48 + 26; } else if(character == 47){ // slash (37) lookupValue = 37; } else if(character == 32){ // space wordSpace(); return; } else{ return; //Invalid Character } byte length = (morseLookup[lookupValue] & B11100000) >> 5;
	byte pattern = morseLookup[lookupValue] & B00011111;
	byte mask = 1 << length-1;
	for(int i = 0; i < length; i++){ if(mask & morseLookup[lookupValue]){ dash(); } else{ dot(); } mask = mask >> 1;
	}
	charSpace();
}

void dot(){
	digitalWrite(pttOut,HIGH);
	sendFrequency(txfrequency);
	tone(pwmOut,toneFrequency);
	delay(1200/WPM);
	digitalWrite(pttOut,LOW);
	sendFrequency(0);
	noTone(pwmOut);
	delay(1200/WPM);
}

void dash(){
	digitalWrite(pttOut,HIGH);
	sendFrequency(txfrequency);
	tone(pwmOut,toneFrequency);
	delay(3 * 1200 / WPM);
	digitalWrite(pttOut,LOW);
	sendFrequency(0);
	noTone(pwmOut);
	delay(1200 / WPM);
}

void charSpace(){
	delay(2 * 1200 / WPM);
}

void wordSpace(){
	delay(7 * 1200/WPM);
}

More Features For The Repeater Database

repeaterdatabaseI’ve been spending a bit more time on the repeater database. It’s evolved from a simple html table with data from various sources, to a full-blown database-driven system that supports user editing and has more features than you can shake a stick at lexapro anxiety. You might ask, “Are all these features necessary?” and the answer is no. I didn’t do this to try and compete with some ham radio repeater websites. I just did it to learn about databases, and to have some fun, while getting a useful list of repeaters in the area. The database now has a google map for every repeater, as well as websites, and other information in every entry. It’s probably overkill, but like I said, it was a learning experience.

Edit (2015): I’ve decided to stop maintaining a repeater database of my own because there are now several good worldwide databases available with a large user base. The end result is a broad and high quality repeater database and it is available worldwide online.