Forum: Mikrocontroller und Digitale Elektronik RS232: Baudratenabweichung vom Soll(Standart) Wert


von Igor M. (bastel-wastel)


Lesenswert?

Hallo miteinander,

ich möchte mit einem PIC 18F2550 (C18 Compiler) eine Kommunikation über 
RS232 (57,6kBaud, gerade Parität) mit einem Gerät herstellen. Ich 
verschicke Protokolle, die aus bis zu 14 Byte bestehen (in beide 
Richtungen).

Anfangs wollte ich einen 20 MHz Quarz verwenden. Durch Einstellen des 
Baudgenerators im PIC erreiche ich damit jedoch nur 56181 Baud, was also 
um 1,36% vom Sollwert abweicht. Sehe ich das richtig, dass hierbei die 
Chance gut stehen, dass sich in meinem Protokoll ein Fehler bei der 
Übertragung ein Fehler auftuen kann?
Ich überprüfe jeweil das gesendete Byte mit einem Paritätsbit. Zudem 
wird aus allen gesendeten Daten eine "Blockparität" gebildet, die 
ebenfalls überprüft wird. Eine Fehlerhafte Übertragung sollte ich also 
schon erkennen. Ich möchte aber trotzdem eine "sichere" Verbindung haben 
um Fehlübertragungen zu vermeiden.

Welche Möglichkeiten habe ich nun? Mir fällt gerade nur ein Quarz mit 
14,7456 MHz ein.
Durch diesen Quarz wird mein zu erstellendes Programm leider aufwändiger 
was die zeitlichen Ereignisse angeht...

von Gast (Gast)


Lesenswert?

1,4% Abweichung sollte keine Probleme machen. In der Praxis kann mit bis 
zu 3% Abweichung arbeiten (wenn's nicht gerade ein AVR ist).

von Igor M. (bastel-wastel)


Lesenswert?

Hmm, aber auch bei so einer geringen Abweichung kann es doch vorkommen, 
dass die Daten verfälscht werden, oder irre ich mich? Diese 
Wahrscheinlichkeit steigt zudem noch mit der Länge des Protokolls..

Naja, ich muss ja eigentlich sowieso eine Überprüfung der Daten und eine 
eventuelle Neuanforderung von diesen implementieren. Eine genau Baudrate 
ist ja keine Garantie für richtige Daten.

von Spess53 (Gast)


Lesenswert?

Hi

>Hmm, aber auch bei so einer geringen Abweichung kann es doch vorkommen,
>dass die Daten verfälscht werden, oder irre ich mich? Diese
>Wahrscheinlichkeit steigt zudem noch mit der Länge des Protokolls..

Es gibt zulässige Toleranzen, in den Abweichungen toleriert werden. Bei 
AVRs ist das im Datenblatt angegeben (PIC-Datenblätter kenne ich nicht). 
Der zulässige Fehler hängt nicht von der Länge eines Datenpakets, 
sondern nur von der Anzahl der Bits zwischen Start- und Stopbit ab. Bei 
5 Datenbits ist die zulässige Abweichung grösser als bei 9 
Datenbit+Paritybit.
Du musst dir das so vorstellen: Nach Erkennen des Startbits wird der 
Pegel in einem bestimmten Raster abgetastet. Bei idealer Baudrate liegen 
die gültigen Abtastpunkt in der Mitte eines Bits. Bei Abweichungen 
zwischen Sende- und EmpfangsBaudrate wandert der Abtastpunkt bei jedem 
Bit ein Stück in Richtung Bitflanke. Wenn diese dann überschritten ist 
kommt es zu Fehlen. Da die Abtastung mit jedem Startbit synchronisiert 
wird, ist die Übertragung unabhängig von der Anzahl der übertragen 
Bytes.

MfG Spess

von Igor M. (bastel-wastel)


Lesenswert?

Ahhh, jetzt wirds klarer. Ich dachte vorher, dass der Takt beim 
Empfangen immer weiterläuft und das zu einem bestimmten Zeitpunkt z.B. 
100 Bits gesendet und 99 Bits empfangen werden.

Aber so ist es jetzt klarer (und auch logisch ;-) ). Also gut, dann kann 
ich ja beruhig meinen 20 MHz Quarz einsetzen und die 1,36% Fehler in 
Kauf nehmen.

Dann noch eine Frage: Wozu dann die 14,7456 MHz Quarze? Hab hier im 
Forum (in irgendeinem "Anfänger-Warenkorb") gelesen, dass man diese 
nehmen soll, um Schwierigkeit mit der seriellen Verbindung zu vermeiden. 
Deshalb bin ich erst darauf gekommen.

von Spess53 (Gast)


Lesenswert?

Hi

Bei sogenannten Baudratenquarzen wie z.B. 14,7456 MHz bekommst du eine 
Baudrate mit 0% Fehler. In dem Datenblatt zu deinem Controller findet 
sich bestimmt eine Formel zu Berechnung des Baudratenregisters. Wenn du 
jetzt mal 20MHz und 14.7456 MHz dort einsetzt, wirst du sehen, das du 
bei 20MHz kein ganzzahliges Ergebnis bekommst. Das Baudratenregister 
kann aber nur ganzzahlige Werte annehmen. Der Nachkommateil deiner 
Berechnung ist der entstehende Fehler. Bei 14,7456 MHz ist das Ergebnis 
ganzzahlig. Damit wird der Fehler Null.

MfG Spess

von Hannes L. (hannes)


Lesenswert?

> Wozu dann die 14,7456 MHz Quarze?

Nun rechne mal...

UARTs takten üblicherweise mit dem 16-fachen der Baudrate. Suche doch 
einfach mal Zahlen, die durch das 16-fache aller üblichen Bautraten 
teilbar sind. Du wirst die Frequenzen der Baudratenquarze finden. Mit 
denen ist die Abweichung im Normalfall 0%, es gibt also allerhand 
Spielraum für Temperaturdrift und Bauteiltoleranzen, ohne den sicheren 
Bereich zu verlassen.

Achja, wer Standard mit "t" schreibt, hat eigentlich keine Antwort 
verdient.

...

P.S.: Viel Spaß noch bei der Party mit den bunten Eiern...

von Andreas B. (bitverdreher)


Lesenswert?

Am Rande sei noch bemerkt, daß sich ungünstigenfalls noch der Fehler 
Deines PCs (Gerät oder wohin die Daten auch immer gehen) addiert.
Deshalb lasse ich mich auf solcherlei Rechnungen erst gar nicht ein und 
verwende immer Baudratenquarze.
Und ein Problem weniger im Leben :-).......

Gruß
Andy

> Achja, wer Standard mit "t" schreibt, hat eigentlich keine Antwort
verdient.

Sei nicht so unbarmherzig. Dazu siehe hier:
http://www.k-faktor.com/standart/ ;-)

von Spess53 (Gast)


Lesenswert?

Hi

@Andreas: Man kann das meinesachtens nicht so pauschal sehen. Z.B. sind 
in den AVR-Datenblättern ein maximaler und ein empfohlener maximaler 
Fehler angegeben. Bei letzteren ist, denke ich mal, ist der Fehler der 
Gegenstelle schon berücksichtigt. Andererseits ist der Fehler bei einer 
hohen Quarzfrequenz und kleiner Baudrate verschwindend klein. Man sollte 
auch nicht verschweigen, das mit Baudratenquarzen manchmal die 
Einhaltung genauer Timerzeiten nicht möglich ist. Da muss man halt 
Prioritäten setzen.

MfG Spess

von Igor M. (bastel-wastel)


Lesenswert?

Wofür der 14,7456 MHz Quarz ist, weiß ich schon ;-)

Ich meinte eher wofür man einen solchen 0% Fehler Quarz (asynchrone 
SChnittstelle) braucht, wenn man mit 1-2% Fehler auch zurecht kommt.

von Spess53 (Gast)


Lesenswert?

Hi

Bei niederen Baudraten ist das auch nicht so interessant weil der Wert 
für das Baudratenregister relativ gross ist. Je grösser deine Baudrate 
ist, desto kleiner wird der Wert für das Baudratenregister. Und dann 
bekommen die o.g. Nachkommastellen einen ganz anderen Stellenwert.

MfG Spess

von Igor M. (bastel-wastel)


Lesenswert?

Ich dachte 57,6 kBaud wären schon schnell ;-)

Naja ok. Danke für eure Antworten. Ich setze jetzt auf den 20 MHz Quarz.

von Spess53 (Gast)


Lesenswert?

Hi

>Ich dachte 57,6 kBaud wären schon schnell ;-)

Nö

MfG Spess

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.