Atmega8 + GPS Modul + gLCD

OP #1581887
Hallo,

ich habe ein GPS Modul und ein gLCD an einem Mega8. Das GPS-Modul 
liefert mittlerweile auch schon Daten. Die Bytes die ich per UART 
empfange gebe ich auch sofort auf dem gLCD aus. Leider sind es aber nur 
willkürliche Zeichen. Die Anzahl der Zeichen liegt um die 22/23 Zeichen 
(Schwankungen von einem Zeichen vorhanden). Ich kann mir vorstellen, 
dass der Takt der UART-EInstellung falsch ist.
Ausgabeformat der Daten soll GPGGA und GPRMC sein.
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <avr/interrupt.h>
4

5
#include "glcd.h"
6

7

8
uint8_t urx = 0;
9
ISR(USART_RXC_vect) {
10
  urx = UDR;
11
  LCD_write_char(urx);
12
}
13

14
int main() {
15

16
  //USART
17
  UCSRB = (1 << RXEN);  //recieve aktivieren
18
  UCSRB |= (1 << RXCIE); //int aktivieren
19
  UCSRC = (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); //8 bit einstellen
20
  UBRRL = 25; // 8MHz  19.2k Baudrate
21
  
22
  LCD_init();
23
  LCD_write_string("Hallo");
24
  LCD_newline();
25

26
  
27
  sei();
28
 
29
  while (1) {    
30
  }
31
  
32
  return 0;
33
}

Könnte mir einer auf die Sprünge helfen? Welchen Fehler habe ich 
gemacht?

Grüße
Robin
OP
Danke für die schnellen Antworten!

Mit einer Baudrate von 4800 bits per second bekomme ich nur noch 6 bytes 
und diese sind auch willkürlich.

Anschlüsse des GPS-Moduls:
VCC -> 5V  Arbeitet ab 3,3V
MASSE -> 0V -> gleich der Masse des Mikrocontrollers
RX -> Spannungsteiler: 4,7kOhm an 5V und 10kOhm an Masse
TX -> an RX vom Mega8

Ich benutze den internen RC-Oszilator.


Das heißt für mich einen externen Quarz benutzen und die Spannung an VCC 
ein wenig zu minimieren? Wie ist das Möglich?
bau dir erstmal einen Pegelwandler und schliess das GPS-Modul an den PC 
an. Das kann ein Transistor, ein Inverter oder auch ein MAX232 sein.
Schau, was da bei verschiedenen Baudraten raus kommt.
Was ist das für ein Modul? Sendet das vielleicht Binärdaten, statt NMEA?

Bist du dir sicher, dass das
LCD_write_char(urx);
schnell genug ist und nicht der Empfangspuffer überläuft?

Puffere die Zeichen besser im RAM, warte im Hauptprogramm auf ein 
Zeilenende und schreibe dann alles aufs Display, während der Interrupt 
einen zweiten Puffer füllt. Grafische LCD's sind oft langsam.

Quarz ist auf jeden Fall notwendig, warum aber VCC absenken?
Naja, man könnte auch den internen Oszillator auf die Baudrate 
kalibrieren, aber das ist erstmal viel zu kompliziert...

Uwe
Robin K. schrieb:

> Welchen Fehler habe ich
> gemacht?

Du hast die Teile nicht unabhängig voneinander getestet. So hast du 
jetzt 2 Komponenten, die nicht miteinander können und keine Ahnung, wer 
der Übeltäter ist.

Ist es die GPS-Maus, weil die auf einer ganz anderen Baudrate sendet als 
du glaubst oder weil sie etwas ganz anderes sendet als du glaubst

Oder ist es die UART, die falsch konfiguriert ist bzw. noch viele andere 
Gründe möglich sind, warum eine UART zunächst nicht wie gewollt 
arbeitet.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.