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...
1,4% Abweichung sollte keine Probleme machen. In der Praxis kann mit bis zu 3% Abweichung arbeiten (wenn's nicht gerade ein AVR ist).
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.
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
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.
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
> 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...
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/ ;-)
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
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.
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
Ich dachte 57,6 kBaud wären schon schnell ;-) Naja ok. Danke für eure Antworten. Ich setze jetzt auf den 20 MHz Quarz.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.