Hallo zusammen! Ich möchte gerne die Daten aus einem NMEA GPS-Empfänger im Speicher einer PICAXE 18M2 ablegen für die spätere Auswertung. Der Empfänger wird mit 5V betrieben und sendet sekündlich mehrere Strings über die Serielle-Schnittstelle. Die Baudrate beträgt "4800,8,N,1". Der Empfänger habe ich schon mal an meinen PC angeschlossen (5V-Speisung extern) und mit Terraterm die Rückmeldungen beobachtet. Sie sehen korrekt aus. Nachfolgend ein paar Beispiele: $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47 $GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A $GPVTG,054.7,T,034.4,M,005.5,N,010.2,K*48 Nun habe ich den Empfänger direkt an die PICAXE angeschlossen. Mit folgendem Code möchte ich den String im Speicher ablegen: Code: Data_in: serin 1, N4800, ("$GPGGA"),b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10 debug goto Data_in Folgender link habe ich als inspiration verwendet (Seite 12 und 13): http://www.husstechlabs.com/Introductio ... PICAXE.pdf Am liebsten würde ich es mit dem Befehl HSERIN wie bei den X2 Chips machen (Speicheradresse und Anzahl Zeichen angeben) aber der M2 unterstützt das ja nicht mehr Leider passiert bei obigem Code gar nichts, weil es anscheinend nie den String "$GPGGA" erkennt. Erst wenn ich den Suchstring bis auf "$" verkürze, werden werte in die Variablen abgelegt. Allerdings falsche, wie z.B "f" und "&" und ">" also solche, die gar nicht im GPS-String vorkommen. Ich habe schon verschiedene Baudeinstellungen ausprobiert: N4800, N4800_4, N4800_8, T4800 etc.. hat aber alles nichts gebracht. Was mache ich falsch? mfg Iguan
Iguan schrieb: > Was mache ich falsch? Du gibst einen nicht funktionsfähigen Link an. Unerlaubte Zeichen deuten auf Geschwindigkeits- oder Synchronisationsfehler hin. Um ersteres auszuschließen, sende mit deinem PICAXE 18M2 Zeichen und vergleiche die Zeichendauer (z.B. Anfang Start- bis Anfang Stopbit) mit denen vom GPS.
Hier nochmals der Link (Seite 12 und 13) http://www.husstechlabs.com/Introduction%20to%20GPS%20and%20PICAXE.pdf Mit Terraterm hat es mit der Einstellung "4800,8,N,1" funktioniert, dann müsste es doch mit der Picaxe 18M2 auch gehen...( mit serin 1, N4800, ("$GPGGA"),b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10)
Das Standardvorgehen beim Debuggen ist nun den/die Strings auszulesen und dir auszugeben. Wenn das dann stimmt, kommt der naechste Schritt.
Irgendwie funktioniert etwas mit dem Qualifier nicht! Wenn ich das ganze ohne Qualifier mache, also anstelle: serin B.0, N4800,("GPGGA"),b0,b1,b2,b3,b4,b5,b6,b7,b8,b9 so: serin B.0, N4800,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9 werden die richtigen Zeichen im Debugfenster angezeigt, jedoch verschoben, da ja die zeichen ja irgendwann abgespeichert werden. An was liegt das? das mit den Qualifiern sollte doch funktionieren..
Iguan schrieb: > Hier nochmals der Link (Seite 12 und 13) Dort ist angegeben:
1 | serin0, T4800, ("$GPGGA"),b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10 |
Mit "T4800" hab ichs auch schon probiert, wenn du das meinst. Gemäss vorherigen Post, habe ich bereits einen Teilerfolg erzielt, ohne qualifier. Also an der Geschwindigkeit sollte es nicht liegen. Jedoch benötige ich qualifiers um nach einem gewissen String die Zeichen in Variablen abzuspeichern, nicht irgendwann... diese qualifiers scheinen allerdings bei mir irgendwie nicht zu funktionieren. Ausserdem ist mir nicht klar, wie ich einen ca. 64 Zeichen langer GPS-String auf diese Weise im Speicher ablegen kann, wenn ich nur die Variablen b0 bis b27 zur Verfügung habe... gibt es einen Befehl um mit einer Picaxe M2 ab einer gewissen Adresse alles in den Speicher zu füllen, wie bei den älteren X2-Chips der Befehl: HSERIN spaddress, count {,(qualifier)} dieser ist mit den neueren M2-chips jedoch nicht mehr gültig...
Habe das ganze jetzt auch mal getestet mit meinen 28X2 mein Problem is das weder serin noch hserin funktioniert nicht einmal der code serin B.0, N4800,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9 funktioniert bei mir (habe den code natürlich angepasst da ich mein gps-modul an pin c.1 habe) und meines wissens geht der befehl hserin bei den M2 parts. sogar im hintergrund wenn der befehl nicht ausgeführt wird, allerdings dann nur maximal 2 bytes im buffer. aber da ich bis jetzt kein erfolg mit hserin hatte versuche ich es weiterhin mit dem normalen serin befehl.
hmm.. das kann doch nicht sein... haben wir fehlerhafte chips oder was?? Bitte poste, wenn du das Problem lösen konntest! ...tststs... ist mir echt schleierhaft das Ganze... Oder liegts am Editor? Ich habe V5.3.6 mit der Syntax DLL262144
mit diesen code erhalte ich entweder nur "0" oder zeichen wie @ und < serin c.0,T4800_8,b0,b1,b2,b3,b4,b5 habe es auch noch einmal mitm oszilloskop überprüft aus meinen gps kommt ein true level raus (0=high-level / 1=low-level) deswegen das "T" hab auch extra überprüft ob meine picaxe wirklich mit 8 Mhz läuft. bei meinen GPS-Modul hab ich einen 1-Level von rund 3,2 volt und einen 0-Level von rund 1,2 Volt ... bin mir daher nicht sicher ob das dem controler ausreicht als 0-Level und er deswegen nur ungültige zeichen ausspuckt. werde heute abend bis in die nacht hin noch ein paar tests machen mit unterschiedlichen taktfrequenzen ^^
ich habs endlich raus! ^^ bhoaa wie ich mich freue und gleichzeitig ärgere mir is bei den vorherigen posts etwas aufgefallen ... "so: serin B.0, N4800,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9 werden die richtigen Zeichen im Debugfenster angezeigt, jedoch verschoben, da ja die zeichen ja irgendwann abgespeichert werden." bei meinen eigenen code habe ich immer die C-Ports verwendet da es ja auch die eingänge sind. jetzt habe ich mal die ausgangs Pins der Picaxe als eingänge genutzt also die B-Ports, und siehe da es funktioniert. sogar "serin b.7,T4800_8,("$GPGGA,"),b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10" funktioniert jetzt bei mir. aber ich habe keine ahnung wieso es bei den pins funktioniert die eigentlich ausgänge sind, und die pins die eigentlich eigänge sind nicht. o0
Nachtrag: So wie es scheint hat die Picaxe an den Eingängen und Ausgängen leicht unterschiedliche Trigger-Level bei denen sie zwischen 0 und 1 unterscheidet. Da das GPS-Modul mit 3 bis 5 Volt betrieben werden kann hat sie ein 3 Volt Ausgangslevel auch wenn es mit 5 Volt betrieben wird.
Sorry, habe deinen vorletzten post nicht gesehen... Bei meinem Versuch habe ich ja den B port (b.0) verwendet, wieso funktioniert es bei mir nicht?
BenG schrieb: > So wie es scheint hat die Picaxe an den Eingängen und Ausgängen leicht > unterschiedliche Trigger-Level bei denen sie zwischen 0 und 1 > unterscheidet. An "leicht unterscheidlich" darf es nicht scheitern. Entweder unterscheiden sich die Pegel lt. Datenblatt grundlegend, oder du liegst mit deinem Signal an einem "geht so gerade noch"-Arbeitspunkt, was dann beliebiger Grund für unzuverlässiges Verhalten sein kann.
Vielleicht einfach mal bei der 18M2 andere Pins benutzen da es anscheinend Unterschiede gibt bei den ports?!? Hat bei mir ja auch wunderbar geholfen ^^ Der 18M2 hat ja glaube ich auch 2 unterschiedliche ports. Von allen Pins der 18M2 sind 2 ja nur reine Ein und Ausgänge. An den anderen Pins befinden sich chip intern ja noch AD und DA Wandler.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.