Problem: GPS-Maus an UART (RGM-2000, Mega8, Fleury)

OP #925518
Hallo miteinander,

beim Versuch, eine RGM-2000 GPS Maus auszulesen stecke ich leider fest:
Der TX der Maus ist an einen Mega8 angeschlossen und ich wollte die 
UART-Lib von Peter Fleury benutzen. Unten steht das kleine 
Test-Programm.
Leider erscheint bei mir am Display immer nur 256256256..., also sprich: 
das low byte mit dem Buchstaben ist leer im high byte steht 
UART_NO_DATA. Das Signal der GPS-Maus liegt am RX-Pin an, habe ich 
geprüft. Ebenfalls die Baudrate (4800, gegoogelt) scheint zu stimmen, 
hab ich mir am Oszi ebenfalls angeschaut. Die Maus hat einen Signalpegel 
von 3.3V, also größer als (5V * 0.6), was der AVR als High 
interpretieren sollte. Dann habe ich das Signal noch testweise zweimal 
durch einen übrigen 74014 (invertierender Schmitt-Trigger) geleitet, hat 
auch nichts gebracht. (Am Ausgang warens dann allerdings 
unerklärlicherweise nur 4V, sollte aber jetzt wirklich reichen ...).
Selbstverständlich benutze ich einen externen Quarz (8MHz) und die Fuses 
sind auch gesetzt (die Warteschleife ist korrekt eine Sekunde lang).
Im Moment bin ich mit meinem Latein am Ende. Mangels übrigem 
Pegelwandler kann ich mir das Signal leider grad auch nicht am PC 
anschauen, aber - wie gesagt - am Oszi macht es einen korrekten 
Eindruck.
Kann mir jemand helfen? Vielleicht habe ich auch eine Kleinigkeit 
übersehen, aber mir fällt wirklich nichts mehr ein ...

Danke im Vorraus,
Ulrich
1
int main(void)
2
{
3
  uint16_t  getc_tmp = 0;
4
  char    str[16];
5

6
  /* Richtungsregister setzen */
7

8
  *port_to_ddr(&BUTTON_PIN)    &= ~(1 << BUTTON);
9

10
  *port_to_ddr(&LCD_DATA0_PORT)    |= (1 << LCD_DATA0_PIN);
11
  *port_to_ddr(&LCD_DATA1_PORT)    |= (1 << LCD_DATA1_PIN);
12
  *port_to_ddr(&LCD_DATA2_PORT)    |= (1 << LCD_DATA2_PIN);
13
  *port_to_ddr(&LCD_DATA3_PORT)    |= (1 << LCD_DATA3_PIN);
14
  *port_to_ddr(&LCD_RS_PORT)    |= (1 << LCD_RS_PIN);
15
  *port_to_ddr(&LCD_RW_PORT)    |= (1 << LCD_RW_PIN);
16
  *port_to_ddr(&LCD_E_PORT)    |= (1 << LCD_E_PIN);
17

18
  
19
  lcd_init(LCD_DISP_ON);
20
  lcd_puts(init\n");
21
  
22
  wait_10ms(100);
23

24
  lcd_init(LCD_DISP_ON);
25
  uart_init(UART_BAUD_SELECT(SERIAL_BAUDRATE, F_CPU));
26

27
  for (;;) {
28
    wait_10ms(100);
29
  
30
    getc_tmp = uart_getc();
31

32
    utoa(getc_tmp, str, 10);
33

34
    lcd_puts(str);
35
  }  
36

37
  return(0);
38

39
}
OP
Das ist schon richtig, die Maus schickt alle Sekunden einen vollen 
Datensatz; aber dann müsste ich im lowbyte ein Zeichen haben und im 
highbyte ein UART_BUFFER_OVERFLOW.
Ich kriege aber immer nur 256 = 0x0100 ...

uart.h:
1
#define UART_FRAME_ERROR      0x0800              /* Framing Error by UART       */
2
#define UART_OVERRUN_ERROR    0x0400              /* Overrun condition by UART   */
3
#define UART_BUFFER_OVERFLOW  0x0200              /* receive ringbuffer overflow */
4
#define UART_NO_DATA          0x0100              /* no receive data available   */
Gast
Hi

Die UART Lib von Peter Fleury ist Interupt-Driven.
Kann es sein dass du die Interrupts nicht eingeschaltet hast?
Ich seh jedenfalls nirgends ein sei() oder ähnliches.

Manu

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.