Atmega644P + GPS über UART + UART Ausgabe+ LCD

OP #3678953
Lesenswert?

Hallo zusammen,
versuche gerade verzweifelt GPS Daten gescheit zu parsen mit einem 
ATmega644P in C. Über Uart0 kommen die NMEA Daten mit 4800 BAUD rein. 
Über UART1 sollen erst einmal nur Debugmeldungen ausgegeben werden, 
später auch aufbereitete Daten. Sobald die Daten aufbereitet sind, soll 
auch eine LCD Ausgabe erfolgen. Im ersten Schritt versuche ich "nur" zu 
erkennen, welcher Datensatz gerade vom GPS Empfänger kommt. Sobald 
dieser erkannt wurde, soll es eine Ausgabe über UART1 geben. Doch diese 
Ausgabe funktioniert nicht :( Vielleicht kann sich jemand mal den 
angehängten Code anschauen und mir sagen, was ich falsch mache.
Ich habe testweise folgendes bei Zeile 187 eingebaut, um zu prüfen ob 
der Stream prinzipiell 1:1 über UART1 ausgegeben werden kann:

uart1_putc( (unsigned char)gpsstring[i] );

Das funktioniert auch. Also Hardwaretechnisch müsste also alles in 
Ordnung sein.

Hier ein paar Demo Daten:

$GPRMC,234743.000,A,6666.6666,N,7777.7777,E,0.00,125.11,030614,,,A*66
$GPGGA,234744.000,6666.6666,N,7777.7777,E,1,09,1.0,103.1,M,47.9,M,,0000* 
54

Der Empfänger spuckt auch noch weitere Daten aus, welche mich aber im 
Moment nicht interessieren.

Danke schon mal vorab.
Angehängte Dateien:
#3679055
Lesenswert?

@Frank S,

ist zwar etwas komisch programmiert aber egal

du darfst deine Laufvariable [i] nicht in einer FOR hochzählen,
sondern nur, wenn ein gültiges zeichen empfangen wurde

die meiste zeit deiner Schleife wird er "UART_NO_DATA"
empfangen (weil die UART relativ zur CPU gesehen langsam ist)

also verlässt er die FOR Schleife noch bevor die ersten 6 Zeichen
empfangen wurden

ich würde das generell aber anders programmieren

1. eine Do While für den Empfang von einem kompletten String
(bis Stringendekennung, vermutlich : 0x0D, 0x0A)

2. den String auswerten per
1
if(strncmp(nmea_str,"$GPGGA",6)==0) {
2

3
}

Gruss Uwe

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren