home
Zicht op Andijk
Hoofd
pagina
DCF77
Ontvanger
Si RF
Module
Useless
Machine
AIS
Ontvanger
GPS
Ontvanger
Uniden
69 XLT
Metaal
Detector

Zelfbouw AIS receiver (GMSK modem)

Toen ik mijn boot verkocht met alle apparatuur raakte ik ook mijn AIS ontvanger kwijt.
En dat is eigenlijk jammer omdat ik de enige ben hier in de regio die AIS signalen doorgeeft aan MarineTraffic.
Een nieuwe AIS ontvanger kopen wil ik niet omdat ik eigenlijk alle technologie in huis heb om de AIS data te ontvangen en door te sturen. Ontvangers en computers genoeg. Software is op het internet te vinden dus wat is het probleem..

Nou het probleem is dat de software vaak ongevoelig en onstabiel blijkt. Zo goed als mijn AIS ontvanger werkte heb ik nog geen software zien draaien.
Mijn voorkeur gaat toch uit naar een hardware decoder. Scheelt een PC die hard moet werken en is eigenlijk altijd beter dan een geluidkaart oplossing.
Dan zelf maar gaan sleutelen en een PIC proccesor gebruiken om de data te decoderen. Dat valt niet mee kan ik verklappen.

Eerste poging
Eerst maar inlezen op het AIS protocol. Een NMEA string decoderen had ik al veel eerder gedaan en daar had ik ook een hele webinterface voor gemaakt.
Daarmee kon ik live meekijken met mijn AIS data. Ook coderen ging prima. Het lukte betrekkelijk eenvoudig om MarineTraffic valse data aan te leveren.
Een vliegdekschip in mijn achtertuin zetten? Geen moeite. Een schip verplaatsen of zelfs laten verdwijnen? Geen probleem :)

Maar NMEA is toch wat anders dan het rechtstreeks uit de lucht pakken van golven en overzetten naar data. Leuke uitdaging.
Dat werd veel zoeken op het internet. De signalen bleken via de GMSK codec de lucht in te gaan.
Nu is GMSK prima beschreven dus een decoder maken bleek geen probleem. Wat wel een probleem bleek was de analoog naar digitaal conversie.
Mijn eerste gedachte was om een 18F4520 pic processor in te zetten. Die heb ik nog wel liggen van mijn metaaldetector project.
De signalen via de analoge comparator naar binnen en zoeken naar de GMSK trainers en data. Zo simpel moet het zijn.
Op zich lukte dat allemaal wel maar het grootste probleem waar ik vast liep was het synchroniseren met de clock.
Door allerlei instabiliteit kreeg ik het niet voor elkaar om de datastream goed te krijgen. Na avonden prutsen ben ik ermee gestopt.

Tweede poging. Deel 1, chips.
Er zijn natuurlijk meer mensen die zelf een AIS decoder hebben gemaakt en die maken allemaal gebruik van een aparte decoderchip.
Kennelijk hadden zij ook een synchronisatie probleem. De meest gebruikte chip is de CMX589a. Een volledige GMSK coder en decoder die de data op clock kan ophoesten.
Dat is makkelijk, hoef ik alleen maar de datastream te decoderen en als NMEA string naar buiten te sturen.

Nadeel is dat deze chip bijna 20 euro kost en niet te verkrijgen is in een DIP-24 uitvoering.
Wel verkrijgbaar in de supermini TSSOP-24 uitvoering van slechts 8 bij 5 mm en met pootjes nog kleiner dan SMD dus vrijwel niet te solderen door mij.
Op een breakout-board kwam ik ze niet tegen dus ik moest er aan geloven. Zelf solderen... Op Youtube staan instructiefilmpjes genoeg.
Zag er best makkelijk uit en het schijnt toch meer angst te zijn dan dat het moeilijk is. Gewoon proberen dus.
In China kocht ik 5 chips voor 25 euro en 20 break-out boards voor 4 euro. Als ik er 2 van de 5 goed krijg ben ik zeer tevreden.

CMX589a Breakout PCB CMX589a breakout

Dan is het een kwestie van doen. Veel licht, sterke leesbril op en met de bout de chip vastzetten. Tjeezus wat zijn die pootjes van de chippies klein.
Pfff met de hand bijna niet te doen maar na even wennen viel het eigenlijk wel mee. Kwestie van rustig blijven, iets wat heel moeilijk voor mij is.
De eerste chip mislukte omdat ik probeerde een pootje recht te buigen die natuurlijk meteen brak. Dus die chip kreeg vlieglessen met een harde landing...
De tweede chip leek mislukt door kortsluiting maar dat heb ik na afloop kunnen repareren. En daarmee een resultaat van 4 uit 5 behaald!
Daarmee houd ik er meer over dan ik nodig heb. Een voor AIS en een paar voor reserve. Iets met D-Star ofzo.

Durf je de gok van solderen niet aan? Als je een chip getest op breakout wil overnemen kijk dan even onderaan deze pagina.

CMX589a breakout CMX589a breakout

En dan is de grote vraag doen die dingen het ook. Snel een proefopzetje gemaakt en een discriminator van een scanner aangesloten.
En verhip, er komt signaal uit. En een kloksignaal op 9600 hertz. En het ziet er allemaal nog goed uit ook op de scope.

CMX589a test AIS scope

Op dit scope beeld zie je boven het AIS signaal uit de scanner. Daaronder de uitgang uit de chip.
Duidelijk is de trainer 001100110011 te zien gevolgd door de start flag 01111110 (7E hex). Dat ziet er prima uit.
De PLL van de chip moet wel aangestuurd worden maar dat komt later in de code.

Tweede poging. Deel 2, klaar voor programmeren.
Een week of drie ben ik bezig geweest met het programmeren van de PIC18f4520 chip om de decoding te doen van het AIS signaal.
Op zich ging dat wel goed maar hoe verder ik kwam in het traject hoe vreemder de PIC zich ging gedragen.
Zelfs eenvoudige standaard C functies lieten de software vastlopen en de UART werd steeds onstabieler.
Na veel gezoek en gedebug blijkt de oorzaak in de stack van de PIC te zitten. Die is veel te klein en loopt gewoon vol. Een veel gehoorde klacht.
Dit betekent dat ik heel sloppy moet gaan programmeren en zo min mogelijk functieaanroepen of poort interupts moet gaan gebruiken.
Het programmageheugen is voor 3% gevuld en de data voor 21% en toch kan ik niet verder vanwege de stack overflow... Waardeloos dus.
Die PIC controllers zijn eigenlijk dus alleen voor rechttoe rechtaan software. Een metaaldetector ofzo.
Ik ben er klaar mee en donder die chips en ontwikkel board in een doos. Ik heb nog lang volgehouden maar heb nu echt mijn vertrouwen in de PIC's verloren.

Ik stap over op de ATmega controllers want dat schijnt wel goed te gaan.

Over op de ATmega328
Binnen een paar dagen had ik al mijn PIC spullen op Marktplaats verkocht. Dat ruimde mooi op.
Ondertussen had ik een Arduino One setje gekocht die binnen twee dagen geleverd werd. Kostte me wel 2 tientjes maar ik had het wel snel.
Na een paar avonden zoeken en spelen wat nu de beste IDE is voor de Arduino heb ik gekozen voor de CodeBlocks omgeving.
Een volwaardige C omgeving voor de AVR. Dus niet een kiddyscript Arduino om een ledje te laten knipperen maar het echte werk.
En met de GCC compiler die in deze IDE wordt gebruikt had ik mijn code met een paar avondjes draaiend.
Het was even wennen aan de opzet van de 328p chip en al zijn registers maar er is zoveel op internet te vinden dat het geen probleem was.
Ik moet zeggen zelfs als je PIC gewend bent dat deze ATMega familie toch echt veel beter werkt. Al snel had ik mijn AIS ontvanger werkend.
Ook belangrijk.. zelf gemaakt. Dus geen code van een ander gepakt maar zelf een oplossing gebouwd. 9k source en 5k hex inclusief commentaarregels :)
Het enige wat ik geleend heb is de CRC16 routine (7 regels code waarvan ik eigenlijk niet snap wat het doet..).

Hieronder op de foto de proefopstelling gekoppeld aan mijn handscanner.

AIS testopstelling

Links is de Arduino. Rechts de CMX589a print en niet zichtbaar de opamp vanaf de scanner. Dit omdat de CMX589a toch wel een sterk signaal wil hebben.
Het ontwikkelen deed ik op een geluidsopname van AIS signalen zodat ik een continu aanvoer van goede signalen had. Veel beter dan de misvormde data uit de scanner.
Ook kon ik de luidsprekeruitgang gebruiken zodat het signaal altijd lekker versterkt was. Met de scanner heb ik een opamp nodig.

Omdat ik zo'n 10 kilometer van de eerste vaarweg afzit heb ik weinig ontvangst hier. Ondanks al misvormingen toch enkele goede signalen!
Nog even de grote berichten opknippen en dan is de ontvanger klaar.

AIS decode AIS decode detail

Ondertussen heb ik wat Arduino Nano's besteld in China. Daarmee kan ik mischien wel een hele goedkope en compacte AIS transponder maken!
Zonder zender natuurlijk en anders alleen in een proefopstelling.

De nano's zijn binnengekomen en de code werkt feilloos. En dat betekent dat ik ook een print kan ontwerpen die alle hardware bij elkaar heeft.
In Eagle heb ik een print gemaakt en het schema netjes uitgewerkt. Ook heb ik het zendgedeelte aangesloten waardoor het mogelijk is om, indien geprogrammeerd,ook AIS signalenuit te zenden. En daarmee kan de AIS transponder werkelijkheid worden. Hieronder de ontwerpen.

In China heb ik 5 printjes laten maken zodat de schakeling netjes opgebouwd kan worden.
De print is nu niet alleen te beruiken voor APRS maar zelfs ook voor D-Star en KAR (Openbaar Vervoer)!
Na een paar weken kwamen de printjes binnen en na een uurtje solderen was de eerste gereed voor gebruik.
Helaas de tekst van MIC en SPK omgedraaid. Hieronder het resultaat van een goed werkende AIS decoder.
De decoder heb ik aangesloten op de discriminator uitgang van een scanner. Uiteraard kan je een losse ontvanger module gebruiken maar voor mij niet nodig.
Op de onderste fotoos heb ik alles in een kastje gebouwd en doet nu dienst als AIS decoder

Deze volledige gebouwde, geprogrammeerde en geteste versie zoals hier op de foto en besproken mag weg voor 75 euro.
Mail me als je interesse hebt. De tweetjes even verwijderen. p2h292w2s@techniekendier.nl

Laatste update 28-3-2015

 
Webdesign door mezelf en alle content is auteursrechtelijk beschermd.