OBSOLETE! Please check the new development for the FPGA based decoder.Currently there are just 3 full component kits available, so react quick if you want to get one of these last.
PICADSB Version 8 (click on it to get a higher resolution top view)
ADS-B telegrams, as they are sent from aircrafts on 1090MHz, are widely used as source for a passive radar system. While in the past the few commercial units that were on the market appeared quite expensive, Andy presented here a receiver which has a quite reasonable price and also a very good performance.
The receiver's output, which actually is a signal level indication of 10MHz bandwidth around 1090MHz, requires a decoder which transfers the telegrams into a format that can be understood by common MMI software, such as COAA PlanePlotter.
There are mainly two decoders known, an ATMEL based decoder solution and the PIC 18F2550 solution by Bertrand Velle, which I choose as basis simply because I have a very handsome PICKit-2 programmer. I also added an RS232 to USB converter in order to interface easier to all PCs, to connect several units to one PC, to provide power and, as it developped over time, also to increase the data rate by a significant factor.
Schematic: (click on the image to get PDF)
Here you can get the PICADSB8 schematic (PDF)
Basically this is the decoder circuit as introduced by Bertrand Velle with some extensions.Serial Interface:
|Serial Control||Standard RS232 (MAX232)||Serial over USB|
|Power from USB||powered from USB||external 5V supply (using connector X1)|
In the current design, and as the kits with pre-soldered FT232 are delivered, the power to the PIC is always on. In case that you do not like this but have the power applied just after enumeration, download the tool from FTDI's web page and reconfigure your FT232 to get permission for 250mA right and switch on power after getting permission from the PC.
Input connector JP1
To make clear how the input connector JP1 is wired.
|JP1 Pin||Function||miniADSB suggested color|
|1||+5V (use 47R as Rfuse)||red|
|5||RSSI input||leave free|
PICADSB7/PICADSB8: The board also includes a
comparator circuit around IC30. The reference
is built through a low pass filter 470k/56pF. With this, the comparator
level is aligned upwards when strong signals are received.
The input signal must be shifted below the comparator level, which is done using the poti R7 and resistor R6. Adjust this for highest sensitivty, means a maximum telegram rate at all.
PICADSB9: With the
experience of the two versions we found that the comparator's reference
doesn't raise quickly enough at strong signals. The combination of
D31/R33 now does this much quicker, and so does R31 discharge with
around 10 times longer time constant. Additionally the biasing is done
in a different way now, removing the DC part from the input signal with
C12 and re-biasing below the comparator's reference level through an
adjustable DC voltage. This will keep the amplitude of weak signals
This is also close to the improvement suggestion for ADS-B reception
which is telling to set the comparator level to the top signal level
minus 6dB. More about this further down on this webpage.
I regularily see planes in a distance of 220nm with this decoder, and do not have a doughnut effect for the planes passing by for the local Munich airport (and if I say close, they are at around 2nm distance).
|Solder bridge SJ1/SJ2||SJ1||SJ2|
|Analog to digital conversion||analog
local AD converter
(as for miniADSB receiver)
external AD converter
Place plan and bill of materials: (click on the image to get PDF)
The new PICADSB8 board has some minor cosmetic changes:
|PICADSB8 top components
||PICADSB8 bottom components
|PICADSB9 top components
||PICADSB9 bottom components
parts - always needed
R1 R2 10k
R3 R9 680R (2)(4)
R4 FUSE or 33R
C1 C2 22p
C10 100n (4)
C11 47µF (5)
C7 47n (5)
D2 LED 3mm blue
D3 LED 3mm green
IC1 PIC 18F2550
Q1 Crystal 16MHz
JP1 5 or 3 pin header
JP2 6 pin header (1)
JP5 2 pin header (1)
JP8 4 pin header (1)
JP9 JP3 3 pin header
S1A S1B S1C 2 pin header
(1) may be ommited if not used
(2) see extra note about resistors used at LEDs below
(4) SMD 0805 for PICADSB8/9
(5) Some users reported problems if this capacitor is equipped
On PICADSB7, you have to solder two
resistors 10kOhm to the bottom of the PCB! (see below)
|Parts that are needed if using
RxControl alarm function
R5 560R (2)(4)
D3 LED 3mm red
Parts that are needed for USB interface
R20 R21 R25 680R (2)(4)
R22 10k (3)
R23 1k (3)
C20 C22 100n (4)
D20 D21 LED 3mm yellow
D22 LED 3mm green
T20 BC558 (3)
J20 USB female Type B
JP22 2 pin header or bridge (3)
Parts that are needed for standard RS232 interface
C3 C4 C5 C6 10µ
SV3 10pin 2row pin header
(3) only used if power over USB is used
|Parts that are
needed if using the LM311/MAX942 analog to digital converter
R7 4k7 spindle trimmer
C31 100n (4)
R7 4k7 spindle trimmer
C12 100n (4)
C31 100n (4)
From PICADSB8 on, I also provide a 3 pin cable free of
extra charges. Swap the black and the brown cable before
mounting! The spring in the connector can be released with a
sharp knive easily. Then the colors are:
Red = +5V
Black = GND
Brown = Signal
PICADSB7 PCB top
PICADSB7 PCB bottom with FT232
FT232 soldered to bottom
If you are using the standard serial interface with MAX232, setting up the connection to the PC is pretty common and shall not cause any problems.
In case that you decided to use the Serial over USB, the operating system will probably ask you to install an USB driver when connecting the unit for the first time. You will find the on FTDI's web page here. After you have installed the driver, open the device manager and check which COM port became assigned to the new unit. That is the number you have to use in your MMI application.There are 6 LEDs on the board:
|LED name||suggested color||meaning|
|D22||green||USB is plugged|
|D21||yellow||blinks when data are transmitted from PICADSB to PC via USB|
|D20||yellow||blinks when PICADSB receives data from PC|
|D3||green||ON when PC has enumerated (recognized) the USB port|
|D2||blue||SYNC LED: flashes whenever a telegram start was received and is beeing processed|
In case that you connect the unit for the first time, for testing purposes, open a simple terminal application to the COM port that PICADSB uses. (Most users have Hyperterm (which cannot handle 1MBit) available, but there are also Teraterm or Putty).
Jumper S1C selects the serial interface parameters:
|Serial Interface||115kBit, 8Bits 1 Stopbit, no parity, no handshake||1MBit, 8Bits 1 Stopbit, no parity, no handshake|
The RxControl software supports several data formats. The AVR raw format (Type
"3") is are just a hexdump
of the received frame. With this format the decimal conversion of the
received data is done in the MMI software, for example PlanePlotter. On the terminal, it looks like
In case that you want to see the messages in the RxControl clear text decoded format (Type "1"), you have to enter your own coordinats in HEX format to the PIC. Here is how you convert your location into hex:
|DD MM SS||48° 21' 56"||11° 28' 42"|
|divide seconds by 0.06||56 / 0.06 = 933||42 / 0.06 = 700|
|DD MM.MMM||48° 21.933'||E 011° 28.700'|
|convert to hex||0x004993AD||0x001138FC|
Now, in the terminal application, press 'P' button (capital
letter!) and enter
the LON and LAT values from these hex values.
Then you will get an output like this:
What is so
special with your AD converter?
The AD converter is using a very short time constant in order to create the comparator's reference and herewith somewhat aligns to the signal strength, strong signals will be decoded as well as weak signals. I live in the approach path to Munich airport's runway 28L and some planes are even flying over my house. These are decoded as well as planes up to a distance of 200nm. There is no doughnut effect.
How can I
distribute processing load in the best way?
The RxControl software does not receive and decode in parallel due to processing power. Let Planeplotter do the decimal conversion, use the AVR raw format (format '3').
Click on the pictures for higher resolution (drawing from orignal web page, in order to copy before it disappears there)
A final note for manufacturing: Take a long wire and put markers for
sections on it: 136mm -> 65.5mm -> 205mm -> 65.5mm
Then first roll the inductors (1.5 turns onto a 9.5mm drill) and second do the 90° bends in order to get it straight.
Note: Add a
10kOhm SMD across the input if you are using such an antenna which is
grounded in order to prevent ESD descruction of the SAW and the first
Another good antenna, which is easy to build (you may leave away the loop with acceptable degradation) can be found on Edward's page.Which connectors and which cable shall I take for the antenna?
|Green: ADS-B signal
Magenta: Comparator reference
Yellow: Output of AD converter
It is clearly visible that the PIC, which samples the input at 25% and 75%, reads a '1' at both times and so does not recognize the sync at all.
|As you see, the RC combination was
made a little
bit faster, using R31 (47k) and C32 (82p). But it will even be
charged faster using the diode D31 and R33 (4k7). Due to the
voltage drop across the diode the reference always stays around 200mV
below the voltage peaks.
The result can be seen on the right side. The reference level (in the middle) raises quickly and drops slowly. Even in the middle of the signal, it is defined fine in the upper half of the signal; a methode which is also suggested in some official documents.
This modification can be done very easily by exchanging components on the PCB and soldering D31 and R33 across R31.
NOTE: The modifications are shown for an LM311 comparator. Pins at the MAX942 in PICADSB8 are different!
|This shows how I modified the PICADSB9 PCB in a semi-perfect way:
R31 is replaced by a standard 47k resistor, the 1N4148 diode is soldered just over it, between the cathode of the diode and R31 there is a small SMD 0805 4k7 recovered from miniADSB because I only install the one between Pin 7 and Pin 8 and ommit the pullup and protection resistor there.
Besides the SMD resistors, you can also see the PCB trace cut off that leads from the poti's wiper to Pin3 of the comparator.