Forum: Mikrocontroller und Digitale Elektronik Parity, 9bits, Stop bits


von Zoltan (Gast)


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

von edi (Gast)


Lesenswert?

hi,

ich rate dir erst einmal nach ' UART ' zu googlen.
9 bit klingt so nach 8051 mode 3

ed

von Zoltan (Gast)


Lesenswert?

Da muss man irgendwie den Parity bit, als 9.bit nutzen. Wie ich das im 
mikrocontroller machen könnte kann ich mir vorstellen, aber wie 
konfiguriere ich den PC?

von edi (Gast)


Lesenswert?

hi,

versuche mal mit PARITY = EVEN

ed

von Bernd Schmidt (Gast)


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

von mikki merten (Gast)


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.

von Zoltan (Gast)


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.

von mikki merten (Gast)


Lesenswert?

@Zoltan
Warum wandelst du die 16 Bit Zahlen nicht gleich auf ATMEL Seite in 
entsprechende ASCII Darstellung um. Ist doch wesentlich einfacher und 
erspart dir die Erstellung eines entsprechden Programms für deinen PC.

von Christian Schifferle (Gast)


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

von crazy horse (Gast)


Lesenswert?

@bernd
die Sache mit den Stopbíts (>1) hat eher historische Gründe, sollte der 
empfangenden Station mehr Zeit geben, entsprechende Aktionen 
auszuführen. Die Netto-Datenrate wird dabei niedriger. Ich kenne keine 
Anwendung, bei der heute noch mehr als 1 Stopbit verwendet wird.

von Zoltan (Gast)


Angehängte Dateien:

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..

von Bernd Schmidt (Gast)


Lesenswert?

>@Bernd
>warum gibt es 1, 1,5 oder 2 Stoppbits?

die 1.5 Stppbits kommen aus der Fernschreibtechnik.
Damals wurde mechnisch das Ende erkannt und 1.5 Stoppbits
waren wohl einfacher festzustellen.


Bernd

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.