PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NMEA mit PIC18f8520 auswerten, klappt nicht richtig.



frank85
25.07.2010, 11:04
Hallo,

ich habe ein GPS-Modul welches brav und schön sauber Daten an das Hyperterminal sendet.
Diese Daten möchte ich mit meinem PIC auswerten.
Habe zuerst einmal ein ganz simples Programm geschrieben, welches Daten ab dem $-Zeichen in einen String kopiert, bis zu dem *-Zeichen.

Das Programm funktioniert im Debugger, sprich alle vorgegebenen Zeichen im RCREG1-Register werden in den String, Register für Register beschrieben.
Bei dem *-Zeichen wird die Schleife verlassen.

Jedoch funktioniert die Zeichenausgabe nur im Debugger.
In der Hardware wird nur der erste Buchstabe, ab zu zu mal richtig angezeigt (NMEA Protokoll ist das ein 'G').

Ich vermute, dass es letztendlich an der Baudrate hängt, jedoch wird ein Baudratenfehler von 0.17% von meinem Compiler ausgespuckt.

Ich habe leider keine Idee mehr wie ich den Fehler lokalisieren kann.
Darum frage ich euch, woran kann es liegen.
Oder hab ich einen Fehler in meinem Code:



char uart_rd;
char *zeigerZeichen = &uart_rd;
char string[200];
unsigned short i = 0;

void main() {

ADCON1 |= 0x0F; // Configure AN pins as digital
CMCON |= 7; // Disable comparators
TRISB = 0;
PORTB = 0;


UART1_Init(4800); // Initialize UART module at 4800 bps
Delay_ms(100); // Wait for UART module to stabilize


while (1) { // Endless loop
if (RCREG1 == '$') { //Prüft ob $-Zeichen im Register
do{
if (PIR1.RC1IF == 1) { //Buffer Inerruptflag
string[i] = RCREG1;
++i;
}
}while(RCREG1 != '*');
break;
}


}
uart_rd = string[1];
PORTB = uart_rd;
asm sleep;
}



Vielen Dank im vorraus.

MfG frank85

frank85
25.07.2010, 16:43
Hallo,

bin einen kleinen Schritt weitergekommen.
Und zwar hab ich gemerkt, dass ca. ab dem String[80] die Daten stimmen.
Was hat das zu bedeuten? Kann das sein, dass das UART-Modul vom PIC ab da erst richtig arbeitet? Schon drei Tage versuch ichs und bin mit meinem Latein am Ende.
Übrigens, arbeitet der PIC mit 10Mhz, Baud 4800 und im Baud Rate Generator Register steht .33