English version English

If you are not familiar with the German language, go to the English page

Zum schnellen Start lade das ZIP-File herunter, es enthält alle Files inklusive eines Handbuchs.

ADS-B Decoder und Software

mit PIC18F2550

zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage


Einleitung

Vielleicht erinnert sich noch jemand an den 11.09.2001 ? Da verschwanden in den USA einfach ein paar Flugzeuge von den Bildschirmen der Fluglotsen (ATC), weil in den Flugzeugen die Transponder abgeschaltet wurden. Da fragt man sich natürlich sofort, haben die denn kein Radar?

Tatsächlich sind große Bereiche des Luftraums nicht durch echtes Radar abgedeckt. Stattdessen verwendet man das sogenannte Sekundärradar. Dabei sendet eine Bodenstation eine Abfrage zu einem speziellen Funkempfänger im Flugzeug, und dieses Flugzeug funkt eine Antwort zurück zur Bodenstation. Wenn die Bodenstation eine Richtantenne verwendet und die Zeit von der Abfrage bis zur Antwort misst, dann kann sie genau wie ein echtes Radar die Richtung und die Entfernung zum Flugzeug ermitteln. Das funktioniert natürlich  nur dann, wenn das Flugzeug auch über eine Antwortanlage (den Transponder) verfügt, und dieser eingeschaltet ist. Eine Bodenstation für dieses Sekundärradarverfahren ist deutlich billiger als ein echtes Radar. Außerdem kann das Flugzeug in seiner Antwort noch zusätzliche Informationen hineinstecken, die ein Radar nicht so einfach messen könnte.

Seit einigen Jahren gibt es eine neue Generation von Transpondern, die den modernen Mode-S beherrschen. Solche Transponder senden deutlich mehr Informationen (ADS-B-Daten) aus, als die Vorgängergeneration. Außerdem senden sie auch regelmäßig Daten, ohne dass eine Bodenstation sie dafür extra anfunken muss. Das nennt sich Squitter und es ermöglicht es jedem, der es will, solche Daten zu empfangen. Da die Daten unter anderem eine eindeutige Flugzeugkennnummer und die genaue Flugzeugposition enthalten, kann man sich aus diesen Daten sein eigenes "Radarbild" erstellen.
Wenn auch nicht alle Flugzeuge Squitter senden, so sind es doch 70 .. 80%, so dass man einen guten Eindruck vom momentanen Flugverkehr bekommt.

Warum sollte man das tun? Weil es geht und Spaß macht. Außerdem lernt man dabei mehr als beim Bier vor dem Fernseher.



ADS-B
(Automatic Dependent Surveillance–Broadcast)
Alle Flugzeugtransponder senden ihre Daten auf der Frequenz 1090 MHz. Um sie zu empfangen, benötigt man also einen Empfänger für diese Frequenz. Das sind die sogenannten ADS-B-Empfänger.

1090 MHz liegt im L-Band. So hohe Frequenzen bereiten sich in etwa geradlinig aus, und werden von den oberen Atmospärenschichten nicht reflektiert. Man kann deshalb die Signale eines Flugzeugs nur empfangen, wenn zwischen Flugzeug und Empfänger keine Objekte den Funk behindern. (Man brauch also freie Sicht.) Man benötigt also eine Empfangsantenne, die möglichst so angebracht ist, dass sie in alle Richtungen freie Sicht (am besten auf den Horizont) hat. Ein möglichst hoher Aufbauort (Dach) wäre ideal, aber für Versuche tut es auch erst mal ein "suboptimaler" Antennenaufbau.
Das größte Funkhindernis ist die Erde selbst, denn die ist ja bekanntlich rund. Flugzeuge, die zu weit weg sind, befinden sich unter der Horizontlinie, und sind somit durch die Erde vom Empfänger abgeschirmt. Je höher das Flugzeug fliegt, desto weiter darf es weg sein, ohne unter dem Horizont zu verschwinden. Transpondersignale eines in einer Reiseflughöhe von 30000 Fuß (10 km) fliegenden Flugzeugs können theoretisch aus bis zu 400 km Entfernung empfangen werden. Das setzt aber eine sehr empfindliche Antennen-Empfänger-Kombination voraus und wird in der Praxis kaum zu erreichen sein. Deutlich über 100 km Reichweite sind aber auch mit einfachen Mitteln kein Problem.

Um die Flugzeuge zu beobachten, benötigt man:
  • eine Antenne für 1090 MHz
  • einen ADS-B Empfänger als Frontend (z.B. miniadsb)
  • einen ADS-B-Decoder
  • einen PC mit Software zum Anzeigen der Daten
Blockdiagramm

Die Antenne empfängt die Signale und speist sie über ein Koaxialkabel in den Empfänger ein.
Der Empfänger selektiert, verstärkt und demoduliert die Signale. Sein Ausgang ist ein sogenanntes analoges Videosignal. (hat nichts mit "Bild" zu tun, sondern heißt nur so)
Der Decoder wandelt das analoge Videosignal in ein digitales Signal und filtert aus dem empfangenen Signalchaos die Transpondersignale heraus. Diese gibt er über USB (oder RS232) an den PC weiter.
Der PC empfängt die Transponderdaten vom Decoder und entnimmt ihnen alle interessanten Daten. Daraus baut er dann das Radarbild zusammen, und zeigt es an.

Für jede dieser 4 Baugruppen gibt es im Internet unterschiedliche Lösungen. Deren Kombinationen sind auf  http://miniadsb.web99.de/  exemplarisch gezeigt.



Antenne

Die Transpondersignale sind vertikal polarisiert. Um sie zu empfangen, benötigt man eine vertikal polarisierte Antenne, die auf 1090 MHz abgestimmt ist. Im einfachsten Fall ist das ein dünner, senkrechter Stab, mit einer Länge von ca. 130 mm. Diese Länge ist die halbe Wellenlänge des 1090-MHz-Signals. So eine Antenne ist ein elektrischer Dipol und empfängt Signale aus allen Richtungen.

Um die Empfindlichkeit der Antenne zu steigern, kann man mehrere solche Dipole zusammenschalten. Ordnet man sie aber nebeneinander an, ergibt sich eine Richtwirkung. Die Antenne ist nicht mehr in alle Richtungen gleich empfindlich. Dieser Nachteil tritt nicht auf, wenn man mehrere Dipole übereinander anordnet. Nun muss man diese Dipole noch zusammenschalten. Da oberes und unteres Dipolende beim Signalempfang  gegenphasig schwingen, darf man sie nicht direkt verbinden. Die Signale der einzelnen Dipole würden sich auslöschen (Kurzschluss). Das vermeidet man, wenn man die Dipole mit horizontal verlaufenden Drahtstücken verbindet, die ebenfalls 130 mm lang sind. (Halbe Wellenlänge ergibt 180 Grad Phasenschiebung.) Da die Dipole senkrecht übereinander stehen, haben diese Verbindungsdrähte praktischerweise die Form einer horizontalen Schleife.

Dipole und Schleifen biegt man am Besten gemeinsam aus einem Stück Draht, der dick genug sein muss, um nicht unter dem eigenen Gewicht umzuknicken. Dieser gestockte Dipol wird mit dem Mittelleiter des Antennenkabels verbunden. Für unseren Dipol brauchen wir noch eine "Ersatzerde", die mit dem Schirm des Antennenkabels verbunden wird. Ideal wäre ein horizontal liegendes rundes Stück Blech, mit einem Radius von ca 130mm. Ein paar radial angeordnete Drähte tun es aber auch. Um eine Richtwirkung zu vermeiden, sollten es wenigstens 4 Drähte sein. (Groundplane-Antenne). Diese Ersatzerde wird mit dem Schirm des Antennenkabels verbunden. Stab und Ersatzerde dürfen sich nicht berühren.

Als Antennenkabel kommt 50-Ohm-Koaxialkabel (z.B. RG-58) zum Einsatz.
Antenne
Fundierten Vorschlägen zur Verbesserung der Antenne stehe ich offen gegenüber. Insbesondere macht mir der wahrscheinlich recht hohe Speisewiderstand der Antenne noch Sorgen. Durch Variation der Koppelschleifen ließe sich der Empfangshöhenwinkel beeinflussen. Durch Abknicken der Ersatzerde kann man den Speisepunktwiderstand anpassen. Mir fehlen aber exakte Formeln.

Ein interessanter Einstieg in die Antennenproblematik ist vielleicht   http://www.airnavsystems.com/forum/index.php?topic=2226.0
Das beliebteste Design ist wohl momentan die Groundplane von G-7RGQ  (http://www.kineticavionics.co.uk/forums/viewtopic.php?f=1&t=7489&sid=a97d41478e66511dd5cf715ee7c88df0&start=24) Diese scheint gute Empfindlichkeit mit praktischem Höhenwinkel zu verbinden.

Man kann anstelle der ungeschrirmten horizontalen Verbindungsschleifen zwischen den einzelnen Dipolen auch geschirmte Verbindungsleitungen verwenden. Diese müssen dann nicht mehr horizontal verlaufen. Denkt man diesen Designansatz zu ende, dann kommt man zur Colinear-Coaxial-Antenne. Die Beschreibung einer solchen Antenne findet man hier: http://www.nodomainname.co.uk/Omnicolinear/2-4collinear.htm  Diese dort ist aber für 2,4 GHz ausgelegt. Eine ADS-B-Version hätte natürlich andere Maße.
Das ist ein Video zur Erstellung einer preiswerten ADS-B-Antenne (Danke Axel)

Viel wichtiger als die optimale Antennenbauform ist aber ein optimaler Ort für den Antennenaufbau. Beim Versuch mit einer Antenne hinter der Glasscheibe eines Fensters in ca 5 m Höhe über dem Erdboden erreichte ich in einige Richtungen auf Anhieb über 150 km Auffassungsreichweite. Das war genau dort, wo vor dem Fenster weder Bäume noch andere Gebäude die freie Sicht behindern. In anderen Richtungen war bereits nach einigen 10 km Schluss. Die Antenne muss also möglichst hoch und möglichst mit Rundumsicht aufgebaut werden.



miniadsb
Zum Empfang der ADS-B-Signale benötigt man einen dafür ausgelegten Empfänger. Ein preiswertes Exemplar ist der miniadsb von jetvision.de, den man auf http://miniadsb.web99.de/ für 45 Euro als Bastelsatz erwerben kann. Nach dem recht fipsligen Zusammenbau (niedlichstes SMD) hat man einen 1090-MHz-Empfänger, der kaum größer als ein Textmarker ist (ca. 2cm x 2cm x 8cm) und die empfangenen Transponderdaten als analoges Ausgangssignal bereitstellt.
Der Eingang des miniadsb-Empfängers wird mit dem Koaxialkabel der Antenne verbunden. Darüber hinaus hat der miniadsb noch drei Anschlussdrähte:
  • Betriebsspannung (ca. 4V)
  • Masse
  • analoger Ausgang
Alle drei werden über ein dreipoliges Kabel mit dreipoligem Stecker mit dem Decoder verbunden. (Pin 1: Masse / Pin 2: Ausgang / Pin 3 : Betriebsspannung)

Der analoge Ausgang des Empfängers kann nur etwa 0,4 mA treiben und ist empfindlich gegen versehentlich dort angelegte externe Spannungen.
miniadsb-Empfänger

Die genaue Höhe der Betriebsspannung hat Einfluss auf die Funktion des Empfängers. Das Optimum liegt bei etwa 4V. Eine verpolte Spannung und eine Spannung über 5V sind für den Empfänger tödlich. Um ein Verpolen zu vermeiden, sollte in die Betriebsspannungsleitung eine Diode (nicht Shottky) eingefügt werden. Diese passt noch problemlos in des Gehäuse des miniadsb. Durch den Spannungsabfall der Diode erhöht sich die optimale Betriebsspannung des miniadsb auf  4,5V. Diese wird von meinem Decoder bereitgestellt.

pimp my miniadsb
Ein gut aufgebauter miniadsb kann im Vergleich zu einem nachlässig aufgebauten (aber immerhin funktionierenden miniadsb) die Zahl der empfangenen Frames verdoppeln. Ich empfehle dringend einen Blick auf die Optimierungstips im miniADSB-Forum zu werfen. Neben einem sauberen Aufbau wären u.A. zu nennen:



Decoder   adsbPIC
Mein Decoder ist vom PIC-basierten Decoder von Bertrand (rxcontrol) inspiriert.(auch von DL4MEA au fder Seite http://www.qsl.net/dl4mea/picadsb/picadsb.htm gut dokumentiert). Mein Decoder soll durch eine deutlich bessere Ausnutzung der PIC-Hardware, den Bastelaufwand beim Decoderbau verringern. Bei der Pinbelegung (insbesondere Jumper/Schalter und LEDs habe ich mich aus Gründen der Kompatibilität weitestgehend am Bertrand-Decoder orientiert.

Vorteile meines Decoders:
Mein Decoder verbindet den miniadsb-Reciver mit dem USB-Anschluss des PC. Dafür verfügt er über zwei Anschlüsse.
Das nebenstehende Foto zeigt einen kompletten Decoder in der Lochrastervariante für Eilige. In SMD-Ausführung (einseitig) kann man den Decoder komplett auf einer Fläche von 4cm x 4cm aufbauen. Dann ist er noch kleiner als der miniadsb-Receiver.

Das einzige aktive Bauelement des Decoders ist ein PIC18F2550 (oder wahlweise PIC18F2455) Microcontroller. Dessen Komparator wandelt zunächst das analoge Signal des miniadsb in eine digitale Pulsfolge um. Dazu benötigt der Komparator eine Referenzspannung, die etwas höher ist als der Durchschnittsspannungswert des analogen Signals. Diese Referenzspannung wird im Decoder automatisch erzeugt.

Der PIC18F2550 sucht nun in der digitalen Pulsfolge nach Transponderdaten und liest diese ein.

Es gibt eine Fülle verschiedener Datenpakete mit unterschiedlichem Nutzen für die Beobachtung. Am wertvollsten sind die DF17 (download format 17) Datenpakete. Ähnlich informativ wären auch DF18 und DF19, die in der Praxis aber kaum vorkommen. Der Decoder kann entweder alle empfangenen Daten oder nur DF17/18/19-Daten an den PC weiterleiten.
Decoder-Prototyp

Foto des Decoders
Datenpakete haben eine Prüfsumme, um fehlerhafte Datenpakete zu erkennen. Bei DF17/18/19-Paketen kann der Decoder selbständig die Fehlerfreiheit der Pakete anhand dieser Prüfsumme bestimmen. Auf Wunsch sendet der Decoder entweder alle DF17/18/19-Pakete oder nur fehlerfreie DF17/18/19-Pakete zum PC weiter.

Am PC wird der per USB angeschlossene Decoder als serielle Schnittstelle (z.B. COM-3 der COM-4) erkannt. (Für Windows sind Microchip-Treiber erforderlich.)

Unten ist die Schaltung zu sehen.
Der PIC erhält seine Betriebsspannung über den USB-Anschluss. L1 und C3 sorgen für eine saubere Betriebsspannung von ca 5V. C2 siebt die 3,3V, die der PIC seinerseits für die USB-Signale erzeugt. Q1, C4 und C5 stellen den Takt für den PIC bereit.

D1 liefert eine Spannung von ca 4,5V an Pin 3 des miniadsb-Steckverbinders, die durch C6 noch einmal gesiebt wird. Hier ist die Betriebsspannungsleitung des miniadsb angeschlossen. Pin 1 des miniadsb-Anschlusses ist Masse. Am Pin 2 speist der miniadsb sein analoges ADS-B-Signal in den Decoder. Durch den Schutzwiderstand R2 wird es in den Komparator des PIC eingespeist. R2 kann überbrückt werden, wenn im miniadsb ein Ausgangswiderstand enthalten ist.

Der analoge Komparator des PIC vergleicht die Spannungen an Pin 5 und Pin 2 des PIC.
Der miniadsb liefert etwa 700mV. Über R1 und C1 wird der Mittelwert der miniadsb-Ausgangsspannung ermittelt, und in den ADC des PIC eingespeist (Pin 3). Der PIC misst nun den Signalpegel, und stellt mit Hilfe einer Pulsweitentregelung (Pin 24) und einer Siebung (R7, C7) eine um 100mV höhere Spannung am Pin 2 ein. (Der Wert kann per Software geändert werden.)

Stromlaufplan



Das digitale Ausgangssignal des Komparators verlässt den PIC am Pin 6  und wird gleich wieder zur Analyse in Pin 11 eingespeist.

Dieses Pin 11 ist der digitale ADS-B-Eingang des PIC. Wer anstelle des PIC-Komparators lieber einen eigenen externen Komparator verwenden will, trennt die Verbindung zwischen Pin 6 und Pin 11 auf, und schließt seinen Komparatorausgang an Pin 11 an.

Die LED3 zeigt das digitale Signal an. Sie sollte im Normalbetrieb (einige Sekunden nach dem Einschalten mit angeschlossenem miniadsb) ganz ganz ganz schwach glimmen.
Die LED1 blinkt kurz auf, wenn der Anfang einen ADS-B-Signals erkannt wurde.
Gelang es, das Signal einzulesen, dann leuchtet LED2 auf, bis das Frame vom PC abgeholt wurde (Fw4) bzw. der Anfang eines neuen Paketes erkannt wird (bis Fw3).

Mit bis zu 6 Schaltern oder Jumper an RB0..2 und RB4..6 kann man den Decoder steuern. In der Schaltung sind nur 4 Schalter vorgesehen, da diese in der Regel ausreichend sind. Wer als PC-Software  adsbScope einsetzt, kann auf Schalter komplett verzichten, da diese Software den Decoder per USB (oder RS232) steuern kann.In diesem Fall ist RB0 permanent mit Vss (Masse) zu verbinden. Wer dagegen z.B. Planeplotter einsetzt, sollte wenigstens die 4 Schalter vorsehen, die im Stromlaufplan und Layout des Decoders vorgesehen sind.

Ist aber der Schalter an RB0 (remote) geschlossen, dann werden die Schalter an RB2 und RB4 ignoriert. In diesem Fall erfolgt die Decodersteuerung durch die PC-Software via USB.
Ist der remote-Schalter aber offen, dann sendet der Decoder selbständig die gefundenen Daten an den PC. Wird der DF17-Schalter geschlossen, dann werden nur  Daten der Formate DF17/18/19 weitergeleitet. Wird dazu noch der CRC-Schalter geschlossen, dann werden nur Daten der Formate DF17/18/19 weitergeleitet, bei denen durch Kontrolle der Prüfsumme ein fehlerfreier Empfang nachgewiesen wurde.
Eine Beschränkung auf DF17/18/19 kann den USB-Anschluss und die PC-Software deutlich entlasten, und bringt nur wenig Informationsverlust.
Die Aktivierung der CRC-Prüfung entlastet USB und PC kaum noch, führt aber zu einer deutlichen Mehrbelastung des PIC. Dadurch können häufiger Signale des miniadsb vom Decoder "übersehen" werden. Bis zur Firmware 7 war der CRC-Schalter am Pin RB2 angeschlossen, seit der Firmware 8 liegt der CRC-Schalter an RB5, da er vergleichsweise unwichtig ist.

Der Decoder sendet die Daten im RAW-Format (*<RAW>;). Wird der Schalter an TimeTAG geschlossen, dann sendet der Decoder die Daten mit einer Zeitmarke als Tag (@<TAG><RAW>;).
Seit Firmware 8 liegt der TimeTAG-Schalter an RB2.
Abbildung des Decoders

SMD-Version des Decoders
R8 wird für den Bootloader verwendet. Will man den Bootloader manuell aktivieren, dann steckt man (vor dem Anstecken des Decoders an den PC) einen Jumper auf JP1. Das kann aber die Software adsbScope auch per Software erledigen..

Die nebenstehende Abbildung zeigt eine mögliche SMD-Version des vollständigen Decoders mit "Grobmotoriker-SMD" (nichts ist kleiner als 1206) auf 4cm x 4cm. Man könnte die Schaltung aber noch deutlich verschlanken. Mit den anschließend aufgelisteten Sparmaßnahmen kommt man auf eine Platinenfläche von 2,5 cm x 3,5 cm.

mögliche Sparmaßnahmen
Soll meine Software zur Darstellung am PC verwendet werden, dann kann auch der Schalter S1 entfallen, und Pin 21 des PIC wird dauerhaft mit Masse (Vss) verbunden.
L1 ist nett, kann aber prinzipiell auch entfallen.
R3,4,5 und die drei LEDs sind für die eigentliche Decoderfunktion entbehrlich.
R2 kann bedenkenlos entfallen, wenn in der miniadsb-Ausgangsstufe ein 1 kOhm-Ausgangswiderstand belassen wird. Wer mutig ist, kann auf Schutzwiderstände auch ganz verzichten, und wird mit einem optimalen  analogen Signal belohnt.
Jumper JP1 ist überflüssig, da seine Funktion von adsbScope übernommen wird.

Nutzung des Decoders mit Planeplotter
Um den Decoder mit Planplotter zu nutzen, ist unbedingt noch vor dem Anstecken des Decoders an den PC der Schalter 4 von S1 zu aktivieren. (RB0 mit Vss verbinden). Dann ist der Decoder an den PC anzuschließen und Planeplotter zu starten. Als Mode-S-Empfänger wählt man "AVR receiver" aus und stellt für den AVR receiver den COM-Port des Decoders ein. Nun kann die Arbeit von Planeplotter gestartet werden (Schaltfläche oben links mit grünem Kreis). Nun arbeiten Decoder und Planeplotter zusammen. Nur falls man eine Uraltversion von Planeplotter einsetzt, dann kann es nun noch nötig sein, den Schalter abschließend wieder zu öffnen.)

optional: RS232-Interface
Mit der Firmware 6 bekommt der Decoder neben der USB-Schnittstelle auch noch eine RS232-Schnittstelle (115200bps,  8/1). Diese wird aktiviert, wenn beim Einschalten der Betriebsspannung der Schalter 3 von S1 geschlossen ist (RB1/Pin 22 verbunden mit Vss/Masse). Im Vergleich mit der USB-Schnittstelle liefert die RS232-Schnittstelle eine etwas geringere Framerate, ich betrachte sie deshalb nur als Notlösung, und empfehle ausdrücklich die Nutzung des USB-Interfaces.
Wird die RS232-Schnittstelle benutzt, muss an die Pins RC6&RC7 ein RS232-Treiberschaltkreis (oder für kurze Entfernungen ein Kabel) angeschlossen werden. Die Betriebsspannung für den PIC und den Treiber sind von außen einzuspeisen, da die Speisung über USB ja wegfällt. Damit die RS232-Schnittstelle funktioniert, muss der PIC neben der Software auch den Bootloader enthalten. Neben der RS232-Schnittstelle ist also die USB-Schnittstelle einzubauen, und Firmwareupdates sind via USB vorzunehmen.



GNS 5890 : die Fertiglösung

GNS5890
Wer keine Lust , Zeit oder Muße hat, das alles selbst aufzubauen, der kann auch eine industriell gefertigte Komplettlösung erwerben.

Ich teste im Moment der GNS5890-USB-Stick. Der GNS5890 ist kleiner als eine Streichholzschachtel und enthält einen ADS-B-Receiver mit Decoder. Zum Lieferumfang gehört auch noch eine Magnetfußantenne mit einem ca. 1 Meter langen Antennenkabel. Damit eignet sich der GNS5890 ideal für den mobilen Einsatz.

Der Decoder ist zu meinem adsbPIC-Decoder voll kompatibel, und wird z.Z. mit einer (umgelabelten) Firmware der Version 8 ausgeliefert. Um ihn mit adsbScope zu nutzen, ist der zu adsbScope mitgelieferte CDC-Treiber zu verwenden (ZIP-File ab dem 16.12.2011). Ist dieser Treiber erst mal installiert, dann funktioniert der GNS5890 auch zusammen mit Planeplotter.

Der GNS5890 verzichtet auf jeglichen Schnickschnack. Er hat weder DIP-Schalter noch RS232-Ausgang. Dadurch gelang es einen sehr kleinen, robusten Receiver-Decoder zu bauen.

In ersten Tests schlug er meine Empfangskette (eine Kombination aus Dreifachdipol, miniadsb-Receiver und adsbPIC-Decoder) deutlich. Die Framerate lag um 20% bis 100% höher, und es wurden auch mehr Flugzeuge erfasst.
Daraufhin habe ich mir meinen miniadsb-receiver noch mal unter den Lötkolben gelegt, und bekannte Schwachstellen ausgemerzt. Nun erzielen beide Systeme in etwa identische Ergebnisse

Quelle
Global Navigation Systems – GNS GmbH

Vom GNS5890 gibt es inzwischen mindestens drei Versionen, die von außen nicht zu unterscheiden sind:

1. Version
Dies ist ein mniaturisierter 1:1 Nachbau des miniadsb-receivers mit dem adsbPIC-decoder. Der Decoder läuft mit einer umgelabelten Firmware V.8

2.Version
Der einfache Komparator des adsbPIC-Receivers wurde gegen den großsignalfesten Komparator des Decoders von DL4MEA (Günter) ausgetauscht. Damit wird der "Donut-Effekt" wirksam bekämpft. Die Firmware wurde auf eine höhere Framerate hin optimiert und meldet sich als Fw. V.9.

3. Version
Die Hardware blieb unverändert, aber die Firmware erhielt die Nummer V. 128. Die Idee war, den GNS per Software eindeutig vom adsbPIC-Decoder unterscheiden zu können, allerdings führte diese Änderung auch zur  Inkompatibilität mit meiner Software adsbScope V2.6 f3. Das behob ich mit dem Update auf V2.7.
Außerdem startet der GNS unmittelbar nach dem Anstecken an den USB-Bus mit der Versendung von ADSB-Frames, er wartet also nicht auf das Startsignal (Decoder-Mode 2). Das verkomplizierte in meiner Testumgebung die Nutzung des GNS, da ich adsbScope innerhalb einer virtuellen Maschine nutze. Das Host-Betriebssystem muss die USB-Schnittstelle, an den der GNS angeschlossen ist, an die virtuelle Maschine übergeben. Wird die Schnittstelle zu diesem Zeitpunkt bereits mit Daten befüllt, die  niemand abholt, dann ist diese Übergabe nicht immer möglich.

Allen GNS5890-Versionen ist gemeinsam, dass sie sich mit der Microchip VID (0x4D8) aber einer eigenen PID (0xF8E8) am USB-Bus zu erkennen geben. Aus diesem Grunde muss die inf-Datei für die Windows-Treiberzuordnung an diese Receiver angepasst werden. Die in meinem ADSB-Downloadpaket enthaltene inf-Datei für den CDC-Treiber berücksichtigt das.




DVB-T-Dongle und RTL1090 / ADSB#

RTL1090
Den preiswertesten Einstieg in die ADS-B-Welt erlaubt ein billiger USB-Stick für DVB-T-Empfang. Die freie Software RTL1090 (von Jetvision) oder ADSB# verwandelt diesen DVB-T-Stick in einen einfachen ADSB-Empfänger, der seine Daten via Netzwerk ausgibt. AdsbScope nimmt diese Daten via Netzwerk entgegen und bringt sie zur Anzeige.

Diese Lösung bringt zwar nicht die Framerate (Menge empfangener Daten) wie spezielle Receiver und Dekoder, man bekommt aber für kleines Geld einen funktionsfähigen Empfänger, ohne dass man den Lötkolben anwerfen muss.

Die Software unterstützt ausschließlich DVB-T-Sticks mit RTL2832U-Interfacechip und E4000 oder R820T Tuner-Chip. Man findet die
  • RTL1090-Software auf der Jetvision.de-Homepage und in der entsprechenden Yahoo-Group.
  • ADSB# findet man auf http://sdrsharp.com.
Beide Softwarepakete leisten in etwa das Gleiche.


Im direkten Vergleich scheint ADSB# mehr nutzbare Frames zu liefern. Außerdem verwendet es einen CRC-Check, wodurch keine fehlerhaften Daten ausgegeben werden.

RTL1090 verzichtet auf einen CRC-Check. Im Ergebnis ist ein wesentlicher Anteil der gelieferten Frames fehlerhaft und nicht nutzbar. Das ist nicht wirklich ein Problem, aber eine hohe Framerate allein bedeutet wenig. Auch wenn RTL1090 mal mehr Frames ausgibt als ADSB#, dann sind es trotzden oft weniger nutzbare Frames.

Die Autoren arbeiten eifrig an ihrer Software, so dass weitere Verbesserungen zu erwarten sind.

Bekanntes Problem mit RTL1090:
Die Software sendet Zeitmarken, die zu Problemen in adsbScope führen können. Deshalb muss die MLAT-Nutzung abgeschaltet werden. Das ist im Menüpunkt "Config - MLAT-clock" zu prüfen.

Der Betrieb in einem MLAT-Netzwerrk ist gegenwärtig mit keiner der beiden Lösungen möglich.
ADSB#




PC-Software   adsbScope (Windows)

Die PC-Software nimmt die Daten des Decoders an der (virtuellen) COM-Schnittstelle entgegen und decodiert sie. Anhand der Daten werden die sendenden Flugzeuge identifiziert und ihre Koordinaten bestimmt. Diese Parameter werden alphanumerisch oder in einem Radarbild angezeigt. Die hier normalerweise unter Windows verwendete Standardsoftware ist das sehr leistungsstarke Planeplotter (25 Euro). Ich wollte aber unbedingt meine eigene Software schreiben.

Meine Software listet alle empfangenen Flugzeuge in einer Tabelle auf. Alle Flugzeuge mit bekannten Koordinaten werden in einer Kartenansicht dargestellt.
Die Kartenansicht verwendet eine Projektion, bei der die Darstellung weitgehend unverzerrt ist. Dargestellt werden:
Es können zusätzlich Ländergrenzen und Namen fast aller Länder der Welt eingeblendet werden  Einige der dazu nötigen Files sind  im Lieferumfang enthalten, die anderen können durch adsbScope auf Wunsch automatisch aus dem Internet heruntergeladen und installiert werden.

Es kann die Lage von Start- und Landebahnen dargestellt werden, wenn die nötigen Files von jetvision.de heruntergeladen werden.

Wird als Decoder mein adsbPIC-Decoder verwendet, dann kann folgendes eingestellt/ausgelesen werden:
  • Umfang der zu übermittelnden Daten (alle oder nur DF17/18/19, mit oder ohne CRC)
  • Differenzspannung zwischen analogem Pegel und Komparatorschwelle ( 40 .. 200 mV)
  • Aktivierung des Bootloaders
  • Reset des Decoders
  • Anzeige der Pegel von analogem Signal und Komparatorschwellwert
Software

rxcontrol und adsbScope
Ab der Version 1.2 kann adsbScope auch mit rxcontrol-Decodern umgehen. Beim Klick auf Connect wird ein rxcontrol-Decoder automatisch erkannt und adsbPIC-spezifische Bedienelemente abgeschaltet. Es erscheinen die Schaltflächen "Start" und "Stop" mit denen die Verarbeitung der vom rxcontrol gelieferten Daten gestartet oder beendet werden kann.

Der rxcontrol wird dabei auf das AVR-Datenformat umgestellt, das die AVR-basierten Decoder von Edward Cardew verwenden. Da das erst ab der rxcontrol-Firmware 2.6 funktioniert, ist folglich ein einigermaßen aktueller rxcontrol erforderlich. Jeder rxcontrol, der mit Planeplotter zusammenarbeitet, sollte sich auch mit adsbScope vertragen.

Beim rxcontrol ist die Steuerung der Filterung(CRC, DF17 ...) nur über die Schalter am Decoder möglich, dieser Decoder ist nicht fernsteuerbar. Im Betrieb fiel auf, dass der DF17-Filter gar kein DF17-Filter ist, sondern alle 112-Bit-Datenframes an den PC weitergibt.
Im Test erreichte adsbPic deutlich höhere Frameraten als rxcontrol.

Beast und adsbScope
Ab der Version 2.6 kann adsbScope auch mit dem BEAST-Receiver/Decoder umgehen.



Inbetriebnahme

(Behelfs-)Antenne
Für erste Schritte biegt man sich am besten eine Antenne aus Kupferdraht. Den entnimmt man z.B. einem Stück Stromkabel aus der Restekiste im Keller. Kabel mit 1,5 qmm Kupferleitern reicht für den ersten Schritt. Als stabile Aufbaubasis kann man eine BNC-Buchse mit Lötanschluss verwenden. An deren Mittelleiter lötet man den Dipoldraht. Um das Buchsengewinde legt man einen Kupferdraht als Ring , und verlötet ihn. An diesen Ring lötet man  4 radial abstehende Drähte als Ersatzerde. Ein 50-Ohm-Koaxialkabel mit BNC-Steckern kann dann genommen werden, um diese Antenne mit dem miniadsb zu verbinden. (Beispiel einer Behelfsantenne für erste Versuche)

miniadsb
Der Aufbau des miniadsb ist auf dessen Homepage detailliert beschrieben. Wenn alles erfolgreich absolviert wurde, fügt man in die Betriebsspannungsleitung noch eine Siliziumdiode als Verpolschutz ein. Diese findet noch im miniadsb-Gehäuse Platz. Nicht vergessen, den Ausgangswiderstand des miniadsb (ca. 4,7 kOhm) nach erfolgreicher Inbetriebnahme gegen eine Brücke oder einen 1 kOhm Widerstand zu ersetzen. Die drei Anschlussleitungen des miniadsb werden mit einem dreipoligen Steckverbinder versehen, mit dem er an den Decoder angeschlossen werden kann.

Decoder
Der Aufbau des Decoders stellt ebenfalls keine große Hürde dar. Für den PIC ist eine IC-Fassung vorzusehen. Nun muss man allerdings noch den Bootloader in den PIC hineinbekommen. Da hilft ein PIC-Programmiergerät oder ein Freund mit einem PIC-Programmiergerät. Der Schalter 4  an S1 des Decoders (an RB0,  remote) wird geschlossen, und somit RB0 mit Vss verbunden.
Der PIC mit dem Bootloader wird in den Decoder gesteckt und der Decoder mit dem PC verbunden. Nun fordert Windows zur Treiberinstallation auf. Installiert wird nun der Microchip-MCD-Treiber. Danach kann man mit der Software USBoot die Firmware des Decoders in den Decoder-PIC laden. (Später soll diese Funktionalität in adsbScope nachgerüstet werden).
Nun wird der Decoder vom PC getrennt und wieder angesteckt. Windows fordert nun noch mal zur Treiberinstallation auf. Installiert wird der Microchip-CDC-Treiber, der dann die virtuellen COM-Schnittstellen bereitstellt. Nun ist der Decoder komplett. Im Windows-Gerätemanager taucht er nun als zusätzliche COM-Schnittstelle auf.

Vor dem Anschluss des miniadsb an den Decoder prüft man noch mal die Größe und Polarität der vom Decoder gelieferten miniadsb-Betriebsspannung. Ist der miniadsb angeschlossen, sollten am Pin 5 des PIC etwa 700 mV anliegen.
Nun wird die Antenne an den miniadsb angeschlossen.

Wenn der Verbund aus miniadsb und Decoder vom PC getrennt und dann wieder angesteckt wird, dann kann LED3 aufleuchten. Nach ca. 3..5 Sekunden schwächt das Leuchten zu einem Glimmen ab. Das zeigt die korrekte Arbeit der automatischen Schwellwerteinstellung. (Das selbe Verhalten zeigt LED3 auch, wenn man im laufenden Betrieb den miniadsb vom Decoder trennt und dann wieder anschließt.)

Wenn man nun testweise den Schalter 4 (remote) öffnet, und daraufhin die LEDs 1 und 2 blinken, hat man schon seine ersten Pakete empfangen. Mit einem beliebigen Terminalprogramm kann man die vom Decoder gelieferten Datenpakete als Rohdaten betrachten.
Will man adsbScope oder Planeplotter verwenden, ist der Schalter 4 wieder zu schließen und das USB-Kabel kurz vom PC zu trennen. Damit sind LED 1 und 2 wieder verlöschen.

Software
Die adsbScope Software für Windows kommt als ZIP-Paket. Sie wird im Zielverzeichnis entpackt, und legt dabei einige Unterverzeichnisse an. Danach ist die Software sofort einsatzbereit. Falls der Start des Programms unter WinVista oder Win7 scheitert, dann ist die Software im Kompatibilitätsmodus (WinXP) zu starten.
Den eigenen Standort stellt man durch Klicken und Ziehen in der Grafik mit der linken Maustaste ein. Den Zoomwert stellt man durch Klicken und Ziehen in der Grafik mit der rechten Maustaste oder mit dem Zoom Schieberegler ein.
Mit "select COM-port" wählt man den COM-Port des Decoders aus. Mit "Connect" wird dann die Verbindung zum Decoder hergestellt. Daraufhin liefert der Decoder Daten, die die Software verarbeitet und darstellt.



Allgemeines zu Decodern und ihren Grenzen und Möglichkeiten
Ein Ziel der Decoderentwicklung ist es, so viele Frames wie möglich zu erkennen und zum PC zu übertragen. Dabei ist es generell unmöglich mit einem Mikrocontroller alle Frames zu "erwischen". Daran sind vor allem drei Probleme schuld:
  1. Der Decoder kann den Anfang eines Frames nicht mit 100%-Wahrscheinlichkeit erkennen, da er den Comparatorausgang mit einer kurzen Programmschleife abfragt. Es kann passieren, das der erste Puls des Frames eintrifft, wenn man gerade an einer Stelle der Schleife ist, an der der Eingang gerade nicht getestet wird. Die Entdeckungswahrscheinlichkeit lässt sich maximieren, wenn man eine möglichst kurze Schleife verwendet, und den Mikrocontroller mit einem maximalen Arbeitstakt betreibt.
    Im Moment erreiche ich unter optimalen Bedingungen bis zu 95%.

  2. Ein empfangener Frame muss verarbeitet werden, bevor er der Schnittstelle zum PC übergeben wird. Während der Verarbeitungszeit ist der Decoder taub. Bei meinem Decoder sind das 75 .. 140 us (je nach Framelänge).

  3. Der Decoder muss abschließend den Frame zum PC übertragen. Je nach verwendeter Schnittstelle ist der Decoder dabei wieder für eine gewisse Zeit taub. Bei meinem Decoder sind das etwa 35 .. 120 us, in denen 1.. 9 Frames zum PC gesendet werden (mit 12 Megabit/Sekunde).
Für einen ca. 100 us langen Frame benötigt man also etwa 200 us zur Verarbeitung und Übertragung. Das ist nicht so tragisch, wie es vielleicht klingt. Das absolute (rein theoretische) Limit liegt damit bei ca 200000 Frames/min (fpm).
In sehr dicht belegten Gegenden findet man höchstens 20000 fpm. Davon empfängt mein Decoder etwa 6000 fpm (und ich arbeite an weiteren Steigerungen). Dabei ist der Decoder geradeeinmal für 2,5% der Gesamtzeit taub. Diese 2,5% lassen sich nur zurückgewinnen, wenn man Detektierung, Verarbeitung und Übertragung in drei parallel arbeitende Hardwareeinheiten aufteilt (z.B. in einem FPGA). Ob sich dieser Aufwand lohnt, muss man im Einzelfall entscheiden.

Normalerweise sendet ein Flugzeug jede Sekunde zwei DF17-Frames. Dazu kommen etwa 10 Frames anderer Typen.





Wesentliche Neuerungen der aktuellen Version 2.6 gegenüber dem Vorgänger 2.5
Wesentliche Neuerungen der aktuellen Version 2.5 gegenüber dem Vorgänger 2.4
Wesentliche Neuerungen der aktuellen Version 2.4 gegenüber dem Vorgänger 2.3
Wesentliche Neuerungen der aktuellen Version 2.3 gegenüber dem Vorgänger 2.2
Wesentliche Neuerungen der aktuellen Version 2.2 gegenüber dem Vorgänger 2.1
Wesentliche Neuerungen der aktuellen Version 2.1 gegenüber dem Vorgänger 2.0
Wesentliche Neuerungen der Version 2.0 gegenüber dem Vorgänger 1.9

Wesentliche Neuerungen der Version 1.9 gegenüber dem Vorgänger 1.8

Neuerungen der Version 1.8 gegenüber dem Vorgänger 1.7

Neuerungen der Version 1.7 gegenüber dem Vorgänger 1.6

laufende Arbeiten



Downloads


Regular Version V2.7

Vorgänger-Version V2.6



Links


Zusatzfiles für adsbScope
Landebahnen (die *apt.out - Files der Zip-Pakete nach /ssb1/ kopieren)

Komplettlösungen
GNS 5890

Software für DVB-T-Sticks
ADSB#
RTL1090

Antennen
Groundplane
ADSB J-Pol Antenne
Colinear-Coaxial

Receiver
miniadsb

andere Decoder
PIC-Decoder von Bertrand
PIC-Decoder bei DL4MEA
BEAST von DL4MEA
Receiver mit ATMEL-Decoder
Receiver mit FPGA-Chip

andere Software
Planeplotter




Entwicklung

19.04.2014
Version 2.7 steht online

21.03.2013
Bugfix-Version 2.6_f3 steht online

09.02.2013
Bugfix-Version 2.6_f1 steht online

26.01.2013
Reguläre Version 2.6 steht online

16.12.2012
Test-Version 2.6-test-8 steht online

08.12.2012
Test-Version 2.6-test-7 steht online

adsbPIC-Decoder:

adsbScope-Software V 2.6-test-7

12.11.2012
Test-Version 2.6-test-6 steht online

adsbPIC-Decoder:

adsbScope-Software V 2.6-test-6

11.05.2012
Test-Version 2.6-test-4 steht online

adsbScope-Software V 2.6-test-4

18.03.2012

Test-Version 2.6-test-2 steht online

adsbScope-Software V 2.6-test-2

09.03.2012
Test-Version 2.6 steht online

adsbPIC-Decoder:
adsbScope-Software V 2.6

19.01.2012
Version 2.5 steht online

adsbScope-Software V 2.5
25.12.2011
Version 2.4 steht online

adsbScope-Software V 2.4

16.12.2011
Aktualisiertes ZIP-File: Der Treiber wurde an den GNS5890 angepasst.

10.12.2011

Version 2.3 steht online

adsbPIC-Decoder:
adsbScope-Software V 2.3

18.10.2011
Version 2.2 steht online

adsbScope-Software V 2.2

19.07.2011
Version 2.1 steht online

adsbPIC-Decoder:
adsbScope-Software V 2.1

18.04.2011
Version 2.0 steht online

adsbPIC-Decoder:
adsbScope-Software V 2.0
04.11.2010
Version 1.9 steht online

adsbPIC-Decoder:
adsbScope-Software V 1.9

13.10.2010
Version 1.8 steht online

adsbPIC-Decoder:
adsbScope-Software V 1.8
30.09.2010
Version 1.7 steht online

adsbPIC-Decoder:
adsbScope-Software V 1.7
23.09.2010
Version 1.6 steht online

adsbPIC-Decoder:
adsbScope-Software V 1.6

30.08.2010
Version 1.5 steht online

adsbPIC-Decoder:
adsbScope-Software V 1.5

27.08.2010
Version 1.4 steht online

adsbPIC-Decoder:
adsbScope-Software V 1.4

31.07.2010

Version 1.2 steht online

adsbPIC-Decoder:
adsbScope-Software V 1.2

13.07.2010
Version 1.1 steht online

adsbPIC-Decoder V 2:
adsbScope-Software V 1.1

07.07.2010
Version 1.0 steht online

22.06.2010
Urversion 0.9 steht online


zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt: 16.06.2010
letzte Änderung: 19.04.2014