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.
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.
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.
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
> 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.
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
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?
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
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'
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!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.