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