A PCB for Rxcontrol PIC 18F2550 based ADS-B decoder

NEW! Jetvision.de decided to reissue the PICADSB8 decoder in their shop

Additionally, please check the new development for the FPGA based decoder.

(C) DL4MEA 10/2010

At the moment there are just a few PICADSB9 kits or PCBs left over, and I will not order new ones but instead concentrate on the next generation. Your miniADSB receiver will not become obsolete but a very good extension of that. A web page will be set up as soon as the prototypes are available. Expected availability in higher numbers is end of this year.

  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.

Let me say a few words about the meanwhile 3 versions that I provide:
This development would  not have been possible without the response of the users. All experience that is brought into this circuit was only possible because it is widely used and the bottlenecks were discovered by using it under various conditions. The recent PICADSB9 meanwhile shows to be the very best of all, doing its job pretty perfect and satisfying all requirements. Since the improvements were mostly done at the AD converter, I provide all information how to modify the elder boards in case that you have problems with nearby planes (doughnut effect) below.
As soon as a  lately discovered bug in Planeplotter's local decoding is removed, I can show the range that I can receive with my simple setup.

For the future we are planning a few more improvements, but these will require some more time to develop, also much time has been spent for this project and other things had been dropped, so it will be a little bit slower.

The ready unit
With a slightly modified miniADSB (connector leaving at the bottom) and PICADSB8/9, these 8 units were built.

All are already spoken for some friends, but for futher questions how to get one of these units, please scroll down to the chapter "future".


ADS-B Telegram Format
MiniADSB Receiver and Forum
RxControl web page by Bertrand Velle, and blog in french (translated to english by google)
COAA PlanePlotter GUI software
FT232RL Serial to USB converter and driver
Antenna that I am using but with only quarter wavelength radials (see also FAQ section)
A possible transmitter, intended for use on ultralight planes.

Schematic: (click on the image to get PDF)


Here you can get the PICADSB8 schematic (PDF)
Here you can get the PICADSB7 schematic (PDF)


Basically this is the decoder circuit as introduced by Bertrand Velle with some extensions.

Serial Interface:
There are two options for the serial interface: Standard RS232 using a MAX232 or Serial-over-USB using an industry standard FTDI FT232R converter. The driver for this can be found here. You can output data on both ports at the same time, but only receive control commands from one interface, which has to be selected by Jumper 9:
Jumper JP9 1-2 2-3
Serial Control Standard RS232 (MAX232) Serial over USB

Powering from USB
After the port enumeration, the power for the PIC and the receiver can be supplied from USB. There are so many decoupling capacitors on the board and I did not see any performance degradation compared to supplying the receiver from an external, high quality power supply.
Jumper JP22 1-2 removed
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
2 GND black
3 analog input blue
4 GND leave free
5 RSSI input leave free

Analog to digital converter

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 unchanged!  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). 

There is an option to supply an already digital signal to the input. Since this is a very basic system design decision, it is done using a solder bridge on the solder side. In this case that you select this option, ommit at least the poti R7 and R31.
Solder bridge SJ1/SJ2 SJ1 SJ2
Analog to digital conversion analog input
local AD converter
(as for miniADSB receiver)
digital input
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

The new PICADSB9 board has a major functional improvement in the AD converter (see in detail below):
PICADSB9 top components
PICADSB9 bottom components

Basic 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)
D1           1N4148
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

Important Note:
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)
C9   47n
C8   2µ2
D3   LED 3mm red
IC4  NE555

Parts that are needed for USB interface
R20 R21 R25  680R                (2)(4)
R22          10k                    (3)
R23          1k                     (3)
C20 C22      100n                   (4)
C21          10n
D20 D21      LED 3mm yellow
D22          LED 3mm green
IC5          FT232RL
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µ
IC2          MAX232
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
PICADSB7/8 components:
R6    4k7
R31   470k
R32   820R
R7    4k7 spindle trimmer
C31   100n                 (4)
C32   56p
IC30  LM311N
IC3   MAX942
PICADSB9 components:
R6    4k7
R7    4k7 spindle trimmer
R31   47k
R32   820R
R33   4k7
R34   470k
C12   100n                
C31   100n                 (4)
C32   82p
D31   1N4148
IC30  LM311N

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

Change History:
26.03.2010:    R32 is 1k instead of 1k8
30.03.2010:    Not for PICADSB7, but the miniADSB receiver: Add a 10kOhm SMD across the input if you are using an antenna which is not grounded
10.04.2010:    R30 is 0R instead of 10k, R7 is 4k7 spindle trimmer
11.04.2010:    R3 R9 R20 R21 R25: Adjust to your LED current: (5V - ULED) / ILED, suggested 560R is for low current LEDs
13.04.2010:    add two 10k to bottom as described below (these are to solve the oscillator on/off problem)
02.05.2010:    rewrote R2 (10k) to the parts list.
05.05.2010:    added PICADSB8 information
25.05.2010:    if you have problems with your PIC operating correctly, first remove C7. If still exists, then also remove C11
28.05.2010:    on PICADSB8 the comparator is a MAX942
29.05.2010:    Improvements added (see below), hint added how to use the cable that comes with PICADSB8 (see parts list)
17.06.2010:    PICADSB9 introduced
01.08.2010:    R4 changed to 33R, top photo (1st in web page) replaced, note about power control settings added in RS232 setup section

 Some pictures of the PICADSB7 PCB
PICADSB7 PCB bottom with FT232
PICADSB7 PCB bottom with FT232
FT232 soldered to bottom
FT232 soldered to bottom

Important Note: On PICADSB7, you have to solder two resistors 10kOhm to the bottom of the PCB. With some PIC types, the oscillator switches on and off in an 5sec time frame without these:

Two additional resistors on the bottom see at top, middle (click on the picture for larger version)

RS232 Set Up:

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
D7 red alarm LED
D2 blue SYNC LED: flashes whenever a telegram start was received and is beeing processed

There is a transistor on the PCB that allows power switching. Unfortunately the default setting of the FT232 initialisation of the newer devices is different, or my 1st samples were not standard, due to that I connected the power switching device to a wrong pin. If you see both green LEDs on immediately after plugging the USB connector, then you have this issue.
If your unit works, don't need to change.
If you see reset problems, download the FT_Prog tool from FTDI's web page, and change the setting of  IO Controls C2 to PWRON# as shown in this picture.

Afterwards, you will see the LED besides the USB connector going on immediately after plugging in USB, and the other green power LED just lightens just after the port was detected by the PC (bell in the loudspeaker) 


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:

Jumper S1C removed 1-2
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:

Format Longitude Latitude
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'
remove comma 004821933 001128700
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').

I will get the PIC in the kit preprogrammed. How do I update it later?
There are many PIC programmers described in the internet, which allow programming of the PIC. I cannot suggest a special one. If you point me to some descriptions, I can have a look at them and later name them here.

What is the best antenna?
I am using this antenna but with quarter wavelength radials only. Don't know what the author hopes to gain from longer ones. I have measured one on a network analyzer. If you leave the antenna rod in free space (as in the picture below), make the top section about 2mm longer, if you put a 20mm plastic tube over it, shorten the top section by 5mm. I do not know the influence of a wide diameter (50mm - 100mm) plastic tube, maybe this is then just matching the given length.

Reflection factor of the ADSB antenna My Antenna for ADS-B reception
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 the sections on it: 136mm -> 65.5mm -> 205mm -> 65.5mm -> 190mm.
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 not grounded in order to prevent ESD descruction of the SAW and the first amplifier!

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?
I suggest using an N connector for it. Do not use silicone for waterproofing, since this never makes it waterproof. There is Spinner PLAST2000, a special more fluid silicone, quite often offered for a reasonable price in eBay. Once you have seen this working, you will never use silicone again.

Which cable shall I use and does a preamplifier improve my reception?
Up to 5m a RG58 is sufficient, up to 15m you can use RG213, and above that you are starting to get losses. I am currently using 25m long HCF1/2" cable, which is high quality cable with just 3dB insertion loss. For longer cables, you may try to use a simple preamplifier which was built for 23cm amateur radio band in order to improve the reception, but don't use one with 2 stages and don't use such which have filter for 1296MHz built in. You only have to overcome the cable loss, otherwise you may get problems with strong signals. (These are assumptions from my experience as a radio amateur and not based on measurements!)

Which range can I expect seeing planes?
Of course this mainly depends on the location of your antenna. Some nearby or flying over planes can be received indoor and with just a screwdriver in the antenna connector once the poti is aligned correctly. We did so quite often just for fun.
Otherwise, we've seen planes up to 225nm distance regularily. With PICADSB7/8 and when aligning the poti there for highest sensitivity, it got the doughnut effect. PICADSB9 no longer has this effect, I see the nearby Munich airport (15nm) as well as 225nm distant planes. I do not have a preamp! Just by this I now discovered that the local decoding in Planeplotter is not sufficient because it puts all planes into my own CPR segement, instead of the 5 ones that I really receive the planes. This performance, in my opinion, is incredible!

AD Converter Improvement:

After using the miniADSB receiver together with the PICADSB decoder for a while, we got some experience about the problems of the decoding of the input signal into a processor's digital signal.
These problems are known to those who life close to an airport or have a lot of very near flying aircrafts. If you do see planes up to 150nm or even more and if you do not suffer from seeing a gap at nearby planes, please don't read further. Keep it as is and be satisfied. You've been warned.

In my case, living at the landing path of one of the Munich's airport runways, I often missed planes passing by at a distance of 800ft or so when the poti was aligned for highest sensitivity and most distant planes. We (it means Andy and I) investigated the reason that the AD8313 detector has a very slow and delayed falling edge when it receives strong signals. If then the comparator is working with a very low reference voltage, the PIC cannot see the '0' in the 2nd phase of the bit. Chances to make the RF decoder faster are expensive and we do not want to touch the RF part since it is complicated but stable. This picture shows an extreme situation:

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.

So it is necessary to raise the comparator reference as quick as possible and then hold it for as long as the frame lasts. First idea was to use a Sample & Hold circuit controlled by the PIC, but I found it much easier. Here is the modified circuit:

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!

There is another modification visible in the above excerpt from the schematic: The input signal is no longer totally attenuated to go below the comparator's reference. Instead, the AC part is split away from the input and a DC bias is added through a high value resistor. Due to this, especially low amplitude, weak signals, are kept with their worthful original amplitude.
  1. For this modification I suggest to bridge R6 in PICADSB7 and PICADSB8.
  2. Also, you have to cut two traces: The one that goes from the signal input (JP1, Pin1) to the poti (solder side), and the wire from the poti's slider to the comparator (PICADSB7: solder side, PICADSB8: top side, below the poti).
  3. Use a 100nF (prefered axial -like resistors-) capacitor and connect the input to the comparator input
  4. Use a 470k resistor and connect the potentiometer's middle pin to the comparator input.
  5. Use a 4k7 resistor and connect the potentiometer's pin that was connected to the signal input before to any pin that carries +5V (or use a leakage at the bottom copper plane)
  6. As a check: with a DC voltmeter you now must be able to set the DC voltage at the comparator's input from 0V to 2.5V.
WARNING! Last modification is a little bit complicated and you know what you are doing. There is no warranty neither a repair service for damaged boards. 

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.

[HOME]Last updated 04.10.2010 07:00 ((X) home () Munich, St. Martin Straße, S-Bahn station) by DL4MEA