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:
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).
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).
4 - Arduino UART-Parameter
Die Steuerung der Datenübertragung via UART wird über die Parameter:
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
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.
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.