Forum: Mikrocontroller und Digitale Elektronik GPS daten auslesen mit PICAXE 18M2


von Iguan (Gast)


Lesenswert?

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

von Werner (Gast)


Lesenswert?

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.

von Iguan (Gast)


Lesenswert?

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)

von Oje (Gast)


Lesenswert?

Das Standardvorgehen beim Debuggen ist nun den/die Strings auszulesen 
und dir auszugeben. Wenn das dann stimmt, kommt der naechste Schritt.

von Iguan (Gast)


Lesenswert?

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..

von Werner (Gast)


Lesenswert?

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

von Iguan (Gast)


Lesenswert?

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...

von BenG (Gast)


Lesenswert?

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.

von Iguan (Gast)


Lesenswert?

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

von BenG (Gast)


Lesenswert?

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 ^^

von BenG (Gast)


Lesenswert?

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

von BenG (Gast)


Lesenswert?

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.

von Iguan (Gast)


Lesenswert?

Und was bedeutet das? Ist es nicht machbar mit einer 18M2?

von Iguan (Gast)


Lesenswert?

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?

von Werner (Gast)


Lesenswert?

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.

von BenG (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.