- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 2 von 2

Thema: NMEA mit PIC18f8520 auswerten, klappt nicht richtig.

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.07.2007
    Beiträge
    48

    NMEA mit PIC18f8520 auswerten, klappt nicht richtig.

    Anzeige

    Praxistest und DIY Projekte
    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:

    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

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    07.07.2007
    Beiträge
    48
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen