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

Serielle Kommunikation - UART

1 - Einführung

 

Von einer seriellen Kommunikation spricht man, wenn Daten bitweise sequentiell  (nacheinander) über einen seriellen Bus übertragen werden. Nach einem vollständigen Taktzyklus sind alle Bits von Sender (Transmitter) zum Empfänger (Receiver) übertragen.

 

Ohne Schieberegister ist eine serielle Kommunikation nicht denkbar. Sie sind dafür verantwortlich, dass die zu übertragenden Daten mit jedem Taktzyklus bitweise in Richtung Empfänger verschoben werden. Ein einfaches Schieberegister besteht i.a. aus in Reihe geschalteten D-Flip-Flops mit gemeinsamer Taktleitung. Das folgende Beispiel zeigt die prinzipielle Funktionsweise.

Abb. 1a – Prinzipschaltung einer asynchronen Datenübertragungsstrecke. Die Daten werden über DATA IN (DL-Eingang des Registers) zunächst in den Transmitter eingelesen und linksschiebend über seinen Ausgang Q3 an den DL Eingang des Receivers und anschließend seine Ausgänge Q0 … Q3 mit jedem Taktimpuls übertragen. Die am Receiver Ausgang angeschlossenen LEDs zeigen das übermittelte 4-Bit Datenpaket binär an. Die roten Linien zeigen im Moment der Aufnahme die auf HIGH liegenden Leitungen. Die unten im Bild senkrecht verlaufenden vier Linien führen zu einem Logik-Analysator.

Der Schaltungsaufbau ist mit der Simulationssoftware Profilab Expert 4.0 erstellt.

In diesem Kapitel wird die serielle UART-Schnittstelle am Beispiel eines Arduino UNO  etwas genauer untersucht. In zwei Übungen wird zunächst die serielle Kommunikation zwischen PC und Arduino UNO über UART sein, gefolgt von einer seriellen Kommunikation zwischen zwei Arduio UNO Boards (UART).

 

Im Allgemeinen kommt es bei der seriellen Kommunikation darauf an, ein paar Schieberegister miteinander zu verbinden! Im Beispiel der Abb. 1a ist der Datenausgang Q3 des Transmitters (Tx) mit dem Dateneingang DL des Receivers (Rx) verbunden.

 

Digitale Daten lassen sich jetzt seriell über die Datenleitung zwischen dem Anschlusspunkt Q3 am Transmitter, den wir kurz mit Tx bezeichnen und DL am Receiver, den wir als Rx ansprechen, übertragen. Bei jedem Takt wird ein Bit vom Tx-Pin des Senders an den Rx-Pin des Empfängers gesendet und dort empfangen (s. Abb. 1b).

<< Abb. 1b – Die manuell über Taster eingegebenen vier Bit (DATA in) werden an den Ausgang des Transmitters geschoben (TX) und anschließend an den DL-Eingang des Receivers (RX) übertragen. Die binäre Zahl 1001 wurde in diesem Beispielbild übertragen.Es dauert 4 Takte, um 4-Bit-Daten vom Sender zum Empfänger zu senden.

(Die Auswertung mit dem Logikanalysator erfolgte mit Hilfe der Simulationssoftware Profilab Expert 4.0)

2 - Serielle Kommunikation mit dem Arduino UART

 

UART (Universal Asynchronous Receiver-Transmitter) ist das beliebteste serielle Kommunikationsprotokoll bei eingebetteten Mikrocontrollern. Beim Arduino verwendet man  normalerweise das UART-Modul für die serielle Kommunikation mit dem PC über einen USB-TTL-Konverter, um serielle Nachrichten auf einem seriellen Monitor auszugeben.

 

Es gibt zwei Formen von UART-Hardware:

  • UART – Universeller asynchroner Empfänger/Sender
  • USART – Universeller synchroner/asynchroner Empfänger/Sender

 

Der synchrone Sendertyp generiert den Datentakt und sendet ihn an den Empfänger, der entsprechend synchronisiert arbeitet.

 

Der asynchrone Sendertyp generiert den Datentakt intern. Da kein serielles Taktsignal eingeht, müssen beide Enden dieselbe Baudrate verwenden, um eine ordnungsgemäße Kommunikation zwischen den beiden Enden zu erreichen. Die Baudrate ist die Rate in der Einheit bps (Bits pro Sekunde) mit der die Bits gesendet werden.

 

Wie der Arduino UNO mit UART-Modulen ausgestattet ist, schauen wir uns jetzt an.

3 - Die UART-Pins des Arduino

 

Nach Datenblatt verfügt der Arduino UNO über ein UART-Modul mit den beiden Pins Rx zum Empfangen serieller Daten (Pin D0) und Tx zum Senden serieller Daten (Pin D1).

  • Zuordnung der UART-Pins: Rx -> D0 und Tx -> D1.

Für jedes verwendete Arduino Board sollten die UART Pins im Datenblatt nachgeschlagen werden.

Die dabei verwendeten Logik-Pegel arbeiten je nach Board mit 5V oder 3.3 V (siehe Datenblatt).

  • Hinweis: Eine direkte Verbindung der UART Anschlüsse mit einem seriellen RS232-Anschluss, der mit +/- 12 V arbeitet, führt unweigerlich zur Zerstörung des Arduino Boards und ist damit verboten.

4 - Arduino UART-Parameter

 

Die Steuerung der Datenübertragung via UART wird über die Parameter:

  • Baudrate,
  • Anzahl Datenbits oder Datenformat,
  • Parität und
  • Stoppbits

vorher eingestellt. Dabei bedeutet

 

Baudrate

Die Baudrate gibt die Geschwindigkeit an, mit der Daten über die UART-Schnittstelle übertragen werden. Es gibt die Anzahl der Bits pro Sekunde (bps) an. Zu den gängigen Baudratenoptionen für einen Arduino gehören

  • 9600, 115200, 57600 und 38400 bps.

Für eine erfolgreiche Kommunikation müssen sowohl das Sende- als auch das Empfangsgerät auf die gleiche Baudrate eingestellt sein.

 

Anzahl Datenbits (Datenformat)

Datenbits bestimmen die Anzahl der Bits, die zur Darstellung der übertragenen Daten verwendet werden. Die gebräuchlichste Konfiguration sind acht Datenbits (ein Byte). Arduino unterstützt jedoch auch andere Optionen wie 5, 6, 7 oder 9 Datenbits.

 

Paritätsbit

Parität ist ein Fehlerprüfmechanismus zur Erkennung von Übertragungsfehlern. Jedem übertragenen Byte wird ein zusätzliches Bit zur Fehlererkennung hinzugefügt. Das Paritätsbit kann als gerade, ungerade oder keines von beiden konfiguriert werden.

  • Gerade – das Paritätsbit ist „1“, wenn der Datenrahmen eine ungerade Anzahl von Einsen enthält
  • Ungerade – das Paritätsbit ist „0“, wenn der Datenrahmen eine gerade Anzahl von Einsen enthält.

 

Stopp-Bits

Stoppbits zeigen das Ende eines Datenrahmens an. Nach der Übertragung der Datenbits werden ein oder mehrere Stoppbits hinzugefügt, um den Abschluss der Übertragung zu signalisieren. Die gebräuchlichste Option ist ein Stoppbit, für bestimmte Anwendungen können jedoch auch mehrere Stoppbits verwendet werden.

 

Ablaufsteuerung

Die Flusskontrolle verwaltet den Datenfluss zwischen den sendenden und empfangenden Geräten, um Datenverlust oder Pufferüberlauf zu verhindern. Zwei gängige Flusskontrollmechanismen sind die Hardware-Flusskontrolle (mithilfe von RTS/CTS-Signalen) und die Software-Flusskontrolle (mithilfe von XON/XOFF-Sonderzeichen).

Es ist wichtig, die UART-Parameter sowohl auf den Sende- als auch auf den Empfangsgeräten korrekt zu konfigurieren, um eine ordnungsgemäße Kommunikation sicherzustellen. Die serielle Bibliothek in Arduino bietet Funktionen zum Setzen und Lesen dieser Parameter. Durch Auswahl der richtigen Baudrate, des Datenformats, der Parität und der Stoppbits können Sie eine zuverlässige UART-Kommunikation zwischen Arduino-Boards und anderen Geräten herstellen.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf