Monday, October 14, 2024

QRP Kits Easy Receiver

As a refreshment after all my recent home brew activity I built a nice little direct conversion receiver kit from QRP Kits aka "Pacific Antenna".


It's a classic NE602 + LM386 direct conversion receiver as described in Experimental Methods for RF Design. I've built these before. This version ads an RF bandpass filter to the front end and has an unbalanced audio chain to the LM386. It drives headphones just fine but is a little soft into my bench receiver.

Even though it only covers a small portion of the band - you move that portion with the trimmer capacitor - tuning is very sensitive and they do suggest that a multi-turn pot would be a good idea. I find it drifts a bit. Some of the supplied capacitors had very tiny and indistinct markings but the kit went together well and it worked on first power up.

Here it is receiving a parks operator:


The documentation is good and available on the web page. My kit arrived here in Melbourne, Australia, three weeks after ordering. Pretty good.


Wednesday, October 09, 2024

Tech news spot on ABC Radio.

I was a guest on ABC radio's "Nightlife" program talking about the amazing "audio overview" feature of Google's NotebookLM that generates a conversation about a topic you give notes on. 

Also Pig butchering scams are targeting Australians and are social media platforms really biased against conservative users? 

Listen here:

https://www.abc.net.au/listen/programs/nightlife/nightlife-tech-talk-with-peter-marks/104446916  

Sunday, October 06, 2024

Dremel cut PCB construction

Prototyping small circuits where it's not worth designing and etching a board can be done in many ways. I've used "ugly" (which I think is rather beautiful) where components float above the copper ground plane; MePads where small copper pads are superglued to the base plane; or strip board with track cuts.

Recently I've converged on a system that's working quite well for me.

The circuit is drawn out in pencil and the outline of the PCB rectangle is traced.


Working through what should not be connected to what, I draw the cut lines under a spaced out version of the circuit. Here's my drawing and below the final working board.


I mark up the board with the planned cuts.


To make the cuts in the copper, I lay the Dremel with a cutting wheel on the bench and lean it so that it just cuts the copper. I draw the board along the wheel, leaving the Dremel stationary. I can get pleasingly straight cuts this way. It is worth checking for non-conduction between areas with a multi-meter as sometimes a strand of copper can be left at a corner.


To hold components against the board for soldering you need some sort of "helping hands" but the one I learned about from an Adam Savage video is called Omnifixo. They are not cheap but are well worth it for all the cleverness.


For years I've been using a little, rather low power, bench soldering iron but I find that quite a lot of power is needed when soldering to large copper areas. I have switched to a 70W iron and it is a revelation.

Naturally, I first had the transistor in the wrong way around, but after that was fixed. The joy of oscillation was experienced.


I'm sure this is not news to any readers but I thought it worth documenting for some who might be getting started with home construction. It's not as compact as other techniques but lends itself to making changes.

One other thing I do these days is add an LED (and resistor) to the power line. It looks nice and I can't tell you how much time I've wasted wondering why an un-powered circuit doesn't work!

Friday, October 04, 2024

Experimenting with an SSM2167 compressor limiter board

The home brew AM transmitter on the bench at the moment has thrown up the issue of either low or over modulation from my mic audio. Some time ago, I purchased a couple of interesting boards described as "SSM2167 Preamp Compressor Limiter Noise Gate Dynamics Processing Module DC 3V-5V Microphone Preamplifier". They are under AU$5 from AliExpress and really tiny.


To aid with experimentation, I've mounted mine on a carrier board.


R1 on the board controls the noise gate, which I'm not too interested in. R2 controls compression and came with a 1k resistor in place. The data sheet has this table:

1k would give almost no compression. A strange choice given how the boards are marketed. Happily there are big through holes available on the board for both resistors.



With the un-modified board I fed a 1kHz tone in and get peak to peak voltages:

50mV -> 440mV
100mV -> 880mV
200mV -> 1.43V

Higher inputs do not give higher output. The output waveform looks pretty good, so not clipping. Gain is rather low for my dynamic mic however.

I replaced R2 with a 100k resistor and it has much more gain.

5mV -> 880mV
10mV -> 960mV
20mV -> 1.06V

Output level stops there and again gain is being reduced.

Stephen, VK2BLQ, brought this idea to my attention as it has been discussed as helping the uBitx radios.

Wednesday, October 02, 2024

First contact with home brew AM transmitter on 7.125

For too many weeks I've been tinkering with a small transmitter for the active AM frequency of 7.125Mhz and just now I called CQ and was kindly answered by Ross, VK3ARW. He reported good signal strength both where he is (west of Bendigo) and on the Ironstone ridge SDR in South Australia. The transmitter is home brew (although I used a Jaycar mic preamp kit).


I've been testing by listening to myself on the PKLoops SDR.


The transmitter uses an Arduino Nano that simply boots up and tells an Si5351 to put out 7.125MHz. There's an RF buffer using a 2N2222. The magic happens, the generation of AM, using a simple diode ring mixer that is set to be off balance. Mic audio, from the preamp, is fed in and out comes AM. (This technique was mentioned by Dave, VK3ASE, who also uses it). There's another 2N2222 gain stage then a low pass filter. Next I have the three stage RF power amp from Drew Diamond's 80m transmitter. Finally another low pass filter for 40m.


To answer Ross's question.. out of all this I get about 1.5W so, for the sake of getting some contacts I've fed this in to a little RF amp that gives about 25W peak.

I must say I'm astonished that I didn't get RF feedback or other instability given the construction. Despite Ross's kind words on the audio I can see that a peak limiter is needed to keep modulation up without over-modulating.

Sunday, September 29, 2024

Python code to generate WSPR audio tones

Ross, EX0AA, is working to do WSPR on very low frequencies and asked for some help generating WSPR tones as audio directly. There are several projects around that generate WSPR via GPIO pins, Si5351s or an AD9851 DDS.

I grabbed the AD9851 code from PH0TRA, removed the DDS code, and with the help of ChatGPT, modified it to generate audio directly using pyaudio. This works both on my Mac and on a Raspberry Pi with no modification. The audio comes out of the default device, and if you plug in a USB audio dongle it comes out of there.

It seems to decode just fine with acoustic coupling.


My code is here. You'll also need genwsprcode.py modified by PH0TRA from code by the fabulous Mark VandeWettering K6HX.

You'll need to use Python 3 (of course) and install pyaudio and probably numpy.

Usage: python3 wsprgen.py CALLSIGN GRID dBPower BASE_AUDIO_FREQUENCY

Thanks Ross for the push to make this. It could be handy for others.

Installing on a raspberry Pi

Thanks for the prompt from AA7US asking how to get going on a raspberry pi.
  • Grab my code from the GitHub gist. (you can download the file or copy and paste).
  • Grab PH0TRA's code from here. Put it in the same directory.
  • Install the needed python modules:
    • sudo apt install python3-pyaudio
    • sudo apt install python3-numpy
  • In a terminal run the program like this:
    • python3 wsprgen.py --no-delay CALLSIGN GRID4 DBM 1500
Obviously replace CALLSIGN GRID4 DBM. 1500 is the base audio output frequency in Hz.

--no-delay starts outputting right away, good for testing. Remove that to have it wait for the top of the 2 minute block. You'll get a bunch of output from the audio software but it seems to work after a few complaints. Here's my output:

python3 wsprgen.py --no-delay vk3tpm qf22 33 1500
symbols
 3,1,0,0,0,2,0,0,1,2,0,2,1,1,1,0,2,2,1,0,2,3,0,1,3,1,1,0,0,2,0,2,0,0,1,2,2,1,0,3,2,2,2,2,2,2,3,0,3,1,2,0,3,3,0,3,2,2,0,3,3,2,3,2,2,2,0,1,1,0,1,2,1,2,3,2,3,2,0,3,2,0,3,2,3,1,2,0,2,1,1,0,3,2,1,2,0,0,3,2,2,2,0,0,3,2,2,3,2,2,1,3,1,2,3,1,2,2,3,1,2,1,2,2,0,1,1,3,2,2,2,0,2,1,2,3,2,2,3,1,0,0,0,0,0,0,2,1,1,2,1,2,3,3,0,2,2,3,1,2,0,2
ALSA lib pcm_asym.c:105:(_snd_pcm_asym_open) capture slave is not defined
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.front.0:CARD=0'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM front
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.surround51.0:CARD=0'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM surround21
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.surround51.0:CARD=0'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM surround21
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.surround40.0:CARD=0'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM surround40
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.surround51.0:CARD=0'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM surround41
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.surround51.0:CARD=0'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM surround50
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.surround51.0:CARD=0'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM surround51
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.surround71.0:CARD=0'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM surround71
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM iec958
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM spdif
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM spdif
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
ALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dsp
ALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dsp
ALSA lib pcm_a52.c:1001:(_snd_pcm_a52_open) a52 is only for playback
ALSA lib confmisc.c:1369:(snd_func_refer) Unable to find definition 'cards.0.pcm.iec958.0:CARD=0,AES0=6,AES1=130,AES2=0,AES3=2'
ALSA lib conf.c:5180:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5703:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2666:(snd_pcm_open_noupdate) Unknown PCM iec958:{AES0 0x6 AES1 0x82 AES2 0x0 AES3 0x2 CARD 0}
ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field card
ALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'
ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field card
ALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'
ALSA lib pcm_dmix.c:999:(snd_pcm_dmix_open) unable to open slave
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
Waiting for next WSPR TX window...
Start of transmission on: 03:20:04
Frequency: 1,500 Hz
symbol = 3, out_frequency = 1504.39453125
symbol = 1, out_frequency = 1501.46484375
symbol = 0, out_frequency = 1500.0
symbol = 0, out_frequency = 1500.0
symbol = 0, out_frequency = 1500.0
symbol = 2, out_frequency = 1502.9296875
symbol = 0, out_frequency = 1500.0

You'll hear the tone on the default output. In my case I plugged in a USB audio dongle.

Wednesday, September 25, 2024

The Secret Life of the Radio

Thanks to Lindsay, VK3GX, for bringing this wonderful BBC program to my attention. The team shows the development of radio and makes various transmitters and receivers. They build a coherer and demonstrate it for example.


Keep watching after the end credits for some comments from the presenter.

Incidentally, the cartoon depiction of Marconi's home are quite accurate. I visited it some years ago.

Tech news spot on ABC Radio

How do you remember your passwords? Making up and remembering unique, complex passwords is a struggle for many of us. Those days are ending. What are PassKeys and how will they help? Plus, Modern cars have many "driver assist" features. Things like lane following and emergency braking. Car speed-warning devices are spreading, all cars sold after 2030 in California will be equipped with either GPS or a front-facing camera that will give warnings if a driver is travelling more than 10 miles over the limit. Tech Guru Peter Marks, software developer and technology commentator from Access Informatics with Philip Clark on Nightlife with all the latest news and issues in technology. 

You can listen here.