Bei einem asynchronen seriellen Port fehlt die gemeinsame Taktleitung zwischen Sender und Empfänger und eine gemeinsame Steuerung bei der Übertragung von Daten.
Statt dessen werden bei jeder Übertragung eines Byte ein Start- und ein Stop-Bit gesetzt, und so Empfänger und Sender synchronisiert. Und, auf beiden Seiten muss die Übertragungsrate (z. B. 9600 Bits pro Sekunde) gleich eingestellt sein, wobei kleine Abweichungen möglich sind, da der Empfänger sich mit dem Start jedes Byte, das übertragen wird, neu synchronisiert.
Die wohl allgemein bekannteste Schnittstelle mit asynchroner Kommunikation ist die RS-232 Schnittstelle im Computer, auch serieller Port genannt. Die Datenleitung zwischen zwei Geräten oder Objekten wird gleichzeitig zur Übertragung und Synchronisation genutzt. Der Empfänger muss notgedrungen die Datenleitung ständig überwachen und schauen ob ein Start-Bit übertragen wird.
Werden keine Daten übertragen, ist die Datenleitung im Leerlauf. Sobald der Empfänger sieht, dass auf der Datenleitung etwas übertragen wird, initialisiert er sich und empfängt die Daten.
Zum Senden und Empfangen von Daten muss die Übertragungsrate vorher auf beiden Seiten gleich und sehr genau eingestellt sein. Sie wird in der Einheit Baudrate (bits per second oder bps) angegeben.
Gestartet wird jede Kommunikation mit einem Startbit, gefolgt von den Datenbits. Ein Datenbit 0 wird als HIGH-Signal auf die Datenleitung gelegt, entsprechend eine 1 als LOW-Signal.
Die Datenbits haben einen äquidistanten Abstand voneinander (Abb. 1). Der Abstand von der steigenden Flanke des Startbits bis zur Mitte des Data-Bit0 beträgt 1,5 Zeiteinheiten eines Bits. Sobald der Empfänger ein Startbit erhält, wartet er 1,5 Zeiteinheiten eines Bits bevor er Bit 0 einliest. In der Folge werden dann die weiteren Bits im Takt einer Bit-Zeiteinheit gelesen.
Aufgefallen ist vielleicht, dass bei der Übertragung eine 0 auf der Datenleitung als 1-Signal erscheint. Das hängt damit zusammen, dass die RS232-Schnittstelle nach Vereinbarung eine invertierende Spannungsschnittstelle (negative Logik) ist. Spannungspegel zwischen -3V und -15V entsprechen einer logischen 1, Spannungspegel zwischen +3V und +15V einer logischen 0. Alle Signalpegel zwischen -3V und +3V sind undefiniert.
Mit Hilfe des Oszilloskops werden wir erst einmal untersuchen, welche Signalpegel wir an der eigenen seriellen Schnittstelle vorliegen haben.
2 - Serielle Datenübertragung und Oszilloskop | |
Material |
|
Aufgaben |
|
Schaltskizze und Schaltungsaufbau
Das Programm AsynchronSeriell1.bs2
Wie arbeitet das Programm AsynchronSeriell1.bs2
Das Oszillogramm (Abb. 4) zeigt für jede Zahl das entsprechende Pulsdiagramm an. Es ist die binäre Umsetzung der Dezimalzahlen von 1 bis 1000, in 8-Bit Darstellung, keine Parität, invertiert mit einer Baudrate von 9600. Dies alles wird über den Befehl
SEROUT 14, 16468, [wert]
gesteuert.
SEROUT Tpin, Baudmode, [OutputData]
Überträgt asynchron seriell Daten. Die Bedeutung der Befehlsargumente
Tpin legt den I/O Pin (0 - 16) der BASIC Stamp fest, über den die Daten
übertragen werden (Variable, Konstante, Ausdruck).
Baudmode legt das Timing der seriellen Übertragung fest (0 - 65535 bei der BS 2 und 0 -
7 bei der BS 1). Der Argumentwert ist codiert und der folgenden Tabelle zu
entnehmen.
Baudrate |
8-bit no-parity inverted |
8-bit no-parity non-inverted |
7-bit even-parity inverted |
7-bit even-parity non-inverted |
300 | 19697 | 3313 | 27889 | 11505 |
600 | 18030 | 1646 | 26222 | 9838 |
1200 | 17197 | 813 | 25389 | 9005 |
2400 | 16780 | 396 | 24972 | 8588 |
4800 | 16572 | 188 | 24764 | 8380 |
9600 | 16468 | 84 | 24660 | 8276 |
OutputData Variable, Konstante oder Ausdrücke mit Formatierungsanweisungen für die
auszugebenden Daten
Wie ändert sich die Darstellung der Bitfolge im Oszillogramm, wenn die Baudrate geändert wird? Um das herauszufinden, gehe die folgende Aufgabe an.
Aufgaben |
|
Oszillogramme zu den Übertragungsraten 2400 baud und 9600 baud
Die Ausmessung einer Pulsbreite mit den Zeitlinealen zeigt unten rechts in beiden Abbildungen die jeweils errechnete Frequenz; sie korrespondiert zur eingestellten Baudrate. Der Leerlaufpegel ist in dieser Einstellung (inverted) immer 0V. Die Übertragung der Daten startet mit einer 1, gefolgt von
0 0 1 0 0 1 1 1
und dem Stoppsignal, das wieder dem Ruhepegel entspricht. Ganz links steht das LSB (least significant bit oder niederwertigste Bit), ganz rechts das MSB (most significant bit oder höchstwertige Bit). Schreibt man die Binärzahl stellenwertrichtig (MSB ganz links, LSB ganz rechts), lautet sie
1 1 1 0 0 1 0 0
Alle Zahlen sind im Modus inverted dargestellt, das heißt, Nullen erscheinen als Einsen und Einsen als Nullen. Der wahre Wert der Binärzahl ergibt sich nun dadurch, dass man sie in den non-inverted Zustand überführt, indem man die Einsen in Nullen und die Nullen in Einsen konvertiert. Die dargestellte Zahl hat also die Binärdarstellung
0 0 0 1 1 0 1 1
oder in Dezimaldarstellung 27. Klingt alles sehr kompliziert, ist es aber nicht, wie wir gleich sehen werden.
Einfacher geht es, wenn man die asynchrone Kommunikation gleich so anlegt, dass die Daten im Modus non-inverted übertragen werden. Dazu muss der Parameter Baudrate im Befehl SEROUT nach Tabelle 1 auf den Wert 84 geändert werden. Die Darstellung der Zahl 27 im non-inverted Modus mit einer Übertragungsrate von 9600 baud zeigt Abbildung 7.
Bei der non-inverted Darstellung ergeben die einzelnen Bits die Darstellung
1 1 0 1 1 0 0 0
ohne Start- und Stoppbit. Das LSB steht ganz links, das MSB ganz rechts. Umdrehen der Reihenfolge der Ziffern ergibt die wahre binäre Zahldarstellung
0 0 0 1 1 0 1 1
und die kennen wir schon. Das ist die Zahl 27.