{"id":828,"date":"2014-01-22T17:40:52","date_gmt":"2014-01-22T16:40:52","guid":{"rendered":"http:\/\/www.admindu.de\/wordpress\/?p=828"},"modified":"2014-01-22T17:48:00","modified_gmt":"2014-01-22T16:48:00","slug":"gps-und-atmega","status":"publish","type":"post","link":"https:\/\/www.admindu.de\/wordpress\/?p=828","title":{"rendered":"GPS und Atmega"},"content":{"rendered":"<p>Mittlerweile habe ich eine Schaltung mit einem <a title=\"Atmega 1284p\" href=\"http:\/\/www.atmel.com\/devices\/atmega1284p.aspx\" target=\"_blank\">Atmega 1284p<\/a> zusammen gesteckt, um mich dem Ziel zu n\u00e4hern, <a title=\"Franz Joseph\" href=\"http:\/\/www.admindu.de\/wordpress\/?p=537\" target=\"_blank\">Franz Joseph<\/a> mit einer GPS Navigation aus zu statten. Da der 1284p zwei Hardware UARTs bietet, ist die Anbindung des GPS sehr komfortabel m\u00f6glich. \u00dcber den einen UART kann per Bootloader die Software geladen und die Ausgabe realisiert werden. Der zweite UART bindet das GPS Modul an. Die Schaltung sieht dann wie folgt aus:<\/p>\n<p><a href=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/IMG_20140122_163920.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-829\" alt=\"IMG_20140122_163920\" src=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/IMG_20140122_163920-300x183.jpg\" width=\"300\" height=\"183\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/IMG_20140122_163920-300x183.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/IMG_20140122_163920-1024x626.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<p>Das GPS Modul habe ich nach Maestro A2035-H user manual (v 1.3, Page 14) beschaltet und mit einem Kabel versehen, um es an die Schaltung an zu binden. Hier ein Bild des Moduls:<\/p>\n<p><a href=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/IMG_20140122_164106.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-830\" alt=\"IMG_20140122_164106\" src=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/IMG_20140122_164106-300x271.jpg\" width=\"300\" height=\"271\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/IMG_20140122_164106-300x271.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/IMG_20140122_164106-1024x926.jpg 1024w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/IMG_20140122_164106.jpg 1180w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>sowie der Auszug aus dem Datenblatt, der die minimale Beschaltung zeigt.<\/p>\n<p><a href=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/a2035-h-minimal.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-831\" alt=\"a2035-h-minimal\" src=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/a2035-h-minimal-300x216.jpg\" width=\"300\" height=\"216\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/a2035-h-minimal-300x216.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/a2035-h-minimal.jpg 968w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Software-technisch bin ich soweit gekommen, dass ich die relevanten NMEA Sentences GPGGA und GPVTG vom Modul gelesen, geparst und in Structs aufbereitet habe. Anhand einer <a title=\"Aviation Formular\" href=\"http:\/\/williams.best.vwh.net\/avform.htm\" target=\"_blank\">Dokumentation f\u00fcr Flugsch\u00fcler<\/a> habe ich eine Kursberechnung realisiert, die es erm\u00f6glich zwischen dem aktuellen Standort und einer vorgegebenen Ziel-Koordinate einen Kurs und eine Distanz zu berechnen. Da der NMEA Sentence GPVTG den anliegenden Kurs in Bewegung enth\u00e4lt, ist es somit m\u00f6glich, diesen Kurs dem Soll-Kurs anzupassen um sich in Richtung auf die Ziel-Koordinate zu bewegen. Hier ein Screenshot, der im oberen Teil die aufbereitete Ausgabe zeigt, unterhalb die Rohdaten und weitere Debug-Ausgaben.<\/p>\n<p><a href=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/ausgabe-debug-mode.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-835\" alt=\"ausgabe-debug-mode\" src=\"http:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/ausgabe-debug-mode-300x214.png\" width=\"300\" height=\"214\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/ausgabe-debug-mode-300x214.png 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2014\/01\/ausgabe-debug-mode.png 486w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Es ist zu beachten, dass dieses GPS Modul tats\u00e4chlich einen geordneten Shut-Down braucht, da sonst der interne Flash korrumpiert werden kann. Im schlimmsten Falle wird das Modul dadurch unbrauchbar. Da man einen solchen Shut-Down durch eine Low-High-Low Transition des ON\/OFF Pin einfach erreichen kann, und man diesen PIN auch zum Start-Up mit einer solchen Low-High-Low Sequenz bedienen muss,\u00a0 ist das kein gr\u00f6\u00dferes Problem. Ein einfacher IO-PIN des Atmega reicht. Diesen im Default auf LOW halten und bei Bedarf f\u00fcr ca. 1ms auf HIGH ziehen f\u00fchrt zum Erfolg. Damit ist es dann auch m\u00f6glich das Modul in einen Hibernate-Mode zu versetzen, und Engerie zu sparen, wenn man \u00fcber l\u00e4ngere Zeit keinen Fix ben\u00f6tigt.<\/p>\n<p>Ein Abgleich der auf dem Atmega errechneten Daten mit Google-Earth und anderen Tools zur Kursberechnung (die ich im Internet finden konnte) hat ergeben, dass die Berechnungen erstaunlich genau sind. Sowohl im Nahbereich, als auch \u00fcber gro\u00dfe Strecken, sind Kurs und Distanz richtig. Auch ein manueller Check mit Geodreieck und Karte passt. Der Atmega hat bei 8Mhz schon locker genug Performance, jede Sekunde ein entsprechendes Update zu rechnen. Vermutlich w\u00fcrde auch eine 5Hz Update-Rate gehen, die das Modul als maximum unterst\u00fctzt. F\u00fcr Franz Joseph reicht es alle 10 bis 30 Sekunden aus.<\/p>\n<p>Das das GPS einen Kurs nur in Bewegung und nur bei guter Abdeckung hinreichend genau ermitteln kann, m\u00f6chte ich als n\u00e4chstes noch einen Kompass integrieren und den dort ermittelten Kurs mit dem des GPS abgleichen und ggf, mitteln. Vielleicht nehme ich hier gleich eine g\u00fcnstige China-IMU, die dann auch noch Gyro, Accelerometer und barometrischen H\u00f6henmesser bietet (10DOF). Damit kann man dann einen neigungskompensierten Kompass realisieren, die GPS-H\u00f6he mit der Baro-H\u00f6he mitteln und zus\u00e4tzlich noch die Lage des Systems im Raum ermitteln.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mittlerweile habe ich eine Schaltung mit einem Atmega 1284p zusammen gesteckt, um mich dem Ziel zu n\u00e4hern, Franz Joseph mit einer GPS Navigation aus zu statten. Da der 1284p zwei Hardware UARTs bietet, ist die Anbindung des GPS sehr komfortabel m\u00f6glich. \u00dcber den einen UART kann per Bootloader die Software geladen und die Ausgabe realisiert &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.admindu.de\/wordpress\/?p=828\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;GPS und Atmega&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[44],"tags":[67,70,68,71,69],"class_list":["post-828","post","type-post","status-publish","format-standard","hentry","category-atmega-bastelei","tag-a2035-h","tag-atmega","tag-gps","tag-kursberechnung","tag-ttl"],"_links":{"self":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=828"}],"version-history":[{"count":12,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/828\/revisions"}],"predecessor-version":[{"id":844,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/828\/revisions\/844"}],"wp:attachment":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}