Forum: Projekte & Code GPS daten in den ATMEGA 128


von SvenP (Gast)


Lesenswert?

Hallo

Schreibe in Bascom ein kleines Programm das die GPS koordinaten auf ein
display anzeigt.

Die hardware ist von display 3000

der Atmega hat ja laut datenbaltt 2 UARTS

eine an PE0 und PE1 dort habe ich einen MAX 3232 dran der mein UBLOX
MS1E versorgt.

Wenn ich am MAX 3232 den PC dran hänge bekomme ich auch GPS daten nur
am ATMEL nicht.

wie kann ich die daten in den atmega hohlen mit input kommt nichts

wie kann ich diese uart ansprechen und nicht die andere.

Bin für jede hilfe dankbar

habe schon die leitungen gedreht RX<->TX nichts

von Bernd (Gast)


Lesenswert?

ohne deinen Code zu kennen wird es schwierig, haste dass denn so
deklariert?

$baud = 4800

Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 ,
Databits = 8 , Clockpol = 0

von SvenP (Gast)


Lesenswert?

Hallo habe folgendermaßen gemacht




regfile = "m128def.dat"
$crystal = 16000000
$baud = 4800
.
.LCD Deklaration

Dim Inbound As Byte

Open "COM1:" For Binary As #1

Do
  Input #1 , Inbound
lcd_string="NMEA:" + Chr(inbound)
Lx1 = 1
Ly1 = 24
Fontsize = 0
Lcd_fcolor = Weiss
Lcd_bcolor = Dunkelblau
Gosub Lcd_print
 Loop


LCD routinen


end


ich sehe nur das NMEA auf dem display.

was mache ich falsch????


auch der Print befehl an COM2: geht nicht auf meinen Terminal kommt
nichts an habe schon TX und RX vertauscht kein erfolgt.

von Bernd (Gast)


Lesenswert?

Inbound, lcd_string,
müssen das denn nicht auch Stringvariablen werden?
Dim lcd_string as String*15

von Ssss S. (sssssss)


Lesenswert?

>eine an PE0 und PE1 dort habe ich einen MAX 3232 dran der mein UBLOX
>MS1E versorgt.
Du hast zwischen dem ublox und dem mega nen max3232 ?
Der ublox macht doch 0/5V pegel oder ?

Dann kannste direk den ublox an den mega port hängen ;)

mega und ublox machen 0/5V Pegel

Der PC hat -12V/12V, deshalb brauchst du zum PC hin den max3232 Wandler
;)

Bye, Simon

von SvenP (Gast)


Lesenswert?

Hallo

Laut Datenblatt hat der GPS Empfänger einen 3,3V Pegel und muß mit
einem MAX 3232 ausgerüstet werden.

von Ssss S. (sssssss)


Lesenswert?

nein, nicht wenn er am mega hängt ;)

nur zum PC hin ;)

Zum mega würde ich
ublox TX --> mega RX (erkennt auch 3.3V als high)
mega TX --> 22k/33k Spannungsteiler -> 3.3V

mege TX o---[22k]-----X-----[33k]-----ognd
(bei X den ublox RX hin)

Den max brauchst du nur um ihn auf rs232 pegel zu bringen (+/- pegel)

BYe, Simon

von SvenP (Gast)


Lesenswert?

Habe es direkt an den GPS Empfänger angeschlossen so jetzt kommt was
aber wie kann man nun den gesammten Datensatz einlesen

z.b

$GVTG...............................*32
$GGGA...............................*98


ich bekomme nur $G0........*$01
usw


vielen dank

von Bernhard S. (bernhard)


Lesenswert?

>aber wie kann man nun den gesammten Datensatz einlesen

Man könnte step by step jedes Zeichen einlesen und nach einer
bestimmten Zeichenfolge, also nach dem Anfang des Strings, suchen.

z.B suche nach "$GVTG"

Wurde noch kein "$GVTG" gefunden, werden alle nachfolgend
eingelesenen Zeichen verworfen.

Hat Dein µC "$GVTG" gefunden liest er alle Datenfelder ein. Die
Datenfelder werden Durch Kommatas voneinander getrennt.
Zum Ende des "$GVTG"-Strings wird ein "*" empfangen.

Ob Du die Prüfsumme auswertest oder nicht, das ist Dir überlassen.

Man könnte die Datenfelder in den SRAM zur weiteren Verarbeitung
ablegen.

In Assembler habe ich es so gelöst:

http://www.mikrocontroller.net/forum/read-4-354990.html

Hoffentlich konnte ich Dir durch den kleinen Tipp etwas weiter helfen.


Bernhard

von svenP (Gast)


Lesenswert?

hallo

Habe noch folgendes Problem

die Daten kommen so rein es sieht so aus als ob der Atmega nicht
hinterher kommt

GPGGA,235947.000,0000.0000,N,0000.0000,E,017*00
,071000,,*1C
,M,,N,,K*4E
GPGGA,235947.000,0000.0000,N,0000.0000,E,0170
,,,071000,,*1C
,,N,,K*4E
GPGGA,235947.000,0000.0000,N,0000.0000,E,01700
,,071000,,*1C
M,,N,,K*4E
GPGGA,235947.000,0000.0000,N,0000.0000,E,017038,M,,,,0000*00
000,*4C
C,235947.000,V,0000.0000,N,0000.0000,E,,,017*1C
GPGGA,235947.000,0000.0000,N,0000.0000,E,017038
,071000,,*1C
,M,,N,,K*4E
GPGGA,235947.000,0000.0000,N,0000.0000,E,017038000*00
0,,*1C
TG,,T,,M,,N,,K*4E

$regfile = "m128def.dat"
$crystal = 16000000
$baud = 4800
$baud1 = 4800

On Urxc Onrxd         'InterruptRoutine setzen
Enable Urxc           'Interupt URXC einschalten
Enable Interrupts


Dim Buffer As Byte
Dim Str1 As String * 30
Dim Counter As Byte

Open "COM1:" For Binary As #1
Open "COM2:" For Binary As #2

Do
Loop


Onrxd:
Buffer = Udr


       Select Case Buffer
       Case Asc( "$")
       Str1 = ""
       Case 13
       Counter = 1
       Case Else
         Str1 = Str1 + Chr(buffer)
   End Select

   If Counter = 1 Then

         Print #2 , Str1
Str1 = ""
Buffer = ""
Counter = 0
End If
Return



sollte aber mit anfang $ und ende line feed das scheint ja zu klappen
aber das $ nicht.

hat jemand eine idee mit bascom, assembler verstehe ich nicht


vielen dank

von Bernhard S. (bernhard)


Lesenswert?

So sieht ein komplettes Paket von mir aus:

$GPGGA,105836,5059.2543,N,01101.2294,E,0,00,0.0,248.0,M,248.0,M,0.0,0000 
*51
$GPGSA,A,1,06,02,06,06,06,02,06,06,02,06,06,06,0.0,0.0,0.0*34
$GPGSV,3,1,12,06,48,032,00,02,20,309,00,06,48,032,00,06,48,032,00*79$GPG 
SV,3,2,12,06,48,032,00,02,20,309,00,06,48,032,00,06,48,032,00*7A
$GPGSV,3,3,12,02,20,309,00,06,48,032,00,06,48,032,00,06,48,032,00*7B
$GPRMC,105836,V,5059.2543,N,01101.2294,E,0.00,0.00,100506,0.0,W*7D


Dauert ca. 800ms und wird 1x pro Sekunde gesendet.

Versuche doch ersteinmal die Daten im SRAM abzulegen?

Kann sein, dass Bascom es sonst nicht schafft?

Bernhard

von svenP (Gast)


Lesenswert?

ja
aber wie???

wie kann man den sram ansprechen


gruß

herrmann

von Bernhard S. (bernhard)


Lesenswert?

>aber wie???

da kann ich Dir leider nicht helfen, ich treibe nur in Assembler mein
unwesen.

Da ich bei BASCOM nicht genau weiß, was der µC wirklich intern so tut
oder nicht tut.

Bernhard

von Hauke Radtki (Gast)


Lesenswert?

Wenn ich morgen zeit finde schreibe ich dir ein kurzes test programm in
assembler, dass du aufflashen kannst. Es legt die daten im ram ab (und
aktualisiert sie immer) und sendet sie dann über die serielle an PC
oder  sonstwas

von svenP (Gast)


Lesenswert?

das wäre toll

ist es ratsam sich mit assembler zu beschäftigen???

gibt es dazu ein buch und etwas für anfänger???


danke

von Spess53 .. (hardygroeger)


Lesenswert?

Hi

@Sven

Programmiere auch hartnäckig in Assembler. Wenn ich dein
BASCOM-Programm richtig verstanden habe, definierst du beim erkennen
von '$' einen leeren String. Dann kann am Anfang kein '$' stehen.
Meinesachtens müsste es heissen   Str1 = "$".
Mit 16MHz dürfte es eigentlich keine Probleme geben. Ich habe ein GPS
programmiert, das mit 11,..MHz läuft und problemlos alle
Daten(Position,Höhe, Richtung,Datum Uhrzeit..), sowie einen
Kartenausschnitt mit der Position anzeigt.

MfG HG

von SvenP (Gast)


Lesenswert?

Ja Du hast recht aber es fehlt trotzdem was

wenn ich zeichenweise Auslese kommt immer nur $ G P G G A............*
8 K
oder mal nur C , 2 3 5 9 4 7 . 000,V,0000.0000,N,0000.0000,E,,,017*1C

und niemals $GPRMC..................*9I oder auch $GPVTG..........*9O

Wenn ich das GPS an meinen PC über Terminal anspeche kommt schön zeile
für zeile die eintzelnen Protokolle.

Vielen Dank

von Bernhard S. (bernhard)


Lesenswert?

Hallo Sven,


>ist es ratsam sich mit assembler zu beschäftigen???

Ich denke ja, hat einige Vorteile


>gibt es dazu ein buch und etwas für anfänger???

Du findest hier in der Codesammlung genügend einfache Beispiele,
brauchst nur unter "Assembler" zu suchen


>Wenn ich das GPS an meinen PC über Terminal anspeche kommt schön
>zeile für zeile die eintzelnen Protokolle

Stell uns doch mal ein komplettes Protokoll, möglichst im eingeloggten
Zustand des GPS-Empfängers zur Verfügung, denn Hauke
wollt Dir ein kleines Programm schreiben, vielleicht muss er es an
Deinen GPS-Empfänger sogar etwas anpassen.

Bernhard

von Spess53 .. (hardygroeger)


Lesenswert?

Hi

Mir ist gerade noch etwas aufgefallen. Du schreibst,daß du dein
GPS-Modul über einen MAX3232 an den AtMega anschliesst. Für die
Verbindung µBlox - PC ist das meinesachtens korrekt. Zwischen µ-Blox
und AtMega sollte eine direkte Verbindung ausreichen.
Bei Rs232 musst du zweierlei unterscheiden:

1.Protokoll: Das regelt Startbit-Datenbits-Stopbit(s)
2.Pegel: Negative Spannung ist 1, positive Spanung ist 0.

Der Max3232 wandelt 3,3V Pegel in Rs232-Pegel und zurück.
Am AtMega dürfen aber nur Spannungen zwischen 0V und Betriebspannung
anliegen.

MfG HG

von svenP (Gast)


Lesenswert?

Habe es jetzt hinbekommen

Problem war ein Timing Problem.

Jetzt sieht es gut aus nur der ublox ms1e findet keine Sat's trotz das
die antenne aus meinen Dachfenster hängt.


vielen dank für eure mithilfe aber ohne eure tips hätte ich es nicht
geschafft

von Bernhard S. (bernhard)


Lesenswert?

@SVEN

>Jetzt sieht es gut aus nur der ublox ms1e findet keine Sat's trotz
>das die antenne aus meinen Dachfenster hängt.

Seit gestern läuft mein µ-BLOX Empfänger :)

Nach wenigen SEKUNDEN synchronisiert er seine Uhrzeit:
"$GPGGA,213926"

In folgenden Strings sieht man, welche Satelliten er gerade mit welcher
Qualität empfängt:
$GPGSV,3,1...
$GPGSV,3,2...
$GPGSV,3,3...

In meinem Mittschnittbeisbiel: er empfängt den Sat-Nr: 05+31+34+04 usw


Mittschnitt von jetzt:
$GPGGA,213926.206,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,,,,0000*07
$GPGLL,0000.0000,N,00000.0000,E,213926.206,V*2A
$GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30
$GPGSV,3,1,12,05,89,000,31,30,81,000,,24,61,000,,04,53,000,*77
$GPGSV,3,2,12,17,48,000,,23,43,000,,09,33,000,,25,26,000,*7D
$GPGSV,3,3,12,06,21,000,,10,11,000,,14,06,000,,07,-15,000,*53
$GPRMC,213926.206,V,0000.0000,N,00000.0000,E,,,140606,,*18


Liegt auch eine Spannung an der Antenne an?

Evenuell Antennenspannung Vant mit Drossel sieben.

Schau mal hier nach, da wurde das Problem auch mit angesprochen:

http://www.mikrocontroller.net/forum/read-1-358089.html


Bernhard

von Hauke Radtki (Gast)


Lesenswert?

Sorry, dass ich mcih nciht gemeldet habe /kein programm geschrieben habe
bis jetzt. Mir ist leider etwas dazwischen gekommen. Aber wenn du es
jetzt auch so hinbekommen hast ist ja schon :)

Aber ich rate dir auch dich mal mit assembler zu beschäftigen. So lernt
man sehr viel über die prozessorstruktur und was eigentlich bei einem
befehl passiert usw. Man erkennt auch schnell, wie man in hochsprachen
geschwindigkeitsoptimirt programmieren kann.

von Gast (Gast)


Lesenswert?

@svenP

Was war das für ein Timingproblem und ist der obige Code dann oK
gewesen??

von moonGPS (Gast)


Lesenswert?

@svenP

Hallo,

mich würde interessieren wie du das jetzt gelöst hast, ich versuche
auch ein LEA-4H Modul an den mega8 zu hängen, was mir bisher nicht
gelingt.
Hast du U-Blox TX auf mega RX, und mega TX auf U-Blox RX, direkt
angeschlossen ?
Softwaretechnisch bekomme ich bei 9600 baud auch immer Data overrun was
ich mir bei 16Mhz Takt eigentlich nicht erklären kann, soviel mache ich
zwischen zwei UDR reads nicht.

Grüße
Ingo

von MarcusM (Gast)


Lesenswert?

Der Empfangsbuffer war zu klein.

habe ihn von 40 auf 255 erhöht und die Daten können Verarbeitet
werden.

Bin aber jetzt auf C mit WINAVR umgestiegen RS232 Kommunikation ist
besser finde ich.

von Matze N. (hupe123)


Lesenswert?

Magst du, wenn du schon den Quellcode bereit stellst, auch den Quellcode 
vom PC-Programm posten?! Ich will mir nämlich sowas ähnliches Schreiben, 
aber mir gehlt son bißchen der Ansatz.

Gruß

von Hans P. (gableguy2000)


Lesenswert?

Hallo,

ich wäre auch daran interessiert.
Ich habe aber einen ATmega 32, an den ich eine GPS Maus hängen will und 
die Daten dann auch aufzeichnen will.


Wäre super wenn mir einer helfen könnte, oder den Code schicken könnte.

LG

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.