Forum: Mikrocontroller und Digitale Elektronik Navilock 552ETTL - Seltsame Ausgabe auf LCD Display


von Max D. (Firma: Hobby) (fmhweb)


Angehängte Dateien:

Lesenswert?

Moin,

von meinem 552ETTL GPS Modul bekomme ich eine seltsame Ausgabe. Ich muss 
gestehen das es das erste mal das ich mit UART arbeite.

Leider zeigt die Ausgabe des Moduls nicht das gewünschte Ergebniss an 
(siehe Bilder).

Vergleich NMEA 0183 und mein Ergebniss nach ca. 10 minuten:

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
$GPGGA,192457.250,53,E,1,07,1.3,33.6,M,438.1021,N,01005.58165.0,M,,0000* 
64

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
$GPRMC,192455.250,A,16,E,0.00,0.00,260515338.1021,N,01005.582,,,A*64

1) Hat jemand eine Idee warum das Ergebniss nicht konform ist?

2) Kann das an der Ausgabe zum LCD Display liegen?

3) TX GPS (ca. 0V-3,3V) kann ich doch direkt mit RX Mega16 verbinden, 
oder? (Zum Aufbau mit einem MAX3232 habe ich dann später auch noch eine 
Frage). (Lesbare Zeichen kommen ja an)

4) GPS Modul defekt?

Anbei sind Bilder der Ergebnisse (Draussen - 5m Abstand zur Hauswand) 
und des Aufbaus (Im Gebäude).

CODE:
1
#define F_CPU 8000000UL
2
3
#include <avr/io.h>
4
#include "lcd-routines.c"
5
#include <util/delay.h>
6
#include <stdlib.h>
7
#include <string.h> 
8
9
static void uart_init(void){
10
  #undef BAUD            // avoid compiler warning
11
  #define BAUD 38400UL
12
  #include <util/setbaud.h>
13
  UBRRH = UBRRH_VALUE;
14
  UBRRL = UBRRL_VALUE;
15
  #if USE_2X
16
  UCSRA |= (1 << U2X);
17
  #else
18
  UCSRA &= ~(1 << U2X);
19
  #endif
20
  //UCSRB |= (1<<TXEN)|(1<<RXEN);
21
  UCSRB |= (1<<RXEN);
22
  
23
  UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1
24
}
25
26
uint8_t uart_getc(void){
27
  while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
28
  ;
29
  return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
30
}
31
32
void uart_gets( char* Buffer, uint8_t MaxLen ){
33
  uint8_t NextChar;
34
  uint8_t StringLen = 0;
35
    
36
  do{
37
    NextChar = uart_getc();
38
  }while(NextChar != '$');    // Warte auf erstes Zeichen
39
  
40
  while(NextChar != '\n' && StringLen < MaxLen - 1){
41
    *Buffer++ = NextChar;
42
    StringLen++;
43
    NextChar = uart_getc();
44
  }
45
    
46
  *Buffer = '\0';          // Noch ein '\0' anhängen um einen Standard C-String daraus zu machen
47
}
48
49
void lcd_string_int(uint16_t tmp_int){
50
  char buffer[20];
51
  utoa(tmp_int, buffer, 10);
52
  lcd_string(buffer);
53
}
54
55
int main(void){
56
  char gps_data[128];
57
  char* strpos;
58
  uint8_t myswitch = 0;
59
  
60
  lcd_init();
61
  uart_init();
62
  
63
    while(1){
64
        uart_gets(gps_data, sizeof(gps_data));  //Read Navilock 552ETTL
65
    if(myswitch == 0){
66
      strpos = strstr(gps_data, "GPGGA");
67
    }
68
    else{
69
      strpos = strstr(gps_data, "GPRMC");
70
    }
71
    if(strpos != NULL){
72
      if(myswitch == 0){
73
        myswitch = 1;
74
      }
75
      else{
76
        myswitch = 0;
77
      }
78
      lcd_clear();
79
      lcd_string(gps_data);
80
      _delay_ms(2000);
81
    }
82
    }
83
}

von Max D. (Firma: Hobby) (fmhweb)


Lesenswert?

D'oh. Habe gerade die Bäume im Wald erkannt. Die Ausgabe ist von Zeile 1 
nach 3 nach 2 nach 4 gesprungen. Hat mich total irritiert.

von Klaus W. (mfgkw)


Lesenswert?

Max Durst schrieb:
> 1) Hat jemand eine Idee warum das Ergebniss nicht konform ist?

Was stört dich?
Was hattest du erwartet? Etwa Garmischer Straße 248?

>
> 2) Kann das an der Ausgabe zum LCD Display liegen?
>
> 3) TX GPS (ca. 0V-3,3V) kann ich doch direkt mit RX Mega16 verbinden,
> oder? (Zum Aufbau mit einem MAX3232 habe ich dann später auch noch eine
> Frage). (Lesbare Zeichen kommen ja an)

Eben, wenn die Übertragung faul wäre, käme ja nichts lesbares an.

von Max D. (Firma: Hobby) (fmhweb)


Lesenswert?

Das muss ich jetzt noch loswerden. Irritiert weil die zweite Zeile mit 
,E, anfängt.

von Klaus W. (mfgkw)


Lesenswert?

Wenn man schwache Nerven hat, sollte man nicht unbedingt einen langen 
String über mehrere Zeilen auf einem LCD ausgeben. Der wird dann einfach 
nicht fortlaufend ausgegeben (und auch nicht unbedingt nur verwürfelt, 
sondern auch ggf. unvollständig.

Z.B. Zuordnung Zeilen zu Datenbereich bei EA-Anzeigen:
1
                    Anfangs - Endadresse (HEX)
2
Displaytyp                                              Bemerkung
3
            1.Zeile    2.Zeile       3.Zeile    4.Zeile
4
   1x8     $00-$07
5
   1x16    $00-$0F                                      MUX 1:8
6
           $00-$07                                      MUX 1:16 (linke Hälfte)
7
1x16(8+8)
8
           $40-$47                                                 (rechte Hälfte)
9
   1x20    $00-$13
10
   1x40    $00-$27
11
   2x8     $00-$07    $40-$47
12
   2x12    $00-$0B    $40-$4B
13
   2x16    $00-$0F    $40-$4F
14
   2x20    $00-$13    $40-$53
15
   2x24    $00-$17    $40-$57
16
   2x40    $00-$27    $40-$67
17
   4x16    $00-$0F    $40-$4F       $10-$1F    $50-$5F
18
   4x20    $00-$13    $40-$53       $14-$27    $54-$67
19
   4x40    $00-$27    $40-$67           -          -    1. Kontroller (Enable 1)
20
       
21
               -          -         $00-$27    $40-$67  2. Kontroller (Enable 2)

D.h. bei einem 4x20 wird erst in der ersten Zeile ausgegeben, dann in 
der dritten, dann sind 12 Zeichen nicht sichtbar, dann kommt wieder was 
in der zweiten Zeile, dann etwas in der vierten.

von Max D. (Firma: Hobby) (fmhweb)


Lesenswert?

Danke für die Erklährung. (27-40 - 12 nicht Sichtbar, usw.)

Dieser Fehler passiert mir nicht nochmal. Ich hätte das einfach testen 
müssen.

Aber Garmischer Strasse wäre ja zumindest schon einmal in DE gewesen. 
Hauptsache die Pole sind wieder da wo sie sein sollen und ich hab nicht 
auch noch die ESA/NASA angerufen:)

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.