Forum: Mikrocontroller und Digitale Elektronik Parity check?


von Owen S. (senmeis)


Lesenswert?

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

von peter-neu-ulm (Gast)


Lesenswert?

Beim Zuschalten der Paritätsüberprüfung wird die Bitfolge bei der 
Übertragung um ein Bit länger. Die die Folge abschließende Stop-Flanke 
kommt natürlich um ein Bit später.

Wenn man auf die Paritätsprüfung verzichtet, entfällt die Kontrolle der 
Übertragung. Meist läuft die aber einwandfrei, also kann man in den 
meisten Fällen auf Paritätskontrolle verzichten.

Bei einem Datenwort kann die Zahl der Einsen gerade(even) oder ungerade 
(odd) sein. Das Paritätsbit ergänzt, wenn es auf odd gestellt ist, die 
Anzahl der Einsen auf ungerade. Hat z.B das Datenbyte ungerade Zahl von 
Einsen, dann kommt im Paritätsbit keine dazu. Ist im Datenbyte die Zahl 
der Einsen gerade, ergänzt das P- Bit mit einer Eins auf ungerade.
Auf der Empfängerseite kommt bei fehlerfreier Übertragung immer ein Satz 
von 9 Bit mit ungerader Zahl Einsen an. Das kann mit einem einfachen 
Schieberegister +Logik (oder einem toggle-Flip-Flop) kontrolliert 
werden.

von Owen S. (senmeis)


Lesenswert?

Vielen Dank.

Ich hatte gedacht, die empfangenen Datenbits werden falsch angezeigt 
falls die Paritätsbits von den beiden Enden verschieden eingestellt 
sind.

Nun erkenne ich: die Datenbits werden immer korrekt dargestellt werden 
wenn alle Bits auf dem Kanal ungestört übertragen werden, obwohl die 
Paritätsbits verschieden sind!

Wenn so ist, muss der Empfänger etwas machen, wenn die 
Paritätsüberprüfung scheitert, oder?
Was macht der Empfänger normalerweise?
Eine Wiederholung anfordern?

Danke
Senmeis

von tastendrücker (Gast)


Lesenswert?

>Wenn so ist, muss der Empfänger etwas machen, wenn die
>Paritätsüberprüfung scheitert, oder?
>Was macht der Empfänger normalerweise?
>Eine Wiederholung anfordern?

Der Empfänger macht das erforderliche, so wie es im vereinbarten 
Protokoll vorgegeben ist. Das hängt natürlich von der Anwendung ab. Beim 
Übertragen einer Uhrzeit im Sekundentakt ist es vielleicht unnötig, die 
letzte Uhrzeit erneut zu übertragen, da ja in der nächsten Sekunde die 
nächste Übertragung stattfindet.

Überträgt man aber z. B. Konfigurationsdaten, sollten diese natürlich 
stimmen und bei einem Fehler erneut angefordert/übertragen werden.

von Celli W. (cell)


Lesenswert?

Also ich benutze ein mega128 mit STK500+501.
Über ein in VB 2005 geschriebenes Programm (mit serialport-komponente) 
möchte ich mit dem MC kommunizieren. Übertragung mitels USART 
funktioniert auch in beide Richtungen. Wegen der Datensicherheit möchte 
ich die Übertragung mit einem Parity-Bit machen. Aber dies funktioniert 
igendwie nicht so recht :/

USART-Einstellung MC:
baud 38400 (U2X, doppelte geschwindigkeit von eingestellten 19200)
8 databits
1 stopbit
PC:
baud 38400
8 databits
1 stopbit

Wenn ich in MC und  VB odd-parity (oder even) einstelle, dann ist beim 
senden von PC zum MC immer das Parity_error-bit gestzt. das komische ist 
aber, dass die daten richtig ankamen

muss ich vielleicht auf 9 bits umsteigen um das parity-bit auszuwerten 
oder wo könnte das Problem liegen?

zur eionstellen d. parity habe ich die bits UPM00 bzw UPM01 im UCSR0C 
gesetzt (wie im Datenblatt beschrieben)

von Ralli (Gast)


Lesenswert?

Die Übermittlung des Parity-Bits bei einer seriellen Übertragung 
funktioniert nur dann wie gewünscht, wenn Sender und Empfänger passend 
darauf eingestellt sind.

Bei halbwegs nach Norm funktionierenden Schnittstellen (AVR-MEGA-Serie) 
oder auch PCs, ist das Parity-Bit ein Zusatz-Bit, das übertragen wird,
aber nicht die Anzahl der DATEN-Bits ändert.

Bei funktionierenden Anwendungen sind Sender und Empfänger AUF DIE
GLEICHE WEISE (!) konfiguriert.

Das Parity-Bit wird beim Sender automatisch eingefügt und beim Empfänger 
überprüft.

Die empfangenen DATEN-Bits werden vom Empfänger dem weiterverarbeitenden 
Programm bereitgestellt und bei Übertragungsfehlern wird gleichzeitig 
gemeldet, wenn ein Parity-Error vorliegt.

Sende ich 9 Daten-Bits ohne Parity wird der Empfänger das letze
Daten-Bit als Parity-Bit bewerten. Ob das passt, ist reiner Zufall...

Wie dann der Fehler behandelt wird, ist Sache des Programmierers!
-----------------------------------------------------------------

Also noch mal nachschauen:
Sind Sender und Empfänger richtig konfiguriert?

Gruß Ralli

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.