Tiny Multi-channel Module for an Aviation Receiver
A 10-channel preset tuning module for a voltage tuned aviation band kit receiver.

Introduction
I
recently purchased one of those low cost aviation band receiver
kits from a Chinese seller on the internet. This receiver design has
been around for many years, from a variety of suppliers. However,
the more recent Chinese-made kits have added some improvements. One
type, the version I purchased for less than $US20 including delivery
(to the UK), features front end VHF filter coils directly printed on
the PCB. This avoids the need for any difficult coil winding or filter
alignment. Another version of the design, from other Chinese suppliers,
uses standard coils which the vendors claim gives better sensitivity.
Some reviews suggest actual results are similar.
Some
additional, and most important, changes in these new kits compared with
the original 25 year old design have been made around the internal
power supply rails in the receiver. The new kits feature much better
voltage regulation, more RF bypassing, and better RF isolation. These
new kits are also more compact than the original older versions.
Here's a photo of the assembled board:

Figure 1 : Aviation band receiver with printed circuit coils in the front-end bandpass filter
The
kit contained good quality parts. No parts were missing, although I had
to download the PDF assembly instructions and schematic from the
seller's website. The receiver went together quickly and easily.
Alignment was equally fast and simple. All that was required was to
adjust the tuning coil to give the required tuning range (The little
green plastic component with a brass screw in the middle of the
PCB), then adjust the IF transformer (The component with the blue
coloured adjustment at centre left of the PCB in Figure 1) to give
the best received signal strength.
The receiver worked
immediately without any difficulties. Most importantly, there were no
suggestions of instability or erratic operation. That’s in stark
contrast to the original version of this receiver that I’ve have also
used. Those older designs could be quite touchy.
The basic
receiver design, however, retains one obvious limitation in common with
the older versions. Tuning is done using a standard potentiometer. Its
270 degrees of rotation tunes the receiver across up to 30MHz of the
aviation band. That’s a very fast tuning rate.
Also, there
is no indication what frequency you are receiving. In a similar
receiver (which I will describe elsewhere on my website in due course),
I replaced the standard analog first oscillator with a direct digital
synthesis (DDS) oscillator and an LCD display to resolve the problem.
This time, however, I wanted to try a cheaper and easier approach.
Aside from wanting to see what the new Chinese kit was like to build
and use, this was the main reason for purchasing this kit.
Channel Tuning
As
I mentioned, this kit receiver’s tuning control uses a standard
potentiometer. This control adjusts the DC voltage which is connected
to a variable capacitor “varicap” diode. That changes the capacitance
of the varicap which, along with a small variable inductor, form a
resonant circuit. This determines the received frequency.
Replacing
the single turn pot with a 10-turn pot can provide a more precise
tuning control, but these 10-turn pots are quite tedious to tune if you
wish to change between different aviation frequencies, especially in
the absence of a frequency display.
Since
aviation uses a series of fixed channel frequencies in most locations,
another approach is to replace the single turn tuning pot with a set of
multiturn preset resistors connected with a rotary switch. Each preset
resistor can be set to give a specific voltage would then tune the
receiver’s oscillator to a specific local channel frequency. Four
channels would be enough for most situations, but up to ten channels
would be useful. However, this would require a large number of parts,
and the final result could be quite expensive. It would also require
extra space for a PCB to contain the added parts and front panel space
for the switch.
I decided to try an alternative method,
using a microcontroller to generate the required preset channel
voltages directly. These DC voltages can be generated using the
internal pulse-width modulated (PWM) digital to analog converters (DAC)
found on these chips. I could then select any one of a number of
channels in turn quite easily using a simple pushbutton.

Figure 2 : Channel selection control board during software development next to the receiver
Of
course, there are some challenges with such an approach. First, to be
able to tune the receiver to any 25kHz channel across the 30MHz-wide
aviation band requires 10 or 11 bit DAC resolution, and ideally 12 bit
resolution. That’s beyond the usual 8-bit resolution range of the PWM
DAC systems typically available on most low cost microcontrollers.
Fortunately,
the ATtiny family includes several devices with both 8 and 16-bit PWM
outputs. However, while a 16-bit PWM output looks attractive, a
potential problem is the maximum PWM clock speed when generating such a
high resolution output. It’s typically around 120Hz if the standard 8
MHz internal clock is used. Filtering the resulting PWM output to
remove such a low frequency PWM clock to give the desired DC output is
the first challenge, as is the resulting step-time response.
Once
again, there are some available solutions. One approach is to use a
special synchronized filter on the 16-bit PWM output (See reference 1).
This solution is a little more complex, and it also requires an extra
I/O pin. However, it certainly delivers excellent performance. An
alternative approach is to combine two 8-bit PWM outputs, an idea
suggested by the same design engineer a few years earlier (See
reference 2). It’s a little easier to implement and requires fewer
parts, so I decided to try this method.
A further problem
which also has to be considered is the output voltage range available
from PWM outputs. Typically, these are limited to the supply voltage of
the microcontroller, usually 3.3V or 5V. However, most varicap tuning
circuits require far higher voltage ranges, often up to 8V or even as
high as 32V. The solution for this is to add a buffer stage to the
design.
Finally, there’s the question of a display.
Ideally, we should have a digital display showing the selected
frequency. Since I wanted this to be a simple design, I decided to just
use a 7-segment LED display to show the selected channel. Additional
buttons would allow me to set the required output varicap tuning
voltage for each receiver channel.
Design Description
The
14-pin ATtiny84 microcontroller has two independent PWM outputs, and it
has (just!) enough pins to also support the required pushbuttons and
drive the LED display. One PWM output is limited to 8-bits, but the
other PWM output can operate in a number of modes from 8-bits to full
16-bit PWM. These two 8-bit PWM outputs can operate at up to 32kHz from
the internal 8MHz internal clock. This 32kHz PWM clock allowed me to
use very simple RC-based filtering to convert the PWM output into the
required DC tuning voltage.
The resistors on the
ATtiny84’s PWM outputs (3k9 and 1M) are chosen because they have a
256:1 ratio, required with this method. The subsequent passive RC
components provide the simple low pass filtering. The low leakage 1uF
capacitor I used is probably a bit of an overkill; A 330nF or 470nF MKT
type would also be fine here, and would also speed up the channel to
channel tuning time, currently around 200 – 300mS. Although this
tuning time might appear lengthy, it is not a problem in this
application where most of the time is spent listening on one or two
active aviation channels. It’s also the reason I didn’t consider
implementing a channel scan feature.
A low cost rail-to-rail
op amp completes the design. This allows the DC output from the
filtered PWM outputs to be scaled to the appropriate voltage for tuning
the receiver, in this case for the maximum varicap voltage of 8V.
There
is one remaining I/O pin free at this point, the Reset pin. I could
have reduced the parts count (by two diodes) by directly connecting the
Down button to this pin. This requires setting the fuses to remove the
reset function from this pin. However, doing this would then require
the use of a special HV programmer during development. To avoid that, I
added the two diodes and removed that hassle.
The resulting schematic is shown below.

Figure 3 : Channel selection control board schematic - The board is powered from the receiver
Construction
The
channel tuning module was built on a small piece of prototyping board.
The tall narrow board shape matches the dimensions of the kit receiver
board. It’s a tight squeeze, but it’s just large enough to hold the
display and its dropper resistors, the ATtiny84, the LMC662 op-amp, and
the TS2950 low-voltage-drop 5V low current regulator.
You can see a close-up of the board adjacent.
Figure 4 : All of the components fit onto a small piece of prototyping board which fits alongside the receiver PCB
Software
As
usual, I used Bascom-AVR to write the software. It’s a Basic-like
language which is ideal for such simple tasks. The ZIP file available
in the Download section below includes the commented source code for
those wanting to look at my awful software in more detail, or for
others wanting to change it for their own applications. The ZIP file
also contains the HEX file for direct programming of the chip.
The
receiver’s ten channel memory requires the use of the ATtiny84’s
internal SRAM and EEPROM. The SRAM holds the channel tuning data while
the receiver is turned on. The EEPROM memory allows the tuning settings
to be safely saved when the power is turned off. The data is recovered
from EEPROM and copied into SRAM when power is applied.
The
ATtiny84’s EEPROM can be programmed in two ways; You can use a standard
programmer to directly program the tuning data into the EEPROM by
copying the contents of the EEP file into the EEPROM (That
file is found in the ZIP file in the Download section below). This is
normally done just once, when you build the receiver. This example file
sets up a series of preset voltages across the aviation band. It’s an
optional method because it is also possible to just use the front panel
Up and Down tuning buttons to program the EEPROM memory. If this
latter method is chosen, the board will initially start up the first
time with every channel set to 0V (Actually, they will all set to about
75mV, the typical ground rail voltage limit when using the suggested
LMC662 op-amp). Most folk will probably just use the Up/Down buttons
method.
To explain what is going on in the software, let’s look at how the receiver is normally used with this module installed.
The
“Channel” button selects the required channel. Each press of the button
selects the next of the ten available channels, starting (at power up)
from channel 1. Channel 10 is displayed as “0”. A further push of the
button selects channel 1 again.
When the desired channel has
been selected, the software recalls the 16-bit tuning data required for
the two 8-bit PWM outputs from SRAM. This 16-bit value is immediately
loaded as two 8-bit values into the two PWM registers. When the two PWM
outputs are combined via the two resistors (3k9 and 1M), filtered, and
scaled via the opamp buffer, the output voltage then changes to the new
value required for that channel.
The tuning voltage can also
be adjusted by the user, if necessary, whenever a channel has been
selected, using the Up and Down buttons. Pressing the Up button will
increase the output voltage, slowly at first. However, the longer the
switch is pressed, the faster the output voltage will increase. This
makes setting a channel to another frequency several MHz away somewhat
faster. Similarly, pressing the Down button will decrease the output
voltage. Together, they allow any voltage to be selected in
(approximately) 3mV increments across the 8V output range.
I
use a digital voltmeter to monitor the output voltage on pin 1 of the
op-amp when I’m doing this adjustment. To save time, I first used the
normal single turn tuning pot supplied with the kit to find all of the
aviation channels in my area. I then measured and recorded the voltages
on the varicap for each channel. Those values were used to calculate
the DAC values initially programmed into the EEPROM.
Whenever
either the Up or Down button has been pressed, even briefly, a
background timer is started. The ATtiny84 will wait for about 10
seconds after the last button has been released, just in case the user
wishes to carry out further Up/Down fine tuning, before writing the new
value to EEPROM. By waiting, multiple writes to the EEPROM can be
minimised. According to the datasheet, any ATtiny EEPROM memory
location is limited to a maximum of 100,000 writes. While it’s highly
unlikely anyone would ever get close to this limit in a channel-based
receiver like this, this programming approach minimizes the number of
write cycles.
To show the user that this data write to
EEPROM had been done, the display briefly shows “P” (for
“Programming”). The display then reverts back to displaying the current
channel number. It does not matter if the user has subsequently changed
channel to another channel within this 10 second window. The software
keeps track of this and updates the correct memory with its new value.
Programming the ATtiny84 with the Software
The ATtiny84 has four types of programmable memory:
- SRAM
– This is memory which contains variables used by the software
including the channel data read from EEPROM by the software whenever
the receiver is turned on
- Flash memory - The program software is saved here once, at build-time
- Fuses - These settings determine how some parts of the ATtiny84 operate. These are also saved here once, at build-time
- EEPROM
– This memory can be programmed with data at build-time, but this data
can be later altered by the user (via the Up/Down buttons). These new
values are saved again in EEPROM by the program software. EEPROM data
is retained when power is turned off.
Flash
memory is programmed by the Intel Hex formatted HEX file using a
standard programmer such as the widely available USBasp programmer and
programming software such as Khazama or Extreme Burner.
The
current version of this software occupies less than 2k of flash memory.
As a result, the smaller compatible (and similarly priced) ATtiny24 and
ATtiny44 chips can also be used in this design.
Fuses are
also programmed using the same programmer and programming software
using the appropriately labelled tabs in Extreme or Khazama. The
settings in this case are:
- Lock and Extended: (0ffh)
- HIGH: 11010111 (0d7h)
- LOW: 11100010 (0e2h)
As noted earlier, I
have also provided an example EEP file in the ZIP file available from
the Download section below. This is set with a series of voltages
spread across the tuning range, just as an example. Again, this file
may beprogrammed into the device using Extreme or Khazama via the
appropriate tab in the program.
In this design, the flash, fuses and EEPROM may be programmed in any order.
Installation in the Receiver
Remove
the tuning potentiometer W1, resistors R21 and R26, and capacitor CP11
from the receiver. (See Figure 5) The component part numbers refer to
those marked on the kit PCB.
Figure 5 : The tuning potentiometer and several other parts are removed as part of this modification
Next,
temporarily remove the headphone socket (J3) from the PCB. (See Figure
6) This allows us to make some minor changes to allow an internal
speaker to be fitted to the receiver. The speaker will then be
automatically muted whenever an external speaker or headphones are
plugged into this socket.
Figure 6 : The headphone socket is temporarily removed ...
Cut the top-side PCB tracks as shown in Figure 7.
Figure 7 : ... to allow changes for the internal speaker and automatic muting for headphones
Now refit the headphone socket (J3) back into the PCB.
Add new jumpers and wiring for the speaker on the solder-side
of the PCB as shown in Figure 8. The blue and yellow wires going away
to the right of the photo go to a new 8 ohm 1W 50mm diameter speaker
which will be mounted into the new receiver case.
Figure 8 : New wiring is added for the internal speaker
The
new channel selection control board can now be wired into the receiver.
Place it next to the main receiver board as shown in Figure 9. There
are just three connections from this board to the receiver; The 8V
supply (Red wire in Figure 9) is wired to +8V using the PCB
through-hole previously used by R26. The ground wire (Green wire in
Figure 9) can be connected to ground using the PCB through-hole
previously used by R21. The third (white) wire is the varicap tuning
voltage. This goes to the PCB through-hole previously used by the +
terminal of CP11. These connections can all be seen in Figure 9 below.
Figure 9 : Connecting the new board requires the addition of only three wires
Receiver Enclosure and Knobs
I
wanted to give this receiver a slightly different appearance to the
usual bland rectangular box. I also had to allow sufficient space for
the additional control board. All of these enclosure parts were all
printed on my 3D printer using standard PLA filament printed in 0.2mm layers.
There
are five STL-formatted files which are all available for download
below. These include the main case, the back panel, the knob,
pushbutton caps, and back panel washers. Two knobs are required.
I
designed the case with DesignSpark Mechanical while the knobs are a
design obtained from Thingiverse and modified slightly in scale to suit
the squelch and volume control shafts.
Figure 10 : 3D printed case and rear cover. The rear panel holes are for the antenna and DC sockets.
Figure 11 : The knobs, pushbutton caps and back panel washers are also 3D printed
The
receiver board just slides into place. I allowed a little extra space
in the slots for slight variations in PCB dimensions. Before fitting,
insert the three pushbutton caps through the front panel. The control
board can thn be mounted using the 7-segment LED hole as a guide.
Before hot-gluing the board in place, check the three pushbuttons are
all operating correctly.
Now mount the speaker, again
using hot-glue. The speaker I used ia a 50mm (2") diameter flat
speaker. With the space inside the receiver enclosure, this
speaker delivers a good audio level.
The enclosure is completed by adding the front panel artwork. It is also available for download below.
Figure
12 : The front panel artwork was printed onto paper using a colour
laser printer, covered with transparent adhesive film, and glued to the
enclosure. Channel details can be added with a marker pen.
Operation
There
is probably little more that needs to be explained. In normal use, the
Channel (CH) button is pressed to select the required channel.
If
a channel frequency needs adjustment, press the Up and Down Set buttons
to adjust the varicap voltage which, in turn, changes the received
frequency. Once correctly tuned, leave the Set buttons alone for about
ten seconds, and a "P" (programming) will appear on the LED display.
This indicates the new data has been written to the channel EEPROM
memory.
Volume and Squelch controls operate as usual. Inserting headphones will mute the internal speaker.
Final Comments
There
are a few “enhancements” which could be made to this simple design. For
example, the up/down buttons could be replaced by a rotary encoder
(and some additional software!) to provide a continuous tuning
function.
There is an obstacle to this enhancement: The RC
filtering on the simple DAC limits the tuning speed with such an
arrangement, and this may prove to be too slow in practice. However,
most rotary encoders come with an integrated pushbutton (Pressing the
knob inwards on such controls usually closes the internal switch
contacts). That switch could be used to select between coarse and fine
tuning steps to give a more responsive control. I have not done any
work to test this idea, however.
It’s also possible to add
more memories, but that would need a processor with more pins as well
as a larger display, or possibly a change to an LCD display of some
type.
This basic hardware used in this design has some other possible
applications, some of which I may explore in future. For example, it’s
possible to use a nearly identical circuit and much of the existing
software to adjust the
voltage and current settings in a variable power supply. For that
application, I could probably use a reduced 10-bit DAC resolution. In
turn, that would permit faster adjustment of voltage and current, very
desirable in a variable power supply.
Figure
13 : The rear view of the receiver shows the back panel which
provides access to the antenna and DC power connectors. It is mounted
using four 2.5mm self-tapping screws. I added 3D printed cup washers to
improve the overall appearance.
References
1. Stephen Woodward, “Fast-settling synchronous-PWM-DAC filter has almost no ripple”, EDN, May 01, 2008
2. Stephen Woodward, “Combine two 8-bit outputs to make one 16-bit DAC,” EDN, Sept 30, 2004
Downloads:
Software: This
ZIP file includes the Bascom-AVR source code, the EEP file, and the HEX
file for direct programming of the ATtiny24, 44 or 84 chips (Any of
these devices may be used)
3D Files: This ZIP file contains all of the industry-standard STL files for the case, back cover, knob, button caps and cup washers.
Panel Artwork: The JPG file for the front panel artwork
Want to go back to the main page? Click
here to
return directly.