The personal website of Scott W Harden
May 19th, 2010

Debut of the AJ4VD QRSS Fish

Finally! After a few years tumbling around in my head, a few months of reading-up on the subject, a few weeks of coding, a few days of bread-boarding, a few hours of building, a few minutes of soldering, and a few seconds of testing I've finally done it - I've created my first QRSS transmitter! I'll describe it in more detail once I finalize the design, but for now an awesome working model. It's all digital, consisting of 2 ICs (an ATTiny44a for the PWM-controlled frequency modulation, and an octal buffer for the pre-amplifier) followed by a simple pi low-pass filter.

My desk is a little messy. I'm hard at work! Actually, I'm thinking of building another desk. I love the glass because I don't have to worry (as much) about fires. That sounds scary, I know.

This is the transmitter. The box is mostly empty space, but it consists of the circuit, an antenna connection, a variable capacitor for center frequency tuning, and a potentiometer for setting the degree of frequency shift modulation.

Yeah, that's a fishy. Specifically a goldfish (the cracker). It's made with a single tone, shifting rapidly (0.5 sec) between tones. So cool. Anyway, I'm outta here for now - getting back to the code! I think I'll try to make a gator next...

Here's the code that makes the fish. It sends my ID quickly, some fish, then my ID in QRSS speed using PWM.

#include <avr/io.h>
#include <util/delay.h>

const int tDit = 270 / 3;
const int tDah = 270;

char fsk;
unsigned long int t_unit;

void delay()
{
    _delay_loop_2(t_unit);
}

void blink()
{
    PORTA ^= (1 << 0);
    PORTA ^= (1 << 1);
    PORTA ^= (1 << 2);
    PORTA ^= (1 << 3);
}

void tick(unsigned long ticks)
{
    while (ticks > 0)
    {
        delay();
        delay();
        ticks--;
    }
}

void pwm_init()
{
    //Output on PA6, OC1A pin (ATTiny44a)
    OCR1A = 0x00;  //enter the pulse width. We will use 0x00 for now, which is 0 power.
    TCCR1A = 0x81; //8-bit, non inverted PWM
    TCCR1B = 1;    //start PWM
}

void set(int freq, int dly)
{
    OCR1A = freq;
    tick(dly);
}

void fish()
{
    char f[] = {0, 0, 0, 4, 5, 3, 6, 2, 7, 1, 5, 6, 8, 1, 8, 1, 8, 1, 8, 1, 8, 2, 7, 3, 6, 2, 7, 1, 8, 1, 8, 4, 5, 2, 3, 6, 7, 0, 0, 0};
    char i = 0;
    while (i < sizeof(f))
    {
        i++;
        OCR1A = 255 - f[i] * 15;
        blink();
        tick(20);
    }
}

void id()
{
    char f[] = {0, 0, 1, 2, 0, 1, 2, 2, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 2, 0, 2, 1, 1, 0, 0};
    char i = 0;
    while (i < sizeof(f))
    {
        blink();
        if (f[i] == 0)
        {
            OCR1A = 255;
            tick(tDah);
        }
        if (f[i] == 1)
        {
            OCR1A = 255 - fsk;
            tick(tDit);
        }
        if (f[i] == 2)
        {
            OCR1A = 255 - fsk;
            tick(tDah);
        }
        blink();
        OCR1A = 255;
        tick(tDit);
        i++;
    }
}

void slope()
{
    char i = 0;
    while (i < 25)
    {
        OCR1A = 255 - i;
        i++;
    }
    while (i > 0)
    {
        i--;
        OCR1A = 255 - i;
    }
}

int main(void)
{
    DDRA = 255;
    PORTA ^= (1 << 0);
    PORTA ^= (1 << 1);
    pwm_init();

    t_unit = 2300;
    fsk = 50;
    id(); // set to fast and ID once

    fsk = 50;
    t_unit = 65536; // set to slow for QRSS

    while (1)
    {
        id();
        for (char i = 0; i < 3; i++)
        {
            fish();
        }
    }

    return 1;
}
Markdown source code last modified on January 18th, 2021
---
title: Debut of the AJ4VD QRSS Fish
date: 2010-05-19 19:58:16
tags: python, qrss, old
---

# Debut of the AJ4VD QRSS Fish

__Finally!__ After a few years tumbling around in my head, a few months of reading-up on the subject, a few weeks of coding, a few days of bread-boarding, a few hours of building, a few minutes of soldering, and a few seconds of testing I've finally done it - I've created my first QRSS transmitter! I'll describe it in more detail once I finalize the design, but for now an awesome working model. It's all digital, consisting of 2 ICs (an ATTiny44a for the PWM-controlled frequency modulation, and an octal buffer for the pre-amplifier) followed by a simple pi low-pass filter.

<div class="text-center img-border">

[![](qrss-desk_thumb.jpg)](qrss-desk.jpg)

</div>

__My desk is a little messy.__ I'm hard at work! Actually, I'm thinking of building another desk. I love the glass because I don't have to worry (as much) about fires. That sounds scary, I know.

<div class="text-center img-border">

[![](qrss-transmitter_thumb.jpg)](qrss-transmitter.jpg)

</div>

__This is the transmitter.__ The box is mostly empty space, but it consists of the circuit, an antenna connection, a variable capacitor for center frequency tuning, and a potentiometer for setting the degree of frequency shift modulation.

<div class="text-center img-border">

[![](qrss-fish_thumb.jpg)](qrss-fish.png)

</div>

__Yeah, that's a fishy. __Specifically a goldfish (the cracker). It's made with a single tone, shifting rapidly (0.5 sec) between tones. So cool. Anyway, I'm outta here for now - getting back to the code! I think I'll try to make a gator next...

__Here's the code that makes the fish.__ It sends my ID quickly, some fish, then my ID in QRSS speed using PWM.

```c
#include <avr/io.h>
#include <util/delay.h>

const int tDit = 270 / 3;
const int tDah = 270;

char fsk;
unsigned long int t_unit;

void delay()
{
    _delay_loop_2(t_unit);
}

void blink()
{
    PORTA ^= (1 << 0);
    PORTA ^= (1 << 1);
    PORTA ^= (1 << 2);
    PORTA ^= (1 << 3);
}

void tick(unsigned long ticks)
{
    while (ticks > 0)
    {
        delay();
        delay();
        ticks--;
    }
}

void pwm_init()
{
    //Output on PA6, OC1A pin (ATTiny44a)
    OCR1A = 0x00;  //enter the pulse width. We will use 0x00 for now, which is 0 power.
    TCCR1A = 0x81; //8-bit, non inverted PWM
    TCCR1B = 1;    //start PWM
}

void set(int freq, int dly)
{
    OCR1A = freq;
    tick(dly);
}

void fish()
{
    char f[] = {0, 0, 0, 4, 5, 3, 6, 2, 7, 1, 5, 6, 8, 1, 8, 1, 8, 1, 8, 1, 8, 2, 7, 3, 6, 2, 7, 1, 8, 1, 8, 4, 5, 2, 3, 6, 7, 0, 0, 0};
    char i = 0;
    while (i < sizeof(f))
    {
        i++;
        OCR1A = 255 - f[i] * 15;
        blink();
        tick(20);
    }
}

void id()
{
    char f[] = {0, 0, 1, 2, 0, 1, 2, 2, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 2, 0, 2, 1, 1, 0, 0};
    char i = 0;
    while (i < sizeof(f))
    {
        blink();
        if (f[i] == 0)
        {
            OCR1A = 255;
            tick(tDah);
        }
        if (f[i] == 1)
        {
            OCR1A = 255 - fsk;
            tick(tDit);
        }
        if (f[i] == 2)
        {
            OCR1A = 255 - fsk;
            tick(tDah);
        }
        blink();
        OCR1A = 255;
        tick(tDit);
        i++;
    }
}

void slope()
{
    char i = 0;
    while (i < 25)
    {
        OCR1A = 255 - i;
        i++;
    }
    while (i > 0)
    {
        i--;
        OCR1A = 255 - i;
    }
}

int main(void)
{
    DDRA = 255;
    PORTA ^= (1 << 0);
    PORTA ^= (1 << 1);
    pwm_init();

    t_unit = 2300;
    fsk = 50;
    id(); // set to fast and ID once

    fsk = 50;
    t_unit = 65536; // set to slow for QRSS

    while (1)
    {
        id();
        for (char i = 0; i < 3; i++)
        {
            fish();
        }
    }

    return 1;
}
```

May 17th, 2010

Minimal QRSS Transmitter

Success! Amid a bunch of academic exams, psycho-motor tests, and other crazy shenanigans my dental school is putting me through, I managed to do something truly productive! I built a simple QRSS transmitter with an ATTiny44A microcontroller clocked by a 7.04 MHz crystal which generates FSK signals and modulates its own frequency by applying potential to a reverse-biased diode at the base of the crystal, the output (CKOUT) of which is amplified by an octal buffer and sent out through an antenna. As it is, no lowpass filtering is implemented, so noisy harmonics are expected. However for ~2$ of parts this is an effective QRSS transmitter!

I was able to detect these signals VERY strongly at a station ~10 miles from my house. I haven't yet dropped in a 10.140 MHz crystal and tried to get this thing to transmit in the QRSS band, but when I do I hope to get reports from all over the world! This is what it looks like:

The cool thing about this transmitter (aside from the fact that it's so cheap to build) is that it will work with almost any crystal (I think below 20 MHz-ish) - just drop it in the slot and go!

Markdown source code last modified on January 18th, 2021
---
title: Minimal QRSS Transmitter
date: 2010-05-17 11:13:52
tags: circuit, qrss, old
---

# Minimal QRSS Transmitter

__Success!__ Amid a bunch of academic exams, psycho-motor tests, and other crazy shenanigans my dental school is putting me through, I managed to do something truly productive! I built a simple QRSS transmitter with an ATTiny44A microcontroller clocked by a 7.04 MHz crystal which generates FSK signals and modulates its own frequency by applying potential to a reverse-biased diode at the base of the crystal, the output (CKOUT) of which is amplified by an octal buffer and sent out through an antenna. As it is, no lowpass filtering is implemented, so noisy harmonics are expected. However for ~2$ of parts this is an effective QRSS transmitter!

<div class="text-center img-border">

[![](simple_qrss_transmitter_thumb.jpg)](simple_qrss_transmitter.jpg)

</div>

__I was able to detect__ these signals VERY strongly at a station ~10 miles from my house. I haven't yet dropped in a 10.140 MHz crystal and tried to get this thing to transmit in the QRSS band, but when I do I hope to get reports from all over the world! This is what it looks like:

<div class="text-center img-border">

[![](aj4vd_thumb.jpg)](aj4vd.jpg)

</div>

__The cool thing__ about this transmitter (aside from the fact that it's so cheap to build) is that it will work with almost any crystal (I think below 20 MHz-ish) - just drop it in the slot and go!

April 3rd, 2010

Microcontroller Clocking a Transmitter?

I shouldn't claim this idea as novel. After googling around, I found another person who's doing the same thing, and now that I read his page I remember reading his page before, which is likely where I got the idea in the first place. I want to give him credit and hope that my project can turn out successfully like his! http://clayton.isnotcrazy.com/mept_v1.

Here's my idea: The core of any transmitter is an oscillator, and in simple transmitters (like QRSS devices), it's often a crystal. Frequency adjustment is accomplished by adjusting capacitance to ground on one of the crystal legs. Simple oscillators such as the Colpitts design (based on an NPN transistor) are often used (pictured).

See how pins 4 and 5 allow for a crystal, and pin 6 has a "CKOUT" feature?" I'm still not sure exactly what the waveform of its output looks like. The datasheet is almost intentionally cryptic. About the only thing I've been able to discover from the Internet is that it's sufficient to clock another microcontroller. However, if it's an amplified sine wave output, how cool is it that it might be able to produce RF at the same frequency at which it's clocked?

However in my quest to design a minimal-case long-distance transmitter, I'm trying to think outside the box. Although it's relatively simple, that's still several parts just to make an oscillating sine wave from a crystal. The result still has to be pre-amplified before sending the signal to an antenna. I'm starting to wonder about the oscillator circuitry inside a microcontroller which has the ability to be clocked by an external crystal. For example, take the pinout diagram from an Atmel ATTiny2313 AVR:

Taking it a step further, I wonder if I could write code for the microcontroller to allow it to adjust its own clock speed / frequency output by adjusting capacitance on one of the legs of the crystal. A reverse-biased LED with variable voltage pressed against it from an output pin of the microcontroller might accomplish this. How cool would this be - a single chip transmitter and frequency-shifting keyer all in one? Just drop in a crystal of your choice and BAM, ready to go. Believe it or not I've tested this mildly and it's producing enough RF to be able to be picked up easily by a receiver in the same room, but I'm still unsure of the power output or the waveform. If the waveform is an amplified sine wave I'm going to pass out. More likely it's a weak sine wave needing a preamplifier still, or perhaps even amplified square waves in need of lowpass filtering...

My wife snapped a photo of me working! It's a funny pic - I'm in my own little world sometimes…

Markdown source code last modified on January 18th, 2021
---
title: Microcontroller Clocking a Transmitter?
date: 2010-04-03 23:19:37
tags: qrss, circuit
---

# Microcontroller Clocking a Transmitter?

__I shouldn't claim this idea as novel. __After googling around, I found another person who's doing the same thing, and now that I read his page I remember reading his page before, which is likely where I got the idea in the first place. I want to give him credit and hope that my project can turn out successfully like his! [http://clayton.isnotcrazy.com/mept\_v1](http://clayton.isnotcrazy.com/mept_v1).

__Here's my idea: __ The core of any transmitter is an oscillator, and in simple transmitters (like QRSS devices), it's often a crystal. Frequency adjustment is accomplished by adjusting capacitance to ground on one of the crystal legs. Simple oscillators such as the Colpitts design (based on an NPN transistor) are often used (pictured).

<div class="text-center">

[![](NPN_Colpitts_oscillator_collector_coil_thumb.jpg)](NPN_Colpitts_oscillator_collector_coil.png)

</div>

__See how pins 4 and 5 allow for a crystal, and pin 6 has a "CKOUT" feature?"__ I'm still not sure exactly what the waveform of its output looks like. The datasheet is almost intentionally cryptic. About the only thing I've been able to discover from the Internet is that it's sufficient to clock another microcontroller. However, if it's an amplified sine wave output, how cool is it that it might be able to produce RF at the same frequency at which it's clocked?

__However in my quest to design a minimal-case long-distance transmitter,__ I'm trying to think outside the box. Although it's relatively simple, that's still several parts just to make an oscillating sine wave from a crystal. The result still has to be pre-amplified before sending the signal to an antenna. I'm starting to wonder about the oscillator circuitry inside a microcontroller which has the ability to be clocked by an external crystal. For example, take the pinout diagram from an Atmel ATTiny2313 AVR:

<div class="text-center">

![](attiny-2313.gif)

</div>

__Taking it a step further,__ I wonder if I could write code for the microcontroller to allow it to adjust its own clock speed / frequency output by adjusting capacitance on one of the legs of the crystal. A reverse-biased LED with variable voltage pressed against it from an output pin of the microcontroller might accomplish this. How cool would this be - a single chip transmitter and frequency-shifting keyer all in one? Just drop in a crystal of your choice and BAM, ready to go. Believe it or not I've tested this mildly and it's producing enough RF to be able to be picked up easily by a receiver in the same room, but I'm still unsure of the power output or the waveform. If the waveform is an amplified sine wave I'm going to pass out. More likely it's a weak sine wave needing a preamplifier still, or perhaps even amplified square waves in need of lowpass filtering...

<div class="text-center img-border">

[![](IMG_3206_thumb.jpg)](IMG_3206.png)

</div>

My wife snapped a photo of me working! It's a funny pic - I'm in my own little world sometimes…

<div class="text-center img-border">

[![](IMG_3241_thumb.jpg)](IMG_3241.jpg)

[![](IMG_3245_thumb.jpg)](IMG_3245.jpg)

[![](IMG_3250_thumb.jpg)](IMG_3250.jpg)

[![](IMG_3257_thumb.jpg)](IMG_3257.jpg)

</div>
March 16th, 2010

W4DFU Gator Seen in Canada

I don't have long, but the picture speaks for itself. Sent from Florida to Canada. I used VE1VDM's "Big Ears Grabber" in Canada.

Markdown source code last modified on January 18th, 2021
---
title: W4DFU Gator Seen in Canada
date: 2010-03-16 12:29:29
tags: qrss
---

# W4DFU Gator Seen in Canada

__I don't have long,__ but the picture speaks for itself. Sent from Florida to Canada. I used [VE1VDM's "Big Ears Grabber" in Canada](http://users.eastlink.ca/~ve1vdm/argocaptures/grabber.htm).

<div class="text-center img-border">

[![](gatorLow_thumb.jpg)](gatorLow.jpg)

</div>

March 12th, 2010

QRSS VD version 1.04 Released

I'm proud to announce the first public version of QRSS VD has been released!

Edit: QRSS VD is now on GitHub: https://github.com/swharden/QRSS-VD

Markdown source code last modified on January 18th, 2021
---
title: QRSS VD version 1.04 Released
date: 2010-03-12 22:52:21
tags: qrss
---

# QRSS VD version 1.04 Released

I'm proud to announce the first public version of QRSS VD has been released!

__Edit:__ QRSS VD is now on GitHub: <https://github.com/swharden/QRSS-VD>

<div class="text-center">

[![](qrss_vd_resume_thumb.jpg)](qrss_vd_resume.png)

</div>

<div class="text-center img-border">

[![](sampleCapture_thumb.jpg)](sampleCapture.png)

</div>
Pages