{"id":509,"date":"2014-07-09T08:12:51","date_gmt":"2014-07-09T07:12:51","guid":{"rendered":"http:\/\/chris-stubbs.co.uk\/wp\/?p=509"},"modified":"2014-07-15T23:17:59","modified_gmt":"2014-07-15T22:17:59","slug":"navspark-based-rtty-tracker","status":"publish","type":"post","link":"https:\/\/chris-stubbs.co.uk\/wp\/?p=509","title":{"rendered":"NavSpark based RTTY tracker"},"content":{"rendered":"<p>The NavSpark was an <a href=\"https:\/\/www.indiegogo.com\/projects\/navspark-arduino-compatible-with-gps-gnss-receiver\">indiegogo <\/a>campaign launched some time last year. It is essentially a GPS receiver with a 100MHz\u00a0 processor and 1024kb of flash memory. It also allows you to compile and upload code for it straight from the Arduino IDE. It comes in at a price of around 15 USD and a similar form factor to that of the Arduino Nano.<\/p>\n<div id=\"attachment_512\" style=\"width: 293px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-512\" class=\"wp-image-512 size-medium\" src=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/pinout1-283x300.jpg\" alt=\"pinout1\" width=\"283\" height=\"300\" srcset=\"https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/pinout1-283x300.jpg 283w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/pinout1.jpg 500w\" sizes=\"auto, (max-width: 283px) 100vw, 283px\" \/><p id=\"caption-attachment-512\" class=\"wp-caption-text\">NavSpark board pinout.<\/p><\/div>\n<p>After many months of waiting and a few badly translated Chinese update emails, my two preorder NavSpark boards arrived! They sat around on my desk for a fair few weeks before I decided to sit down and crack on with turning them into trackers.<\/p>\n<p>The first step was to set one up on some breadboard with an NTX2B and a resistor network to set the shift, then toggle a GPIO pin on and off to produce the mark\/space tones required for RTTY.<\/p>\n<div id=\"attachment_510\" style=\"width: 594px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/14586862591_044677e949_h.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-510\" class=\"wp-image-510 size-large\" src=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/14586862591_044677e949_h-1024x576.jpg\" alt=\"14586862591_044677e949_h\" width=\"584\" height=\"328\" srcset=\"https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/14586862591_044677e949_h-1024x576.jpg 1024w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/14586862591_044677e949_h-300x168.jpg 300w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/14586862591_044677e949_h-500x281.jpg 500w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/14586862591_044677e949_h.jpg 1600w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><p id=\"caption-attachment-510\" class=\"wp-caption-text\">NavSpark board and NTX2B on breadboard<\/p><\/div>\n<p>It took a bit of faffing around to actually get code onto it. Sometimes it will not allow you to upload, and you have to short BOOT_SEL to GND to restore the working bootloader from ROM, then try again. But I eventually had a program that was toggling pin 12 on and off.<\/p>\n<p>Putting &#8220;GnssConf.init();&#8221; in &#8220;setup()&#8221; initializes the GNSS receiver and causes &#8220;task_called_after_GNSS_update()&#8221; to run. Inside this function its remarkably easy to get all the GPS data your tracker might want, without the need to mess around with any NMEA parsing.<\/p>\n<blockquote><p>void task_called_after_GNSS_update(void)<br \/>\n{<br \/>\nGnssInfo.update();<br \/>\ngps_hour = GnssInfo.time.hour();<br \/>\ngps_min = GnssInfo.time.minute();<br \/>\ngps_sec = GnssInfo.time.second();<\/p>\n<p>lat = GnssInfo.location.latitude();<br \/>\nlng = GnssInfo.location.longitude();<\/p>\n<p>alt = GnssInfo.altitude.meters();<\/p>\n<p>gps_sats = GnssInfo.satellites.numGPSInUse(NULL);<br \/>\ngln_sats = GnssInfo.satellites.numGLNInUse(NULL);<\/p>\n<p>}<\/p><\/blockquote>\n<p>Then came the challenge to tackle the timing of sending RTTY. Luckily it turns out the Navspark has a few timers to use with millisecond precision <a href=\"https:\/\/store-lgdi92x.mybigcommerce.com\/content\/NavSpark-Programmer-Guide.rev0.2.pdf\">[page 80 TIMER]<\/a><\/p>\n<blockquote><p>uint8_t tmr0 = Timer0.every(20, tmr_task);<\/p><\/blockquote>\n<p>Its then as simple as sticking <a href=\"http:\/\/ava.upuaut.net\/?p=408\">Anthony Stirk&#8217;s great little Interrupt based RTTY script<\/a> inside the tmr_task() function. With some minimal modification to write the GPIO pin high\/low.<\/p>\n<p>Check out the code <a href=\"https:\/\/github.com\/chrisstubbs93\/NavsparkRtty\">here<\/a>.<\/p>\n<p>I soldered a couple of 4k2 0603 resistors between VCC and DATA, then DATA and GND on the NTX2, also shorting VCC and EN. I then soldered a 47K and 10K resistor in series to the DATA pin, then connected the other end to our NavSpark&#8217;s GPIO pin. You can solder the NavSpark board pretty much straight on top of the NTX2B, but its probably a good idea to add some insulation (kapton tape) between the two. The NTX2 GND is connected to the GND on the board, and VCC to the 3.3v regulated output.<\/p>\n<div id=\"attachment_514\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_211323.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-514\" class=\"wp-image-514 size-medium\" src=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_211323-300x168.jpg\" alt=\"20140715_211323\" width=\"300\" height=\"168\" srcset=\"https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_211323-300x168.jpg 300w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_211323-1024x576.jpg 1024w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_211323-500x281.jpg 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-514\" class=\"wp-caption-text\">NTX2B with resistors.<\/p><\/div>\n<div id=\"attachment_525\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_230157.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-525\" class=\"wp-image-525 size-medium\" src=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_230157-300x168.jpg\" alt=\"20140715_230157\" width=\"300\" height=\"168\" srcset=\"https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_230157-300x168.jpg 300w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_230157-1024x576.jpg 1024w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_230157-500x281.jpg 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-525\" class=\"wp-caption-text\">NTX2B \/ NavSpark sandwich.<\/p><\/div>\n<div id=\"attachment_516\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_215626.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-516\" class=\"wp-image-516 size-medium\" src=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_215626-300x168.jpg\" alt=\"20140715_215626\" width=\"300\" height=\"168\" srcset=\"https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_215626-300x168.jpg 300w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_215626-1024x576.jpg 1024w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_215626-500x281.jpg 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-516\" class=\"wp-caption-text\">NavSpark side up, showing antenna.<\/p><\/div>\n<div id=\"attachment_517\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_215645.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-517\" class=\"wp-image-517 size-medium\" src=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_215645-300x168.jpg\" alt=\"20140715_215645\" width=\"300\" height=\"168\" srcset=\"https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_215645-300x168.jpg 300w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_215645-1024x576.jpg 1024w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/20140715_215645-500x281.jpg 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-517\" class=\"wp-caption-text\">NTX2B side up, showing antenna.<\/p><\/div>\n<div id=\"attachment_529\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/Untitled.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-529\" class=\"size-medium wp-image-529\" src=\"http:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/Untitled-300x92.jpg\" alt=\"Sitting on my desk, still managed a time fix.\" width=\"300\" height=\"92\" srcset=\"https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/Untitled-300x92.jpg 300w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/Untitled-1024x315.jpg 1024w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/Untitled-500x153.jpg 500w, https:\/\/chris-stubbs.co.uk\/wp\/wp-content\/uploads\/2014\/07\/Untitled.jpg 1401w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-529\" class=\"wp-caption-text\">Sitting on my desk, still managed a time fix.<\/p><\/div>\n<p>Overall I found the NavSpark hardware very easy to work with, and the coding perhaps even easier than a normal Arduino\/uBlox.NTX2 tracker, mainly due to the lack of requirement for a NMEA parser. The NavSpark documentation is a little sparse and badly translated, however everything you need programming wise can be found <a href=\"https:\/\/store-lgdi92x.mybigcommerce.com\/content\/NavSpark-Programmer-Guide.rev0.2.pdf\">here<\/a>. The performance of the GPS in terms of time to first fix is very good, getting a time fix after the first sentence, and a position fix after 4\/5 sentences. Once it had aquired a fix and with the NTX2B running, with the supply voltage set at 5.6V and fed to the battery input, the tracker was using about 65mA current.<\/p>\n<p>Would I recommend the NavSpark over an AVR\/uBlox based tracker?<\/p>\n<p>I&#8217;d certainly consider it! There is probably far more information out there in the AVR world, but if you are just making a simple RTTY tracker then it is certainly a viable option. Just wait for the flight test in the next month or so before rushing out to launch one!<\/p>\n<p>Speaking of flight, what about the COCOM GPS limit?<\/p>\n<p>According to <a href=\"http:\/\/www.skytraq.com.tw\/Commonly%20Asked%20Questions.pdf\">SkyTraq <\/a>the GPS will only shutdown if 18km altitude AND 1000km\/h velocity are exceed simultaneously, meaning it should well be suitable for HAB use.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The NavSpark was an indiegogo campaign launched some time last year. It is essentially a GPS receiver with a 100MHz\u00a0 processor and 1024kb of flash memory. It also allows you to compile and upload code for it straight from the &hellip; <a href=\"https:\/\/chris-stubbs.co.uk\/wp\/?p=509\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[10],"tags":[],"class_list":["post-509","post","type-post","status-publish","format-standard","hentry","category-hab"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/chris-stubbs.co.uk\/wp\/index.php?rest_route=\/wp\/v2\/posts\/509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chris-stubbs.co.uk\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chris-stubbs.co.uk\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chris-stubbs.co.uk\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chris-stubbs.co.uk\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=509"}],"version-history":[{"count":14,"href":"https:\/\/chris-stubbs.co.uk\/wp\/index.php?rest_route=\/wp\/v2\/posts\/509\/revisions"}],"predecessor-version":[{"id":531,"href":"https:\/\/chris-stubbs.co.uk\/wp\/index.php?rest_route=\/wp\/v2\/posts\/509\/revisions\/531"}],"wp:attachment":[{"href":"https:\/\/chris-stubbs.co.uk\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chris-stubbs.co.uk\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chris-stubbs.co.uk\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}