mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik GPS-Empfangsprobleme


Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich empfange am Hyperterminal zwar den GPS-Datenblock, aber leider 
stimmen nicht alle zeichen überein, die meisten entsprechen in der ASCII 
Tabelle das vorhergehende Zeichen(z.b. $ ersetzt duch % oder , ersetzt 
durch -).
Es wird immer der selbe Datenblock empfangen, womit Übertragungsfehler 
und Timingprobleme unwahrscheinlich sind. Und einige Zeichen werden ja 
richtig empfangen.
Hyperterminalauszug :

Dies ist ein NMEA-Datenblock wie er aussehen sollte:

$GPGSV,3,1,12,03,42,282,00,06,16,095,00,07,63,092,00,16,72,233,00*71
$GPGSV,3,2,12,18,33,123,00,19,15,275,00,21,62,072,00,22,14,158,00*75
$GPGSV,3,3,12,25,02,208,00,27,09,332,00,29,02,050,00,31,00,199,00*74
$PGRME,,M,,M,,M*00
$GPGLL,,,,,150554,*50
$PGRMZ,,,*7E
$PGRMM,WGS 84*06
$GPBOD,,T,,M,,*47
$GPWPL,5241.364,N,00517.662,E,ENKSLS*45
$GPRMC,150555,V,,,,,,,211106,,*35
$GPRMB,V,,,,,,,,,,,,V*66
$GPGGA,150555,,,,,0,00,,,M,,M,,*67
$GPGSA,A,1,,,,,,,,,,,,,,,*1E

Das Hyperterminal zeigt aber folgendes Ergebnis:

%GQGSW-3-1-13-13-55-393-11-17-15-197-11-17-71-195-11-17-71-333-11+71
%GQGSW-3-3-13-19-35-131-11-19-17-377-11-31-59-179-11-33-17-157-11+7E
%GQGSW-3-3-13-35-11-317-11-37-11-171-11-37-11-331-11-39-13-157-11+75
%QGSME--M--M--M+11
%GQGMM-----151319-+5E
%QGSM[---+7E
%QGSMM-WGS!95+17
%GQCOE--U--M--+57
%GQWQM-5351/959-O-11517/11
%GQSMC-151331-W-------311117--+31
%GQSMC-W------------W+77
%GQGGA-151331-----1-11---M--M--+73
%GQGSA-A-1---------------+1E

Code:
while(1) {

PORTC &= ~( 1 << PC0 );  // xxxx xxx0 -> CSA = 0  ->> Auswahl tl16c550b
PORTB = 0x05;     // line status register
PORTC &= ~( 1 << PC4 );  // xxx0 xxxx -> IOR = 0  ->> lesen vom tl16c554
puffer=PINA;
PORTC |= (1 << PC4);    // xxx1 xxxx -> IOR = 1, kein lesen
PORTC |= ( 1 << PC0 );   // xxxx xxx1 -> CSA = 1

if (puffer & 1) {   // prüfen auf data ready
PORTC &= ~( 1 << PC0 );  // xxxx xxx0 -> CSA = 0  ->> Auswahl tl16c550b
PORTB = 0x00;      // 0000 0000 A2A1A0=000 Receiver Buffer
PORTC &= ~( 1 << PC4 );  // xxx0 xxxx -> IOR = 0  ->> lesen vom tl16c554
usart_putc(PINA);        // Ausgabe hyperterminal
PORTC |= (1 << PC4);    // xxx1 xxxx -> IOR = 1, kein lesen
PORTC |= ( 1 << PC0 );   // xxxx xxx1 -> CSA = 1

}
}

Autor: Philipp Sªsse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Recht offensichtlich, welche Zeichen verändert wurden: alle geraden 
ASCII-Werte wurden um 1 erhöht, also ist das LSB grundsätzlich gesetzt.

Autor: AxelR. (D1RTO) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
puffer=PINA;

if (puffer & 1) { // prüfen auf data ready

usart_putc(PINA);

}

Da war einer schneller ;-))

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure beiden Denkanstöße.
Es ist wohl doch ein Timingproblem.
Folgender Code brauche eine leichte "Verbesserung" ;)

while(1) {

PORTC &= ~( 1 << PC0 );  // xxxx xxx0 -> CSA = 0  ->> Auswahl tl16c550b
PORTB = 0x05;       // line status register
PORTC &= ~( 1 << PC4 );   // xxx0 xxxx -> IOR = 0  ->> lesen vom 
tl16c554
puffer=PINA;
PORTC |= (1 << PC4);    // xxx1 xxxx -> IOR = 1, kein lesen
PORTC |= ( 1 << PC0 );   // xxxx xxx1 -> CSA = 1

while (!(puffer & 1)) {  //warte bis data ready
PORTC &= ~( 1 << PC0 );    / xxxx xxx0 -> CSA = 0  ->> Auswahl tl16c550b
PORTB = 0x05;       // line status register
PORTC &= ~( 1 << PC4 );     // xxx0 xxxx -> IOR = 0  ->> lesen vom 
tl16c554
puffer=PINA;
PORTC |= (1 << PC4);     // xxx1 xxxx -> IOR = 1, kein lesen
PORTC |= ( 1 << PC0 );
}

if (puffer & 1) { // data ready

PORTC &= ~( 1 << PC0 );  // xxxx xxx0 -> CSA = 0  ->> Auswahl tl16c550b
PORTB = 0x00;     // 0000 0000 A2A1A0=000 Receiver Buffer
PORTC &= ~( 1 << PC4 );   // xxx0 xxxx -> IOR = 0  ->> lesen vom 
tl16c554
usart_putc(PINA);  //Ausgabe Hyperterminal
PORTC |= (1 << PC4);    // xxx1 xxxx -> IOR = 1, kein lesen
PORTC |= ( 1 << PC0 );     // xxxx xxx1 -> CSA = 1
}
}



%GQGSW-3-1-13,11-19,353,11,13-19,137,11-15,11-117-11,17,79,173-11+75
%GQGSW-3-3,13-17,51-357-11,11-13,171,11-17,19-393-11,31-31,173,11+7E
$GQGSW,3-3,13,33,11,337,11-35,51,377,11-31,54-117-11,31-57,353,11+7C
$QGSME,-M-,M,-M+11
%GQGML-,-,-133137,+55
$QGSM[,,,+7E
%QGSMM-WGS!84+17
%GQCOD,,U,-M,,+57
%GQWQL-5341/374,O,11517/773-E-EOKSLS+45
%GQSMC-133137,W,-,-,-,331117-,+33
%GQSMC-W,,,,-,-,,,-,W+77
$GQGGA,133138,,,,-1-11,-,M,-M-,+7C
$GQGSA,A,1,-,-,,,,,,-,-,-+1E

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durch ein schreiben von 0x00 auf den Datenbus zwischen den Lesevorgängen
lies sich das Problem beheben, mit folgendem Ergebnis :)

$GPGSV,3,1,12,03,84,197,00,07,19,121,00,08,11,317,00,11,05,256,00*7C
$GPGSV,3,2,12,16,28,185,00,18,42,064,00,19,57,294,00,21,18,067,00*79
$GPGSV,3,3,12,22,55,122,00,26,07,020,00,27,08,292,00,29,03,011,00*76
$PGRME,,M,,M,,M*00
$GPGLL,,,,,164745,*55
$PGRMZ,,,*7E
$PGRMM,WGS 84*06
$GPBOD,,T,,M,,*47
$GPWPL,5240.859,N,00516.103,E,KG13-B*2D
$GPRMC,164746,V,,,,,,,221106,,*31
$GPRMB,V,,,,,,,,,,,,V*66
$GPGGA,164746,,,,,0,00,,,M,,M,,*6

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen,
könntest du bitte noch die nächsten NMEA Datenblöcke schicken?

Danke
Hans

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.