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