mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem: GPS-Maus an UART (RGM-2000, Mega8, Fleury)


Autor: Ulrich Leutner (kaschpal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
int main(void)
{
  uint16_t  getc_tmp = 0;
  char    str[16];

  /* Richtungsregister setzen */

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

  *port_to_ddr(&LCD_DATA0_PORT)    |= (1 << LCD_DATA0_PIN);
  *port_to_ddr(&LCD_DATA1_PORT)    |= (1 << LCD_DATA1_PIN);
  *port_to_ddr(&LCD_DATA2_PORT)    |= (1 << LCD_DATA2_PIN);
  *port_to_ddr(&LCD_DATA3_PORT)    |= (1 << LCD_DATA3_PIN);
  *port_to_ddr(&LCD_RS_PORT)    |= (1 << LCD_RS_PIN);
  *port_to_ddr(&LCD_RW_PORT)    |= (1 << LCD_RW_PIN);
  *port_to_ddr(&LCD_E_PORT)    |= (1 << LCD_E_PIN);

  
  lcd_init(LCD_DISP_ON);
  lcd_puts(init\n");
  
  wait_10ms(100);

  lcd_init(LCD_DISP_ON);
  uart_init(UART_BAUD_SELECT(SERIAL_BAUDRATE, F_CPU));

  for (;;) {
    wait_10ms(100);
  
    getc_tmp = uart_getc();

    utoa(getc_tmp, str, 10);

    lcd_puts(str);
  }  

  return(0);

}

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>    getc_tmp = uart_getc();

Ich denke mal dein GPS sendet mehr als ein Zeichen
pro Sekunde.

Autor: Ulrich Leutner (kaschpal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
#define UART_FRAME_ERROR      0x0800              /* Framing Error by UART       */
#define UART_OVERRUN_ERROR    0x0400              /* Overrun condition by UART   */
#define UART_BUFFER_OVERFLOW  0x0200              /* receive ringbuffer overflow */
#define UART_NO_DATA          0x0100              /* no receive data available   */

Autor: Manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ulrich Leutner (kaschpal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manu wrote:

> Kann es sein dass du die Interrupts nicht eingeschaltet hast?

*PATSCH!*

Danke :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.