Kommunikation über die serielle Schnittstelle


Da die serielle UART-Schnittstelle bei der Arbeit mit den Nextion-Displays eine zentrale Rolle spielt, wollen wir uns das Ganze etwas näher anschauen. Wenn Sie noch nicht allzu viel Erfahrung mit Mikrocontrollern haben, dann hat die Kommunikation über die serielle Schnittstelle nämlich so ihre Tücken. Aber gerade der Arduino-Bereich gilt für viele Anwender als Einstieg und deshalb möchte ich hier auch scheinbar Selbstverständliches noch einmal erwähnen.

Gekreuzte Sende-Empfangsleitungen

Ein eigentlich ganz simpler Fehler ist der falsche Anschluss der TX- und RX-Ports. Dieser Fehler basiert darauf, das häufig fälschlicherweise von der TX- und RX-Leitung gesprochen wird, die es aber nicht gibt.

Die beiden Teilnehmer einer seriellen UART-Verbindung senden ihre Daten auf dem TX-Port und empfangen auf dem RX-Anschluss. Folgich muss der RX- immer mit dem TX-Port seines Gegenübers verbunden werden.

 

Darstellung der Daten

Ein wesentlich komplexeres Problem ist die Darstellung der übertragenen Daten, bzw. deren Interpretation.

Die serielle UART ist eine sogenannte zeichenorientierte Schnittstelle. Wenn Sie z. B. mit einem Terminalprogrmm wie dem Hyperterminal oder dem TeraTerm arbeiten und senden ein "A" vom Computer an einen anderen Teilnehmer, dann kommt dort auch ein "A" an. Zumindest hat das so den Anschein, denn sowohl der Empfänger als auch der Sender interpretieren die tatsächlichen Daten so.

Bei jeder Datenübertragung können natürlich nur binäre Zahlen übertragen werden und das ist auch bei der seriellen Schnittstelle so. Um das oben genannte A zu übertragen, wird es einem eindeutigen Zeichencode zugeordnet, der im "American Standard Code for Information Interchange" (ASCII) festgelegt ist. Das große "A" wird dabei durch die dezimale Zahl 65 (hex 40) repräsentiert.

Empfängt ein Terminalprogramm also eine binäre "65" erscheint ein A auf dem Bildschirm und so lange Sie sich ausschließlich im zeichenorientierten Modus aufhalten, kann es Ihnen auch egal sein, wie die Daten auf der Leitung aussehen. Die Frage wäre allerdings: "Was sende ich, wenn ich wirklich eine 65 übertragen möchte?"

In diesem Fall hätten Sie 2 Möglichkeiten:

  • Sie senden hintereinander die beiden Zahlencodes: 54 53. Die 54 wird als 6 interpretiert und die 53 entspricht der 5.
  • Ihre Empfangsanwendung weiß, dass die Daten binär zu interpretieren sind und verwendet die 65 z. B. als Integerzahl.

Noch einmal zur Klarheit: Sie senden immer die gleichen Daten, lediglich beide Teilnehmer (Programme im Sender und Empfänger) müssen wissen, wie sie diese zu interpretieren haben. Wenn z. B. von hexadezimaler oder dezimaler Darstellung geschrieben wird, dann bezieht sich das immer auf die Interpretation, nie auf die Übertratung der Daten. Je nachdem, was Sie dann darstellen wollen, kann das ganz schön kompliziert werden.

Beispiel: Eine dezimale 16 entspricht einer hexadezimalen 0x10, übertragen wird aber in jedem Fall die binäre 0001.0000. Es interessiert Sie also nicht, ob der Sender die Daten dezimal oder hexadezimal verarbeitet, wichtig ist nur, ob diese als Zeichen (ASCII) oder Zahlen (Rohdaten) interpretiert werden müssen.
 
Hinweis: Anders als beim Übertragen des Programms (der Firmware) in den Nextion wird bei der Übertragung von Kommandos oder Daten zwischen Host-Controller und Nextion zunächst mit 9600 baud gesendet. Dieser Wert kann aber mit dem Befehl "bauds" auch auf maximal 115.200 baud erhöht werden.