RS232 wird unterbrochen druch \n newline

Gast #1287013
Lesenswert?

Hallo,


Ich habe mein GPS empfaenger Navilock NL-501ETTL
an Atmega 32L (3,3V).

Ich verwene die Uart Library:
Title:    Interrupt UART library with receive/transmit circular buffers
Author:   Peter Fleury <pfleury@gmx.ch>   http://jump.to/fleury
File:     $Id: uart.c,v 1.6.2.1 2007/07/01 11:14:38 peter Exp $


Da ich bisle Probleme hatte die Daten zu verarbeiten habe ich folgendes 
in
meinem Programm:

c = uart_getc();
uart_putc(c);

GPS(TX) geht an den Atmega32, von da sende ich das signal
an einen MAX3232 und dann zum PC.

Ist der GPS empfaenger direkt am PC, sind die ausgaben richtig.
Sobald ich die Daten aber ueber den Prozessor schicke, sehe ich immer
wieder \n New Line zeichen in der Ausgabe.

Woher kommen die? Kann das an der Library liegen?

Was mich wundert, es geht kein einziges zeichen vom GPS empfaenger 
verloren. nur die stoerenden \n sind drinne.
#1287029
Lesenswert?

Simon schrieb:
> Hallo,
>
>
> Ich habe mein GPS empfaenger Navilock NL-501ETTL
> an Atmega 32L (3,3V).
>
> Ich verwene die Uart Library:
> Title:    Interrupt UART library with receive/transmit circular buffers
> Author:   Peter Fleury <pfleury@gmx.ch>   http://jump.to/fleury
> File:     $Id: uart.c,v 1.6.2.1 2007/07/01 11:14:38 peter Exp $

Die UART Library vom PeFl wartet nicht auf Zeichen ...

> c = uart_getc();
> uart_putc(c);

Du musst schon auch noch abfragen, ob an der uart überhaupt ein Zeichen 
reingekommen ist.
Schau dir die Demo an, die PeFl mit der Library mitliefert. Da siehst du 
wies gemacht wird.
#1287033
Lesenswert?

Simon schrieb:
> Das mache ich davor mit:
>
> if ( c & UART_NO_DATA )
>         {
> }
>
> danach.

Warum sagst du dann, du machst das so:

c = uart_getc();
uart_putc(c);

Wenn schon, dann muss das so aussehen
1
  unsigned int c;
2

3
  ...
4
  c = uart_getc();
5
  if( ( c & UART_NO_DATA ) == 0 )
6
    uart_putc( c );

>
> Aber mir ist was anderes aufgefallen, wenn ich das ganze abschalte.
> und dann nur mein MAX3232 mit strom versorge und das Kabel heraus ziehe.
> gibts ebenfalls ein \n.
>
> Ich glaube das entsteht durch ein schwaches signal vom Prozessor.

Ach und dieses fehlinterpretierte Signal ergibt ausgerechnet das 
Bitmuster von '\n'. Daran glaub ich nicht.

Zeig mal deinen kompletten Code
Gast #1287035
Lesenswert?

> Ach und dieses fehlinterpretierte Signal ergibt ausgerechnet das
> Bitmuster von '\n'. Daran glaub ich nicht.

Vorallem ausschliesslich \n und kein anderes wirres Zeichen, nicht ein 
einziges.


Auch beim init am anfang, sehe ich kein ungewolltes \n!

   uart_puts("$PSRF103,00,00,01,00*24\r\n"); //GGA einschalten ohne 
Checksum
   //_delay_ms(500);
   uart_puts("$PSRF103,05,00,01,00*21\r\n"); //VTG einschalten ohne 
Checksum
   //_delay_ms(500);
   uart_puts("$PSRF103,01,00,00,01*25\r\n"); //GLL abschalten
   //_delay_ms(500);
   uart_puts("$PSRF103,02,00,00,01*26\r\n"); //GSA abschalten
   //_delay_ms(500);
   uart_puts("$PSRF103,03,00,00,01*27\r\n"); //GSV abschalten
   //_delay_ms(500);
   uart_puts("$PSRF103,04,00,00,01*20\r\n"); //RMC abschalten
   //_delay_ms(500);
   uart_puts("$PSRF103,06,00,00,01*22\r\n"); //MSS abschalten
1
void getgps(void)
2
{
3
     c = uart_getc();
4
    if ( c & UART_NO_DATA )
5
        {
6
            
7
        }
8
        else
9
    {
10

11
    if (c != '\n') { uart_putc(c); }
12

13
}
Ich habe hier sogar nochmal \n rein gemacht das auch im falle das der 
prozessor vom GPS ein \n empfaengt, dieses nicht weiter gesendet wird.
Der rest vom code ist auskommentiert.
#1287049
Lesenswert?

Simon schrieb:

> Also ich begreife es nicht

Dieses uart_putc  muss ja logischerweise auf eine andere UART führen, 
als die, die von der Fleury Lib verwaltet wird.

Verdacht: in dieser uart_putc stimmt was nicht.


Wie, ganz genau sieht deine Verschaltung aus?


         UART             UART
  GPS   <------> Mega32 <------> PC

teilst du die TX/RX Leitung der einzige UART auf oder wie machst du das?
Gast #1287068
Lesenswert?

Problem geloest:

> Dieses uart_putc  muss ja logischerweise auf eine andere UART führen,
> als die, die von der Fleury Lib verwaltet wird.


ich habe die funtion uart_putc umbenannt. und nun auf einmal sind die \n 
verschwunden.

Allerdings frage ich mich welche funktion wird dann genommen?!

Hat einer dieser libs so eine funktion ?!

#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
//#include <avr/interrupt.h>
#include <inttypes.h>
#include "uartp.h"


Danke!

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