Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Asynchrone serielle Kommunikation

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.

Abbildung 1 - asynchrone serielle Kommunikation

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

2 - Serielle Datenübertragung und Oszilloskop
Material
  • 1x  Board of Education
  • 2x  Steckdraht
  • 1x  Oszilloskop
Aufgaben
  • Baue die Schaltung nach Schaltskizze bzw. Verdrahtungsplan auf.
  • Verbinde den Messkopf Kanal A mit P14 der BASIC Stamp.
  • Verbinde die Masseleitung des Messkopfes mit Vss auf dem BoE.
  • Übertrage das Programm AsynchronSeriell1.bs2 in den Editor und speichere es ab.
  • Starte das Programm.

Schaltskizze und Schaltungsaufbau

Abbildung 2 - Schaltskizze zur seriellen asynchronen Datenübertragung
Abbildung 3 - Schaltungsaufbau zur asynchronen seriellen Kommunikation

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.

Abbildung 4 - asynchrone serielle Kommunikation

3 - Der Befehl SEROUT

  • 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

4 - Änderung der Baudrate

Wie ändert sich die Darstellung der Bitfolge im Oszillogramm, wenn die Baudrate geändert wird? Um das herauszufinden, gehe die folgende Aufgabe an.

Aufgaben
  • Verändere im Programm asynchronSeriell1.bs2 den Befehl SEROUT wie folgt:
  • SEROUT 14, 16780, [wert]
  • Nach der Tabelle in 3 - Der Befehl SEROUT entspricht das einer Baudrate von 2400.
  • Starte das Programm erneut und stelle durch Veränderung der Einstellungen am Oszillographen ein stabiles Oszillogramm her.
  • Betrachte das Oszillogramm genau. Sind alle Werte zu lesen? Was musste verändert werden?
  • Abbildungen 5 und 6 zeigen zwei Oszillogramme mit den Übertragungsraten 9600 und 2400. Beide male ist die Zahl 27 binär dargestellt.

Oszillogramme zu den Übertragungsraten 2400 baud und 9600 baud

Abbildung 5 - Baudrate 2400, Zahl 27 binär, inverted, Leerlaufpegel 0V
Abbildung 6 - Baudrate 9600, Zahl 27 binär, inverted, Leerlaufpegel 0V. Startbit ist HIGH, Stoppbit ist LOW.

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.

 

5 - Modus 8-Bit non-inverted (true)

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.

Abbildung 7 - Baudrate 9600, Zahl 27 binär, non-inverted, Leerlaufpegel 5V, Startbit ist LOW, Stoppbit ist HIGH.

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.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf