Parity, 9bits, Stop bits

Gast #21915
Lesenswert?

Hallo,

1.)kann mir bitte jemand erklären was Parity, 9Bit, und die stop bits 
bedeuten, und wann sie eingesetzt werden?

2.)In meinen Terminalprogrammen kann ich nirgends 9bit einstellen. Ich 
würde gerne 16Byts hintereinander vom Atmega8 empfangen, wobei der erste 
Byte aus synchronisationsgründen den 9.bit als 1 liefern sollte.
Oder macht man das irgendwie anders?

Danke
Zoltan
Gast #21919
Lesenswert?

Hallo,

>1.)kann mir bitte jemand erklären was Parity, 9Bit, und >die stop bits bedeuten, 
und wann sie eingesetzt werden?

Das Parity-Bit ist eine "Quersumme" über die 8 Datenbits.
Also, ungerade Anzahl von "1" = Parity gesetzt, gerade Anzahl von "1", 
Parity nicht gesetzt.
Da man sich damals wohl nicht so ganz sicher war flexibel genug zu sein 
gibt es eben die beiden Parity "even/odd".
Bei "odd" wie oben beschrieben, Einstellung "even" dreht alles um (Es 
kann auch sein das es genau anders herum ist, merken konnte ich es mir 
nie).

Das 9.Bit kann bei einigen Mikrocontroller oder UART Bausteinen seperat 
programmiert werden. Beim 8515 ist zum Beispiel kein Parity-Bit 
vorhanden, wohl aber ein programmierbares 9.Bit. Das kann dann als 
Parity-Bit benutzt werden. Es gab auch mal ein Protokoll mit 9 Bit 
Daten, das 9.Bit hat ein Steuertelegramm gekennzeichnet.
Die Stopp-Bits kennzeichnen das Ende vom Sendebyte.
Der logische Pegel liegt fest. Es gibt Einstellungen mit 1, 1.5 oder 2 
Stoppbits.

Zum Syncronisieren würde ich ein zeichen nehmen das im sonstigen 
Telegramm nicht vorkommt.
Bei reiner ASCII Übertragung bietet sich <STX> zum Telegrammanfang und 
<ETX> als Ende an. Diese Steuerzeichen liegen ausserhalb der 
ASCII-Zeichen und lassen sich sicher erkennen.
Bei Binärdaten wirds schwieriger.
Dabei sind ja alle Bitkombinationen möglich und es muss das ganze 
Telegramm mit Header-Informationen übertragen werden so daß sicher 
Syncronisiert werden kann.

Bernd
Gast #21920
Lesenswert?

Eine Prozessoren wie z.B. die neueren Mega's bieten in der UART-Sektion 
die Möglichkeit neben Parity und 1 oder 2 Stop-Bits bis zu 9 Datenbits 
zu übertragen. Der UART in einem handelsüblichen PC (16C550 bzw. 
Kompatible hat diese Option nicht). Als Lösung des Problems bietet sich 
entweder die Synchronisation über einen bewussten Fehler (z.B. Parity 
oder Framing Error an) an. Hier ist allerdings die Programmierung eines 
eigenen Device-Treibers auf PC-Seite erforderlich. Eine andere 
Möglichkeit besteht darin, wenn man schon alle 8 Bit benötigt diese auf 
7 Bit Blöcke zu verteilen und das 8. Bit zur Synchronisation zu 
verwenden.
Gast #21921
Lesenswert?

Danke für die Antworten!

@Berndt
warum gibt es 1, 1,5 oder 2 Stoppbits?

Ich werde am besten z.B. drei Bytes als Synkronisations-Bytes senden, 
und die Sache mit dem  9. Bit vergessen. Den AVR zu programmieren ist ja 
"kein Problem" aber was ich mit dem PC machen muss, das geht etwas zu 
weit. Und nur 7 Bit sind leider nicht zu gebrauchen.

Kennt ihr vieleicht proffesionellere Terminalprogramme, in dennen mann 
auch 2Byte als dezimalzahl ausgeben kann(0..65535). Mit den Werten bis 
255 kann ich nichts anfangen, da ich 16 Bit grosse Zahlen übertragen und 
darstellen möchte.
Gast #21923
Lesenswert?

Ich würde die zu übermittelnden Zahlenwerte in Hexstrings umwandeln und 
so (als String) übertragen. Dann kannst du jedes Telegramm mit einem 
Startzeichen (STX = 0x02) versehen.
Also um Beispielsweise die Zahl 1000(Dezimal) zu übertragen müsstest du 
die 1000 als Hex 03e8 übertragen, mit führenden Startzeichen ergibt sich 
dann
<STX>03e8
Nach Wunsch kannst du am Schluss auch noch ein ETX (0x03) anhängen.

Gruss
Christian
Gast #21925
Lesenswert?

Erstmal danke für die Tipps!

@mikki
Ich teile den 16Bit(z.B. 1000) Wert im AVR und sende sie dann als zwei 
8Bit Werte an den PC. Da  muss ich sie aber auch wieder als 1000 
angezeigt bekommen un nicht als 0x03 und 0xE8 oder 3 und 232.


L=mein_wert;      // 16bit into 2x 8bit
mein_wert>>=8;
H=mein_wert;
uart_send(L);        //Wert1 ->PC_1
uart_send(H);        //Wert1 ->PC_2

Ich habe meinen Bruder überreden können einen, noch nicht ferigen, 
Programm zu schreiben, um diese Werte von oben wieder im PC zusammen 
fügen zu können. So kann ich jetzt 8, 16, 24, 32Bit Werte als dez 
Darstellen. Siehe Anhang. Dann hat der AVR weniger zu tun und muss keine 
Startzeichen übertragen. Wäre auch unfair gegenüber den kleinen MC, wenn 
hier ein 1000 Euro PC nur so rumsteht, und die ganze Arbeit der AVR 
machen muss..
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren