Atmega8 + GPS Modul + gLCD

#1581887
Lesenswert?

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
#1581973
Lesenswert?

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?
#1582033
Lesenswert?

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
#1582071
Lesenswert?

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

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