mikrocontroller.net

Forum: Compiler & IDEs RS232 wird unterbrochen druch \n newline


Autor: Simon (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mache ich davor mit:

if ( c & UART_NO_DATA )
        {
}

danach.


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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
  unsigned int c;

  ...
  c = uart_getc();
  if( ( c & UART_NO_DATA ) == 0 )
    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

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
void getgps(void)
{
     c = uart_getc();
    if ( c & UART_NO_DATA )
        {
            
        }
        else
    {

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

}
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.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs mal umgeaendert auf

    if (c != 10) { uart_putc(c); }

selbes ergebnis.

Wenn ich aber:
    if (c != 10) { uart_putc('A'); }

mache, gibts kein einziges \n sondern nur A.

Also ich begreife es nicht

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die uart.c und uart.h mal umbenannt
uartp.h und uartp.c

wenn ich diese im include weg lasse, erkennt er die funktion uart_putc 
nicht mehr.


Das mit der verschaltung..

GPS-TX ----> uP-RX  --uP schickts weiter --> uP TX ---> MAX3232-In ----> 
Max3232 Out ---> PC


Ich hatte auch schonmal GPS TX ---> MAX3232 ---> PC funzte bestens

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moooooment... ich habe
die uart dateien vom include entfernt, das compiled immernoch. jedoch 
mit zwei warnungen:

../gps.c:48: warning: implicit declaration of function 'uart_puts'

Autor: Simon (Gast)
Datum:

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

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.