PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auswirkungen von Baudratenfehlern (RS232)



Jaecko
13.04.2009, 15:19
Moin.

Angenommen ich hab einen 16MHz-Quarz und versuche mit einer Baudrate von 57600 zu übertragen. Rechnerisch ergibt das ja nen Fehler von 2,08% (Fehler-Rechner in Bascom)

Wie bzw. wann genau wirkt sich dieser Fehler aus?

Das Problem ist ja, dass die Baudrate vom Controller und die vom PC (der ja echte 57600 schafft) auseinanderlaufen.

Beim Start der Übertragung stimmts ja noch soweit; d.h. der Fehler dürfte erst dann kommen, wenn schon eine bestimmte Menge übertragen wurde. Nur wann? 2,08% heissen ja (für mich), dass von 100 Bits 2 falsch sind.
D.h. ich müsste erst mal 50 Bits übertragen, bevor ich nen Fehler bemerk; d.h. ich kann 6 Bytes am Stück übertragen, ohne dass ich nen Fehler bemerk. Korrekt?

mfG

radbruch
13.04.2009, 16:10
Hallo

Da die RS232 byteorientiert ist und zu jedem übertragenen Byte je ein Start- und ein Stopbit übertragen wird dürfte sich der Baudratenfehler nach jedem Byte quasi selbst reseten. Die 2% Fehler beziehen sich auf die Bitlänge und störten vom ersten übertragen Byte an! Ob das überhaupt funktioniert hängt von den Übertragungspartnern ab.

Speziell für hohe Baudraten gibt es "krumme" Quarze, so wird z.B. im Datenblatt für den Mega32 (das gilt wohl generell) bei 57600 Baud ein Fehler von 0% angegeben wenn man einen 14.7456 MHz-Quarz verwendet. (unter USART/Examples of Baud Rate Setting im Datenblatt)

Gruß

mic

for_ro
13.04.2009, 17:20
Ich benutze einen 16MHz Quarz und habe die Baudrate auf 115200 stehen.
Da sagt der Bascom Rechner 7,84% Fehler, was meiner Meinung nach auch falsch ist.
Wenn ich 1000 Sektoren von der SD Karte lese (also insgesamt 500KB) und die per RS232 zum PC ausgebe, bekomme ich überhaupt keine Fehler.
Besonders addiert sich da nichts. Ein Sektor geht in einem Print Befehl raus.

Gruß

Rolf

uwegw
13.04.2009, 17:48
Hier mal als Verdeutlicheung der Problematik:


korrekte Baudrate:
|.....|.....|.....|.....|.....|.....|.....|.....|. ....|.....|
x x x x x x x x x x

mit Abweichung
|.....|.....|.....|.....|.....|.....|.....|.....|. ....|.....|
x x x x x x x x x x

Die Bits werden gesendet und liegen im Zeitraum zwischen zwei senkrechten Strichen an. Der Empfänger muss nun den Datenstrom abtasten, um die Daten zu bekommen. Das macht er in der Mitte des Zeitraumes, in dem das Bit anliegt (obere Skizze).
Wenn nun der Takt im Sender und im Empfänger nicht gleich sind, wird zu früh oder zu spät abgetastet. Im Bild läuft der Sender schneller als der Empfänger. Der Empfänger tastet das fünfte Bit erst ab, wenn schon das sechste Bit gesendet wird.
Der ganze Abtastvorgang startet aber bei RS232 mit jedem Bit neu. Darum summieren sich bei mehreren Bytes die Fehler nicht. Wenn also die Abweichung so gering ist, dass es während eines Bytes keine Fehler gibt, sind auch größere Datenmengen problemlos möglich.

PicNick
13.04.2009, 18:02
Wenn man mit start-stop für ein Byte 10 Bit annimmt, nimmt also ein Bit 10% in Anspruch. Da der Empfänger ja versucht, die Mitte zu treffen, hat er gewissermassen rechts und links jeweils 5% Platz.
wenn sich also zwei treffen, einer 2.5 % zu schnell, der andere 2.5 % zu langsam, wird die Übertragung kritisch.

Wenn also der PC tatsächlich genau ist und nur der AVR um 2% daneben, sollte es keine Probleme geben. Sonst kommt's eben drauf an.

Es kann mit dem einem Partner klappen, mit einem anderen nicht.

Jaecko
13.04.2009, 20:35
Wieder was gelernt. Thxle soweit.

Einfach gesagt also: Wenn es durch auseinanderlaufende Baudraten zu Problemen kommt, dann entweder schon beim ersten Byte oder garnicht.

Besserwessi
13.04.2009, 20:47
Für das Stopbit braicht man keine reserve, das ist immer nur dazu damit man wieder syncron werden kann. Hier kann man sich insbesondere mit 1,5 oder 2 Stopbits helfen um sicher zu sein. Es hängt aber auch von der Hardware ab, ob eventuell auch ein verkürtztes Stopbit schon reicht.

Bei den Baudratefehler muß man auch noch berücksichtigen, das man bei hohen Baudraten eventuell noch zusätzliche verzögerungen der Pegelwandler und ggf, Störungen hat. Bei mehr Fehler in der Baudrate verringert sich dadurch die Tolleranz gegen Störungen, besonder bei hohen Baudraten.

PICture
14.04.2009, 04:59
Hallo!

Bei höheren Baudraten und langen Leitungen, können die Leitungskapazitäten des Verbindungkabels an seinem Ende die Flanken so verzögern oder/und die Pegel so verringern, dass sogar bei ideal gleichen Frequenzen keine fehlerfreie Datenübertragung möglich ist. Oft können pull-ups am Ende des Kabels helfen, wenn damit die Treiber bei "L" am Ausgang noch nicht überlastet sind.

MfG

PicNick
14.04.2009, 08:35
Ganz so locker ist das mit dem Stop-Bit auch wieder nicht.
Der Empfänger tastet es genauso ab wie die anderen und setzt dann einen "Framing"-Error oder nicht. Und dann hat die Hardware ( bei 1 Stopb.) eine halbes Bit Zeit, das Receive-Shift-Register auszuräumen, damit alles wieder für die nächste Start-Flanke bereit ist.
Das schafft er zwar sicher, aber nix ist es auch wieder nicht.