Forum: Compiler & IDEs UART PROBLEM MEGA 128 4800BAUD


von SvenP (Gast)


Lesenswert?

Hallo

Habe ein komisches Phänomen mit meinen MEGA 128.

Habe an UART0 eine GPS Empfänger und an UART 1 EINEN AUSGANG zum PC.

Über die UART0 hohle ich die GPS DATEN und Verarbeite diese und über
UART1 gebe ich sie wieder aus mit 4800 Baud.

wenn ich Hyperterminal aufmache mit 4800,8n1 dann kommt nichts.
Wenn ich den HTERM öffne kommt erst das

þþÿÿþþþþóüþþž¾þþ~þþÿþþÿÿ¾þÿþþÿøüüþžþ~þþ~þþþ~þþþþþþþ~þþÿìþžþþ~þ~þþþ¾ÿþÿ~þ 
þþ~þüüÇsÿÿþþÿ~Ê~~ÿÿÿÿùùþ~~~þ~þþnþüü~þÿΎžþ~óþ~,Ïþþ~þþâ~~ÿþþþ~þþóÿÿ~þþò 
þ~þ~þþþ‚¾~~þ~þüüüüþþþÿþþþÎ~þþžþŽùþŽþþÿþÎ~îù~žþþrþ~þ~~þÿ¾~ê~~ì~þþ‚þ~ÿüü 
ÿܯøÿÿ~þ‚bþþ~þ~~bbb~~ÿÿ¯þr‚þì‚ 
b’‚~þ~þ~¤DéÕÔ\<ÿʊ¢Šr¾’Â~ªŠŠÊr¢Âʾ~r±ÃŠŠ‚’~þ’šªb*Ŋbþžbª‚r‚b’òÂr²bj±óºr 
êbj±Ãr‚b‚‚‚þR¢²j¤|’®Ôª(KP–™,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
$GðRMC,093141.628,A,5119.<8NɊ 
ŠŠ‚žr‚’š¾b*±ƒrʲb’’‚~ªÂb’¢‚þ‚¾bbr‚šj¼|éÕÔT8 
SšŠ¢’r²’ÂbªŠŠÊr¢Ê‚Šbr±ƒŠŠ‚’r‚’¢Žb*,Lߘ3,50.0ì228.6,M,47.5,M,0.0,0000*48
üüüÿìÿ~þ~þ~òÊb~~ÿÿÿ‰ùÿù‚~~þr~æ~þþŠjþü~þÿþžþâš~¾žþ~þ¹SS¦ç‰S‚â~rùþþ‚’rþžþ 
þ~qßL   s~þþ~‚¢bò¢‚þ‚¾bbR‚:
$ÇpÇ\ü  SšŠ¢¢r²þÂbªŠŽÊrþÊþâbrÅþŠŠ‚þr‚ò¾þb*±ÏbþžbMÌ 
b’’þrº~nÿ¢ºrªbjÅþr‚bþ‚‚‚R¢25>>pGSA,A,2,1b’þbžÊbbbbb~bbbbª‚r‚b®‚r‚b’‚r‚R 
‚ŠjüüÇPRMC,0ΦnOš—628,A,5119.4904,N,011’r‚’â¢b*Ŋrò¾b’’‚rª’b’â‚‚²bbR‚Êj 
¤DéÕÔT( 
SšŠâ®r²’ÂbªŠŠÊr¢Ê‚¾br±ÃŠŠ‚’r‚’¢šb*±b‚šbª‚r‚b’’Ârºbn±óºrªbj±ƒr‚b‚‚‚‚R¢Êj 
¤|’ªÔª(KP–™,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
üüÇþð9yóùþ~28,æbbb~~b~~~~ª‚r‚~®‚r‚b’‚~þ~þþj¼Dé×Ü+Ib’b‚þbþ29,3&IÂÂbš²b’ 
¾b’’b’²bš‚bŠšbŠ’bŠ‚‚b‚‚b’Šb‚ºbšš¢b‚‚Rººj¤Dé•Uj 
SšŠ¢ºr²’Âb±ªŠŠÊr¢Ê‚Âbr±ÃŠŠ‚’r‚’¢ºb*Ŋr‚‚b’’Šrªºb’¢‚‚²bbR‚ºj¤DéÕÔT( 
SšŠ¢Âr²’ÂbªŠŠÊr¢ÊŠŠbrłŠŠ‚’r‚’ªŠb*Ŋb‚šbª‚r‚b’’ÂrÂbj±¢ºrªbj±‚r‚b‚‚‚‚R¢Õ 
¤ø’GPGSA,A,2,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
üªÜT< 
SšŠ¢Êr²’ÂbªŠŠÊr¢ÊŠªbr±‚ŠŠ‚’r‚’ªªb*±b‚šbª‚r‚b’’ÂrÂbj±¢ºrªbj±ƒr‚b‚‚‚‚R¢"5 
R>IªÔª(KP–™,10,28,29,,,,,,,,,,50.0,50.0,&n   “  Šj¤DéÕÔT( 
ʚŠª‚r²’ÂbªŠŠÊr¢Ê’‚brłŠŠ‚’r‚’²Šb*±‹b‚šbª‚r‚b’’ÂrÂbj±óºrªbjłr‚b‚‚‚‚R¢¢j 
¤|’ªÔª(KP–™,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
$GPGGA,093151.628,5119.4923,N,01102.0265,E,1,03,50.0,228.9,M,47.5,M,0.0, 
0000*43
$GPGGA,093152.628,5119.4925,N,01102.0266,E,1,03,50.0,228.9,M,47.5,M,r‚b‚ 
‚‚‚R¢ªj¤|›ªÔª(KPߙ,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
$GPGSV,2,1,08,08,81,093,36,10,65,245,47,27,51,063,33,28,33,151,36*70
$GPGSV,2,2,08,29,32,288,36,26,22,286,29,13,12,100,00,21,07,334,00*7F
$GPRMC,093152.628,A,5119.4925,N,01102.0266,E,1.19,221.12,240806,,*06
$GPGGA,093153.628,5119.4926,N,01102.0267,E,1,03,50.0,228.9,M,47.5,M,0.0, 
0000*46
$GPGSA,A,2,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
<GPGGA,093155.628,5119.4933,N,01102.0274,E,1,03,50.0,229.0,M,47.5,M,0.0, 
0000*4E
$GPGSA,A,2,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
$GPGGA,093156.628,5119.4940,N,01102.0282,E,1,03,50.0,229.0,M,47.5,M,0.0, 
0000*40
$GPGSA,A,2,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
<GPGGA,093157.628,5119.4948,N,01102.0292,E,1,03,50.0,229.1,M,47.5,M,0.0, 
0000*49
$GPGSA,A,2,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
$GPGSV,2,2,08,29,32,288,36,26,22,286,29,13,12,100,00,21,07,334,00*7F
$GPRMC,093157.628,A,5119.4948,N,01102.0292,E,0.89,221.08,240806,,*00
$GPGGA,093158.627,5119.4955,N,01102.0300,E,1,03,50.0,229.1,M,47.5,M,0.0, 
0000*4F
$GPGSA,A,2,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
<GPÇSA,A,2,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
$GPGGA,093200.627,5119.4976,N,01102.0326,E,1,03,50.0,229.3,M,47.5,M,0.0, 
0000*46
$GPGSA,A,2,10,28,29,,,,,,,,,,50.0,50.0,20.0*01
$GPGGA,093201.627,5119.4987,N,01102.0342,E,1,03,50.0,229.4,M,47.5,M,0.0, 
0000*4C


die Baud berechne ich wie folgt

baudrate=4800
cpuclock 16000000
baud=cpuclock/((baudrate*16L)-1);


Meine UARTS initilaieser ich wie folgt

baud0=cpuclock/((baudrate*16L)-1);
bgaud1=cpuclock/((baudrate*16L)-1);

void init_rs232(unsigned int baud0,unsigned int baud1)
{

UBRR0H= (unsigned char)(baud0>>8);
UBRR0L = (unsigned char) baud0;

UCSR0A = 0x00;      /* USART operates at normal speed */
UCSR0B = (  (1<<RXCIE) | (1<<RXEN));    /* Enable receiver */
UCSR0C = (  (0<<UMSEL) |  /* Configure for asynchronous operation */
        (0<<UPM1)  |  /* No parity */
        (0<<UPM0)  |
        (0<<USBS)  |  /* 1 stopbit */
        (1<<UCSZ1) |  /* 8 data bits */
        (1<<UCSZ0));
  UBRR1H= (unsigned char)(baud1>>8);
  UBRR1L = (unsigned char) baud1;
 UCSR1A = (1 << RXC1) | (1<<TXC1);
  UCSR1B=(1<<RXEN) | (1<<TXEN);
  UCSR1C = (1 << UCSZ10) | (1 << UCSZ11);


}


kann es sein das mein Externer 16MHz Quarzt spinnt oder nicht genau
taktet???

FUSE BITE ist auf 1111 für extern Clock getetzt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Was für eine Startup-Time hat dein Oszillator denn?  Ein
Quarz braucht 'ne Weile, bis er stabil läuft.

von SvenP (Gast)


Lesenswert?

weiß ich nicht wo kann man es erfahren??ß

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

In den Fuses, SUT0 und SUT1.  Siehe Tabelle 9 im Datenblatt.

von SvenP (Gast)


Lesenswert?

in den Fuse steht 00 habe es auf 10 eingestellt stable Frequency on
start up.

Hat sich nichts getan genau das selbe.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hmm, vielleicht liest du ja erstmal wahhlos im RAM herum und
gibst den Datenmüll auf die UART aus, bevor deine richtigen
Daten folgen?

SUT = 10 zusammen mit CKSEL0 = 0 wäre auch erst einmal meine
konservative Empfehlung gewesen.

von SvenP (Gast)


Lesenswert?

Nein das ist eben nicht so


Wenn der AVR aus ist und ich starte das Programm HTERM schalte den AVR
an und es kommen saubere NMEA Datensätze.

Ich schließe den COM PORT und öffne das Programm Show GPS dann sagt er
mir das kein GPS Empfänger verbunden ist.

Wenn ich das Progarmm schließe und wieder den HTERM aufmachhe kommt der
Müll wie oben und es Pegelt sich nach einiger Zeit und geöffnetetm HTERM
der saubere NMEA Satz ein.

von Peter D. (peda)


Lesenswert?

Das ist völlig normal so, wenn einer lossendet, ehe der andere
empfangsbereit ist.

Der Empfänger kann ja nicht wissen, welche 1-0-Flanke nun das Startbit
ist.

Der Empfänger muß also immer bereit sein, bevor das erste Byte gesendet
wird. Nur so kann er synchron sein.

Alternativ kann der Sender zwischen den Datensätzen eine Pause von 10
Bitzeiten lassen, dann ist der Empfänger beim nächsten Paket synchron.


Unter Windows gibts auch noch nen anderen lustigen Effekt. Windows
stellt einen UART-Puffer von etwa 2kByte bereit.
Wenn also vor Deinem Programm Windows eine andere Baudrate hatte, dann
wird der Puffer mit Müll gefüllt und Du mußt den Puffer erst leer
lesen.
Stell im Gerätemanager gleich die richtige Baudrate ein, dann sollte es
klappen.


Peter

von Hans Peter (Gast)


Lesenswert?

Also

Mal gehts mal gehts nicht im Hypewrterminal bekomme ich wie gesagt gar
nichts ist doch komisch in Show GPS bekomme ich was aber nach einiger
zeit bricht auch er ab und sagt GPS Empfänger nicht mehr
angeschlossen.

Kann es sein das mein Uhrenquarz dran schuld ist seitdem er eingebaut
ist glaub ich gibt es das Problem.

Auch macht mein Display alle Secunde einen Helligkeits blinkerl.
Es sieht aus als ob im secundentackt die Hintergrundblecuhtung schwach
abnimmt.

von Hans Peter (Gast)


Lesenswert?

Problem gelöst

Es lag an der Leitung zum PC.

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
Noch kein Account? Hier anmelden.