PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Parity check?



senmeis
19.06.2008, 12:09
Servus,

ich habe eine merkwürdige Sache bei der RS232-Kommunikation zw. AT90CAN128 und Terminal V1.90b gefunden. Am Anfang konfiguriere ich das RS232 von den beiden wie folgendes:

Baudrate = 9600; Datebits = 8; Parity = none

und die Komminikation ist in Ordnung.

Dann mache ich jeweils eine Änderung von Parity entweder bei AT90CAN128 oder bei PC. Hier die Ergebnisse:

PC = odd und MCU = no => PC nach MCU richtig, MCU nach PC falsch;
PC = no und MCU = odd => PC nach MCU falsch, MCU nach PC richtig;
PC = odd und MCU = even => PC nach MCU richtig, MCU nach PC richtig;
PC = even und MCU = odd => PC nach MCU richtig, MCU nach PC richtig;

Frage 1: Ist es so, ein Gerät wird nicht das Parity-Bit überprüfen wenn diese Funktionalität ausgeschaltet ist, ohne die Daten zu verfälschen (Zeilen 1 und 2)?

Frage2: Was ist mit odd und even parity?
Diese Überprüfung arbeitet nicht (Zeilen 3 und 4).
Hat jemand sowas erfahren?

Danke
Senmeis

Winne
19.06.2008, 21:19
Herr Doktor,

ich hab nen Knoten in der Brust.

Aber wer macht den sowas?:eek::rolleyes::confused:

elmar
20.06.2008, 19:31
Hi,

Die RS232 generiert eine Bitfolge:

Startbit - 5/7/8 Datenbits - optionales Paritybit - 1/2 Stopbit

Das Startbit zeigt an, wann ein Byte gesendet wird, bedeutet einfach nur "Nach einer Bitlänge geht es los!"

Das Stopbit ist dabei gar keines, es ist der Ruhezustand der Leitung. Es wird nur deshalb "bit" genant, da es eine Pause ist, die in Bitlänge gemessen wird. Das Stopbit generiert also nur eine Pause mit einer minimaldauer. Es dient nur dazu zu verhindern, dass ein ETWAS langsammerer Empfänger das Startbit verschläft. Diese Pause kann man verlängern (2 Stopbits) um sehr langsammen Empfängern Zeit zu geben, das Empfangene zu verarbeiten. Das war früher mal wichtig für Kernspeicher (langsam) und Typenraddrucker (ohne Puffer) damit die wärend der verlängerten Pause das Byte verarbeiten (wegspeichern/drucken) und sich danach auf das nächse Byte konzentrieren konnten.
Senderseitig kann man immer zwei Stopbits einstellen, Empfangsseitig nur wenn es auch der Sender macht sonnst verschläft der Empfänger das nächste Startbit.

Was Datenbits sind, sollte klar sein ;)

Die Paritybits haben unterschiedliche Aufgaben!

Odd
Ungerade, gesetzt wenn die Summe der Einsen im Byte ungerade ist:
000 = 0
001 = 1
010 = 1
011 = 0
100 = 1
101 = 0
110 = 0
111 = 1

Even
Gearde, gesetzt wenn die Summe der Einsen im Byte gerade ist:
000 = 1
001 = 0
010 = 0
011 = 1
100 = 0
101 = 1
110 = 1
111 = 0

Mark
Gesetzt (1), egal wie das Datenbyte aussieht

Space
Gelöscht (0), egal wie das Datenbyte aussieht.


Was kann man damit machen?
Odd/Even erkennen ein gekipptes Bit, also einen Fehler. Das Problem ist, dass das nur eine ungeradzahlige Anzahl von Fehlern erkennt, also 1,3,5 oder 7 Fehler denn zwei Fehler heben sich auf!

Warum odd/even?
Ist die Leitung unterbrochen, so entsteht ein Startbit und alle vom Empfänger interpretierten Datenbits sind gleich. Abhängig davon ob man eine geradzahlige (8) oder ungeradzahlige Anzahl (5 oder 7) von Datenbits benutzt besteht das durch die unterbrechung ausgelöste Byte den Paritycheck. Daher benutzt man odd oder even damit ein simpel gestrickter empfänger die unterbrochene Leitung nicht als Byte interpretieren kann, je nach Anzahl der Datenbits.
Ein besserer Empfänger bemerkt das fehlende Stopbit und löst alarm aus. Und genau das kann sogar vom Sender veranlasst werden in dem die Leitung dauerhaft auf den Pegel des Startbits gelegt wird. Das ist die sogenannte "Alarm condition" (Alarmzustand). Benutzt wurde das früher um einen Hardwarereset im Empfänger auszulösen. Entweder wenn die Leitung unterbrochen wurde oder der Sender feststellt, dass der Empfänger "pennt" und selber die alarm-condition auslöst.

Warum mark/space?
Mark und Space verlängern das Byte künstlich. Es wird nicht für Paritätsprüfungen verwendet! Wird ein "Space" erwartet, so ignoriert der Empfänger die Tatsache, dass ein "mark" empfangen wurde. Egal ob mark oder space, der Empfänger hört zu.

Damit kann man 7-bit und 8-bit Geräte mischen. Das 7-bit Gerät erwartet jetzt 8-bits wobei das 8. Bit ignoriert wird. Aber es wird ein 8. Bit senden, was immer '0' ist und der 8-bit empfänger interpretiert das richtig da der Wertebereich korrekt als 0..127 erkannt wird. Das ist z.B. die ASCII Codepage ohne Länderspezifische Sonderzeichen. So kann ein 8-bit Computer mit einem 7-Bit ASCII Terminal sprechen.

Steht der Empfänger auf "mark", so hört er nur zu, wenn das Paritybit auch '1' ist!
Ursprünglich wurde das für ASCII Terminals benutzt. Hängt ein Drucker dran, so hat man ein problem bei einer Telefonleitung. Entweder man braucht eine zweite Leitung oder der User schaltet den Drucker passend ein- und aus. Eleganter ist eine automatische Umschaltung. Terminal auf "Space", also zeigt alles an und Drucker auf "Mark", läuft also nur wenn das Paritybit '1' ist. So kann der Sender über das Parity-bit steuern, ob der drucker mitläuft oder nicht!
Heutzutage benutzt man das insbesondere bei µC systemen. Man kann mehrere µC parallel an die RS232 hängen. Unterschieden werden die durch Nummern. Sendet man diese Nummer, so setzt man "mark", alle µC wissen jetzt, dass eine Adresse kommt, werten die aus und entscheiden ob sie gemeint sind oder nicht. Wenn sich einer angesprochen fühlt, schaltet der sich auf "space" und hört jetzt alles mit wärend die anderen auf "mark" schalten und den ganzen datenaustausch ignorieren (kein Interrupt) da die das ja nichts angeht. Dadurch wissen die µC genau wann sie zuhören müssen und können die ganze Zeit mit voller Leistung arbeiten, da die sich nicht um irgendwelche Auswertungen von Daten herumschlagen müssen, die sie gar nichts angehen.

Space kann auch als zusätzlichers Stopbit fungieren, also sind 2 Stopbits möglich ohne die Sende oder Empfangsschaltung komplizierter zu machen.


Gruß
Elmar

Felix Weiss
20.06.2008, 22:24
Hallo Elmar,

danke für die ausführliche Erklärung :)
Ich hätte nie gedacht, dass soviel Geist dahintersteht.
Man lernt halt nie aus ;)

Grüße Felix

elmar
21.06.2008, 16:46
Hi,

oft ärgert man sich über "unnötig kompliziertes" in der EDV. Aber wenn man die Geschichte der Datenübertragung kennt, weiss man genau, warum das alles so ist und kann diese Features für eigene Zwecke sinnvoll einsetzen. Auch brauch man weniger auswendig lernen, da ja alles sehr logisch ist.

Die RS232 kommt aus der Telegraphentechnik und wurde liebevoll erweitert bis sie irgendwann als RS232 fertig definiert war.

Falls Du Dich mal gefragt hast, warum es 25-pin und 9-pin Buchsen gibt, das hat alles seinen Sinn! Der PC kennt nur 9-pins, mehr geht nicht. Aber die RS232 kennt alle 25 pins! Beim PC sind nur 9 angeschlossen, auch wenn da eine 25-pin Buchse dran ist.
Die zusätzlichen Pins können recht viel, z.B.
- Baudrate einstellen (auch im Betrieb beliebig umschalten)
- Pegel der Leitungen übertragen um Sonderspannungen bekannt zu machen
- Stromversorgung des Pegelwandlers in der Gegenstelle (also optokoppler mit Strom versorgen)
- Bestimmte Fehlermeldungen genauer aufschlüsseln, PC kann nur "NICHT SENDEN", volle RS232 kann auch sagen warum
- Übertragen des Takts für simple Gegenstellen ohne eigenen Taktgenerator
- Hardware-Multiplexen (mehrere Terminals an einer Leitung)
- ZWEITE voll-duplex kommunikation für Steuerdaten
uvm.

Gruß
Elmar

Rudo
21.06.2008, 20:27
Hi,
richtig, die 25pins mach(t)en schon Sinn-das ist aber doch jetzt sowas von out...
Auf die Spitze trieben es -natuerlich mal wieder die amis- mit dem SECS - ist nix versautes:
S E C S (http://de.wikipedia.org/wiki/SECS)
Da haben die doch wirklich mit RS232 (und nicht 485) alle moeglichen Geraete in der Halbleiterfertigung miteinander vernetzt, die Norm war einige hundert Seiten stark (und kostete richtig Geld)...

elmar
22.06.2008, 07:28
Hi,

das ist bei Bussystemen völlig normal. Wann immer man aud IEEE stößt, wird es RICHTIG kompliziert und vor allem RICHTIG teuer!

Gruß
Elmar

elmar
22.06.2008, 10:47
Hi,


Hi,
richtig, die 25pins mach(t)en schon Sinn-das ist aber doch jetzt sowas von out...



Ich finde es aber schon klasse, wenn man einfach 4 Optokoppler zwischenschalten kann ohne sich um Stromversorgungen kümmern zu müssen. Oder das Endgerät mit einem Simplen Schieberegister und völlig ohne Stromversorgung oder Taktgenerator arbeiten kann!


Gruß
Elmar

elmar
22.06.2008, 11:09
P.S.:

Falls Du mit dem Gedanken spielst, das Paritybit zur Datensicherheit zu benutzen, vergiss es! Nur die vollbelegte (25-pin) RS232 kann dem Sender signalisieren, dass da was schief gegangen ist und eine Widerholung verlangt wird (ACK Leitung). Mit der minimalistischen PC Schnittstelle werden die fehlerhaften Bytes nur aussortiert und sind dann einfach weg. Dadurch ist die GESAMTE Übertragung unbrachbar! Außerdem werden doppelfehler ignoriert:

Odd:
Gesendet: 0101 = 0
Empfangen: 1001 = 0 ->Paritätscheck bestanden!
oder
Gesendet 1110 = 1
Empfangen 0100 = 1 -> Paritätscheck bestanden!

Soll die Übertragung Fehlerfrei sein, so muß ein protokoll her, dass die Fehler erkennt. Man kann einen CRC_Check durchführen, da können kleinere Fehler beim Empfänger sogar noch korrigiert werden. Aber auch hier nützt das Erkennen von Fehlern alleine nichts (Größere Fehler können nicht repariert werden), da der Sender ja wiederholen muß.

Das am weitesten verbreitete Protokoll ist das "Xmodem" Protokoll. "Modem" deshalb, weil es für DFÜ über Modems entwickelt wurde, den gerade da hat man eine simple Kommunikation und fehlende Statusleitungen. Hier werden die Daten in kleine Häppchen (Packete) aufgeteilt. Jedes Packet enthält eine Prüfsumme und eine laufende Nummer. Nach jedem Packet überprüft der Empfänger den einwandfreien Zustand der Ware. Ist ein Packet kaputt oder ging gar ganz verloren, so wird es über die nummer erneut angefordert.

Basierend auf "Xmodem", aber in der Lage Dateien gezielt anzufordern ist "Kermit". Das wurde benutzt bevor es Internet gab. Man wählte einen Computer an und der gab einem eine Liste der verfügbaren Dateien. Dann suchte man sich aus, was man haben wollte und bekam die Daten. Da jede bessere Terminalsoftware "Xmodem" oder "kermit" spricht, ist das bei µC Anwendungen sehr praktisch. Gerade "Kermit" ist bei selbstgebauten Datenloggern sehr praktisch, da man so ohne irgendeine Software zu schreiben sich eine Liste der Datensätze herunterladen kann und daraufhin gezielt diese Datensätze laden kann.

Gruß
Elmar