Problem beim lesen von Daten mit einem Arduino Uno

Gast #3141811
Guten Tag Foren-Gemeinde,

ich versuche gerade mit einem Arduino Uno die Daten eines GPS-Empfängers 
via TTL auszulesen - was grundsätzlich auch funktioniert.

Ich hab Zugriff auf den Empfänger, kann ihn konfigurieren und er liefert 
mir auch Daten.

Nun zu meinem Problem, dazu erstmal ein kleiner Datenauszug aus dem 
Monitor:
B5,62,2,10,B0,0,6,68,90,18,C9,6,7,0,
0,0,0,0,0,0,0,0,5D,3,B4,9F,B6,C5,74,41,DC,65,A0,45,1F,4,1E,3,
37,BC,4A,D8,ED,CA,9E,41,E3,49,41,8C,49,70,77,41,92,57,8C,C4,18,7,21,0,
0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,
FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,
FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,
FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,
FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,

...in der ersten Zeile steht "B0,0" für die Byte-Länge der auf "B0,0" 
folgenden Nachricht (192 Bytes).
Leider fehlen, wie ihr oben im Beispiel seht, gut 50% der Daten 
("FF,FF,FF,...") und mir fehlt total der Ansatz wo ich mit der Suche 
anfangen soll...

Hier mein (nicht komplett vollständiger) Code:
1
void get_gps_data()//Abruf der GPS-Daten 
2
{ 
3
int counter24bits=16;
4
int gps_length_flag=0;
5
int data_counter=0;
6
while(gps_length_flag==0)
7
{ data_counter++;
8
if(data_counter==500)
9
{gps_length_flag=1;}
10
  byteGPS[0]=Serial.read();
11
  Serial.print(byteGPS[0],HEX);
12
  if(byteGPS[0]==0xB5)
13
  { Serial.println("");
14
    Serial.print(byteGPS[0],HEX);Serial.print(",");
15
    byteGPS[1]=Serial.read();
16
    if(byteGPS[1]==0x62)
17
    { Serial.print(byteGPS[1],HEX);Serial.print(",");
18
      byteGPS[2]=Serial.read();
19
      if(byteGPS[2]==0x02)
20
      {Serial.print(byteGPS[2],HEX);Serial.print(",");
21
        byteGPS[3]=Serial.read();
22
       if(byteGPS[3]==0x10)
23
       {
24
         Serial.print(byteGPS[3],HEX);Serial.print(",");
25
         msg_length[0]=Serial.read();
26
         msg_length[1]=Serial.read();
27
         Serial.print(msg_length[0],HEX);Serial.print(",");
28
         Serial.print(msg_length[1],HEX);Serial.print(",");
29
         for(int i1=0;i1<msg_length[0];i1++)
30
         { byteGPS[4]=Serial.read();
31
           if(byteGPS[4]!='kkkkkk')
32
           {counter24bits++;
33
           Serial.print(byteGPS[4],HEX);Serial.print(",");
34
           if(counter24bits==24)
35
         {Serial.println("");
36
       counter24bits=0;}}}
37
         gps_length_flag=1;
38
       }}}}}
39
}

Bin für jede Idee dankbar!!!

Taurus
Gast #3141823
>    byteGPS[1]=Serial.read();
>    if(byteGPS[1]==0x62)
>    { Serial.print(byteGPS[1],HEX);Serial.print(",");

Du liest ein Byte. Dann sendest du drei Byte.
Wenn das mit der gleichen Baudrate passiert
gehen dir während du sendest schon mal zwei Byte beim
empfangen verloren wenn du darauf wartest das die
drei Bytes gesendet wurden. Das GPS wartet nicht darauf
bis du mit deinem Senden fertig bist. Das bläst dir munter
den Empfangspuffer weiter voll bis er überläuft.
Gast #3141840
Ich wußte das das Problem simpler Natur sein würde... macht auf 
jedenfall Sinn.
Werd mich morgen dran machen und das Lesen der Daten von der Ausgabe 
trennen und dann Bericht erstatten.. Danke schonmal!!!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.