Forum: Mikrocontroller und Digitale Elektronik UART Baudrate


von Ben (Gast)


Lesenswert?

Mit HyperTerminal usw. kann man ja per UART Zeichen auf dem PC 
darstellen. Die Baudrate ist bei diesen Programmen ja meistens auf 
115'200 b/s begrenzt. Ich versuche aber zwei mikrocontroller per UART zu 
verbinden, die dann kommunizieren können. So denke ich , da kann ich die 
Baudrate doch beliebig einstellen? Zum Besipiel 200'000, 213'342, 
350'0010 usw oder? Natürlich muss die Baudrate unter der maximalen 
Begrenzung liegen. Mein Problem ist jetzt, dass ich mit 115'200 
wunderbar kommunizieren kann mit doppelter Baudrate(230'400) geht es 
auch, aber noch weiter kann ich die Baudrate nicht weiter 
hinaufschrauebn, denn dann gibt es Fehler. habe einen externen 
Resonator. Ist der Resontor für höhere Baudraten zu ungenau? Müssen 
Baudraten immer ein Vielfaches von 115'200 sein, damit es geht? Oder 
gibt es sonst noch was zu beachten?

von Werner B. (wirus)


Lesenswert?

Nun ja, vieleicht solltest Du den Artikel über Baudratenquarze mal lesen 
....

http://www.mikrocontroller.net/articles/Baudratenquarz


> Ist der Resontor für höhere Baudraten zu ungenau?

Ein Resonator ist eigentlich für alle Baudraten zu ungenau ....

von Ralf (Gast)


Lesenswert?

Hi,

bei Kommunikation mit einem PC musst du drauf achten, dass natürlich nur 
die "angebotenen" Baudraten verwendet werden. Desweiteren darf die Zeit, 
die du für ein BIT brauchst, nicht mehr als 3% abweichen, sonst kann 
sich der Empfänger nicht mehr synchronisieren.

Zwischen zwei Controller darf die Baudrate beliebig gewählt werden, 
sofern beide Teilnehmer die gleiche verwenden. Auch hier wieder auf 
Timing achten. Da die Baudrate durch den Taktgeber generiert wird, ist 
die Toleranz des Resonators/Quarzes natürlich kritisch. Daher würde ich 
mal das Datenblatt des Resonators zur Hand nehmen, die Toleranz prüfen 
und mit der eines Quarzes der gleichen Frequenz vergleichen.

Desweiteren ist es maßgeblich, welche Frequenz der Resonator/Quarz an 
sich hat. Du hast bestimmt schon die Quarzwerte 11.0592MHz oder 
22.1184MHz gesehen. Das sind Frequenzen, die besonders für 
Baudratengenerierung geeignet sind (bedingt durch den internen Aufbau 
des UARTs). Wenn du eben einen 12.000MHz Quarz verwendest, dann hast du 
bedingt durch die Formel zur Berechnung der Baudrate schon Abweichungen 
im Timing.

HTH

Ralf

von 3348 (Gast)


Lesenswert?

Zusaetzlich zur Baudrate die auf 2% genau uebereinstimmen muss, muss der 
Empfaenger auch Zeithaben, das UART zu lesen. Wenn der Empfaenger 
ueberschrieben wird gibt es einen Overrun fehler, den niemand mehr 
auswerted, und die Meldung wird nicht mehr richtig decodiert.

von Schwurbl (Gast)


Lesenswert?

Also nun mal Butter bei die Fische: Wenn die Kommunikation bei 115200 
funktioniert, aber 921600 Baud nicht, liegt es doch mit Sicherheit nicht 
an der Toleranz des Resonators. Im Übrigen beträgt die Genauigkeit eines 
Resonators ca. 0.5% und ist somit hervorragend für serielle 
Kommunikation geeignet.

Ich würde zu aller erst prüfen, ob die Empfangsroutine der "Datenflut" 
gewachsen ist. Möglichweise addieren sich Interruptlatenz, 
Kontextswitch, Pufferverarbeitung usw. auf unerträglich lange Zeiten. 
Wir wollen Quelltext seh'n :-)

von Gast (Gast)


Lesenswert?

Wenn du 2 MC nimmst die miteinander kommunizieren sollen, ist die 
Bautrate völlig wurscht, und damit ist der Quarz/Resonator Wert auch 
völlig wurscht. Die Bautrate muss nur auf beiden MCs übereinstimmen.

Bautratenquarze sind nicht nötig. (Ließt sich eigentlich keiner die 
Fragestellung durch???)

von Ben (Gast)


Lesenswert?

Habe herausgefunden, dass ich die Baudrate bis auf 250'00 b/s 
raufschrauben kann. 250'200 geht dann schon nicht mehr. was ist da los?

von Anonymous (Gast)


Angehängte Dateien:

Lesenswert?

What is the length of the cable?

von Peter D. (peda)


Lesenswert?

Ben wrote:
> Habe herausgefunden, dass ich die Baudrate bis auf 250'00 b/s
> raufschrauben kann. 250'200 geht dann schon nicht mehr. was ist da los?

Was meinst Du mit "250'200", sollen das 250,2kBaud sein?

Was fürn MC, was fürn Quarz, welcher Baudratenteiler?

Beim AVR kannst Du bei 16MHz nur zwischen 250kBaud und 333kBaud wählen.

Vielleicht hast Du im Baudratenmacro nen Fehlertest und Du kriegst gar 
kein Hexfile, was nicht geflasht wird und demzufolge nicht gehen kann.

Schau mal ins Compiler-Log.


Peter

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.