- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: GPS-Empfangs-Probleme

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.05.2007
    Ort
    Im hohen Norden
    Beiträge
    227

    GPS-Empfangs-Probleme

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo an die gesamte Runde hier,
    ich habe durch Zufall einen GPS-Empfänger vom ersten Aldi-PDA bekommen. Der Anschluss war schnell gefunden und zusammen mit einem Terminalprogramm funktioniert das auch, d.h. ich sehe im Terminalprogramm sämtliche empfangene Daten.
    Hier ein Beispiel dafür:
    $GPRMC,001642.937,V,0000.0000,N,0000.0000,E,,,2701 02,,*B

    Dieses möchte ich nun auch mit meinem RN-Control durchführen. Also habe ich mir mit Bascom ein kleines Programm geschrieben und den GPS-Empfänger an Port A.3 angeschlossen.
    -------------------------------------------------------------------------------
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600

    Open "Coma.3:4800,8,N,1" For Input As #2 ' GPS-Input

    Do
    Print Waitkey(#2)
    Loop
    Close #2
    End 'end program
    --------------------------------------------------------------------------------
    Schaue ich mir nun die empfangenen Daten an, sehe ich ausser immer wieder kehrende Zahlen nichts anderes.
    Hier die empfangenden Zahlen:
    0
    0
    0
    0
    0
    0
    0
    184
    175
    150
    243
    157
    166
    42
    54
    166
    230
    62
    62
    62
    78
    57
    243
    62
    70
    62
    62
    234
    154
    19
    166
    54
    78
    58
    41
    0
    0
    0
    0

    Kann mir jemand einen Tip geben, was ich hier falsch mache. Ich kann auch den Empfänger an Port B.0 anschliessen und im Programm die entsprechende Zeile in
    Open "Comb.0:4800,8,N,1" For Input As #2
    ändern.Das Ergebnis bleibt gleich. Es erscheinen nur diese hier angegebenen Zahlen.

    Peter

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Laut dem Beispile in der Bascom Hilfe wird der WaitKey-Befehl so angewendet:
    A = Waitkey()
    Hierbei kann A eine numerische oder eine String Variable sein.

    Bei deinem Befehl "Print Waitkey(#2)" gibts du dem Compiler keinen Hinweis, was über waitkey empfangen werden soll.


    Könnte es sein, dass der Compiler dann nicht unbedingt mit einem String der passenden Länge rechnet und einfach von einem einzelnen Zeichen ausgeht für das er dann den Ascii-Wert ausgibt?

    Hast du es schon mal so versucht, wie es in der Hilfe steht?

    Dim A As String * 20
    A = Waitkey()
    Print A
    .........

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Crazy Harry
    Registriert seit
    15.01.2006
    Ort
    Raum Augsburg - Ulm
    Beiträge
    1.307
    ich lese die werte (natürlich) als string ein und zwar zusammenhängend immer bis ein komma gefunden wird. die datensätze sind immer gleich aufgebaut und selbst wenn keine daten verfügbar sind, werden eben die trenn-kommas mit nichts dazwischen gesendet
    Ich programmiere mit AVRCo

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.05.2007
    Ort
    Im hohen Norden
    Beiträge
    227
    Hallo Crazy Harry und recycle,
    vielen Dank für den Tip. Nach ein paar weiteren Überlegungen hier nun die Lösung:
    -------------------------------------------------------------------------------------
    $regfile = "m32def.dat"
    $crystal = 16000000
    $framesize = 32
    $swstack = 32
    $hwstack = 32

    Dim A As String * 20
    Open "Com1:9600,8,N,1" For Output As #1 ' COM 1 Output
    Open "Coma.3:4800,8,N,1,inverted" For Input As #2 ' GPS-Input

    '$GPRMC,191410,A,4735.5634,N,00739.3538,E,0.0,0.0, 181102,0.4,E,A*19

    Do
    A = Waitkey(#2);
    Print #1 , Chr(A);
    Loop
    Close #1
    Close #2
    End 'end program
    -----------------------------------------------------------------------------------
    Die empfangenden Daten sehen nun wie folgt aus:
    $GPRMC,003446.872,V,0000.0000,N,00000.0000,E,,,270 102,,*1A
    $GPRMC,003447.872,V,0000.0000,N,00000.0000,E,,,270 102,,*1B
    $GPRMC,003448.871,V,0000.0000,N,00000.0000,E,,,270 102,,*17
    $GPRMC,003449.871,V,0000.0000,N,00000.0000,E,,,270 102,,*16
    $GPRMC,003450.871,V,0000.0000,N,00000.0000,E,,,270 102,,*1E
    $GPRMC,003451.871,V,0000.0000,N,00000.0000,E,,,270 102,,*1F
    $GPRMC,003452.871,V,0000.0000,N,00000.0000,E,,,270 102,,*1C
    --------------------------------------------------------------------------------
    Nun kann ich mit der Auswertung dieser Daten beginnen.

    Peter

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Crazy Harry
    Registriert seit
    15.01.2006
    Ort
    Raum Augsburg - Ulm
    Beiträge
    1.307
    ich hab das so gemacht

    Code:
    Process ReadGPS(20,20:iData);
      Begin
        WaitPipe(RXBuffer);                         // Warte auf Daten im Puffer
        Read(SerInp, Temp);                         // Puffer lesen
    
        If Temp='$'                                 // Wenn Puffer='$' (Datensatzanfang)
          then
            Read(SerInp, Temp6);
            If Temp6 = 'GPRMC,'
              then
                Read(SerInp, NMEA.Time_UTC, ',');
                Read(SerInp, NMEA.Status, ',');
                Read(SerInp, NMEA.Latitude, ',');
                Read(SerInp, NMEA.Lat_Ind, ',');
                Read(SerInp, NMEA.Longitude, ',');
                Read(SerInp, NMEA.Log_Ind, ',');
                Read(SerInp, NMEA.Speed, ',');
                Read(SerInp, NMEA.Angle, ',');
                Read(SerInp, NMEA.Date, ',');
                Read(SerInp, NMEA.Magnetic, ',');
                Read(SerInp, NMEA.Checksum, ',');
              EndIf;
    
            If Temp6 = 'GPGGA,'
              then
                Read(SerInp, NMEA.Time_UTC, ',');
                Read(SerInp, NMEA.Latitude, ',');
                Read(SerInp, NMEA.Lat_Ind, ',');
                Read(SerInp, NMEA.Longitude, ',');
                Read(SerInp, NMEA.Log_Ind, ',');
                Read(SerInp, NMEA.StatusDummy, ',');
                Read(SerInp, NMEA.Sat_Track, ',');
                Read(SerInp, NMEA.H_Dilution, ',');
                Read(SerInp, NMEA.Height, ',');
                Read(SerInp, NMEA.Height_Unit, ',');
                Read(SerInp, NMEA.DGPS_Time, ',');
                Read(SerInp, NMEA.DGPS_ID, ',');
                Read(SerInp, NMEA.Checksum, ',');
              EndIf;
      End ReadGPS;
    ich werte nur gprmc und gpgga aus. allerdings mit einem anderen compiler und als process

    gruss
    harry
    Ich programmiere mit AVRCo

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.05.2007
    Ort
    Im hohen Norden
    Beiträge
    227
    Hallo Harry,
    damit Du weisst, worum es eigentlich geht. Schau Dir mal die folgende Seite an:
    http://www.inter-save.com/UntitledFrameset-4.html
    Ich will auf diese Art auch die Geschwindigkeit messen (wird sich max. um 80 Km/h handeln) und einen Kompass auf mittels GPS benutzen.

    Peter

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    @holzi,
    Dim A As String * 20
    Open "Com1:9600,8,N,1" For Output As #1 ' COM 1 Output
    Open "Coma.3:4800,8,N,1,inverted" For Input As #2 ' GPS-Input
    Verwendest du in deinem Programm tatsächlich eine String mit 20 Zeichen? Die 20 hatte ich in meinem Post eigentlich nur beispielhaft gemeint, weil ich nicht weiss wie lang so ein kompletter Datensatz werden kann.

    Falls dein Programm wirklich mit "Dim A As String * 20" funktioniert, liest dein Programm einen Datensatz in mehreren Waitkey()-Schritten ein.

    Wenn das so ist, würde ich doch lieber versuchen die String-Länge auf die Länge des Datensatzes anzupassen.

    Wenn du die Daten direkt hintereinander mit dem Print-Befehl ausgiibst, fällt es nicht auf, sobald du die Daten zwischen den einzelnen Waitkey()-Befehlen aber weiterverarbeitest, dürfte es Probleme geben, wenn du die Datensätze in 20-Zeichen Blöcken einliest.

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von Crazy Harry
    Registriert seit
    15.01.2006
    Ort
    Raum Augsburg - Ulm
    Beiträge
    1.307
    hi peter,

    ich messe auf diese art die geschwindigkeit, fahrtrichtung, höhe. naja messen ist wohl falsch: der empfänger bereitet alles auf und ich zeige es an

    cu
    harry

    [edit] interessante sache nur leider hab ich für sowas keine zeit
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken g-bis06.jpg  
    Ich programmiere mit AVRCo

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.05.2007
    Ort
    Im hohen Norden
    Beiträge
    227
    Guten morgen,
    ich habe die 20 Zeichen des Strings vergessen zu ändern. Es funktionierte und dann habe ich mir keine weiteren Gedanken gemacht. Mitlerweile habe ich das auf 1 runtergesetzt. Da ich auf diese Art die Daten seriell ja einlese, schreibe ich die so empfangenen Zeichen in ein Array und werte sie dann aus. Funktioniert nun hervorragend.
    Das Bild sieht sehr interessant aus. Sieht mir nach einem kleinen externen Display aus. Das ganze z.B. dann für das Auto. Wäre auch etwas für mich diese Idee.

    Peter

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von Crazy Harry
    Registriert seit
    15.01.2006
    Ort
    Raum Augsburg - Ulm
    Beiträge
    1.307
    fast richtig - das display ist 38x61mm (sichtfläche) groß und an einer ZX12-R montiert. 128x64 pixel. µC ist ein mega128 @ 16 mhz
    Ich programmiere mit AVRCo

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests