Block 5 - Kommunikation

Einführung

Asynchrone Kommunikation

Übungsaufgaben

1.) Synchron und asynchron

Was ist der Vorteil einer asynchronen gegenüber synchroner Übertragung? a) Die asynchrone Übertragung ist schneller. b) Die asynchrone Übertragung ist zuverlässiger (weniger Übertragungsfehler). c) Die asynchrone Übertragung ist einfacher zu realisieren, weil man nur eine Leitung braucht.

2.) Paritätsbit

Die Zahl 167 wird bitweise übertragen, Wie ist der Wert des Paritätsbits bei ungerader Parität?

3.) Geschwindigkeit

Ein DSL-Anschluss hat eine Geschwindigkeit von 50 Megabit je Sekunde. Wie lange dauert das Herunterladen einer Datei mit einer Größe von 100 Megabyte?

4.) Übertragung

Bei einer Übertragung mit gerader Parität erscheint am Empfänger die Bitfolge 00101001, danach das Paritätsbit mit dem Wert 0. War die Übertragung erfolgreich? Stellen Sie die Rechnung dar, die zu Ihrer Antwort führt.

5.) Asynchrone Kommunikation und Overhead

Eine Datei mit einer Größe von 100000 Bytes wird übertragen. a) Die Übertragung erfolgt über eine asynchrone Kommunikation in der Betriebsart 8N1. Wieviel zusätzliche Bits sind neben den Nutzdaten zu übetragen? b) Wie groß ist der prozentuale Anteil des Overheads, gemessen an den ingesamt übertragenen Bits?

Baudrate

Selbstrecherche

Recherchieren Sie selbstständig, was der Unterschied zwischen „Baudrate“ und „Bitrate“ ist. Beantworten Sie dann die folgenden Fragen.

Übungsaufgaben

1.) Bitrate

Ein Kommunikationssystem ist in der Lage, 4 verschiedene Symbole zu übertragen und hat eine Geschwindigkeit von 1 Symbol pro Sekunde. Was ist seine Bitrate? ______ bps

2.) Baudrate

Ein Kommunikationssystem ist in der Lage, mit 8 Bit 256 verschiedene Symbole zu übertragen und hat eine Geschwindigkeit von 12800 Bits pro Sekunde (bps). Was ist seine Baudrate?

______ bps

3.) Übertragung

Ein Kommunikationssystem ist in der Lage 2 verschiedene Symbole zu übertragen. Welche der folgenden Aussagen ist richtig? - Seine Baudrate ist höher als seine Bitrate - Seine Baudrate ist kleiner als seine Bitrate - Seine Baudrate und seine Bitrate sind gleich

4.) Symbolrate

Bei einer Übertragung werden Daten mit Hilfe eines Funksignales gesendet. Die Datenrate ist 12 Mbit/s, ein Datensymbol kann 8 Zustände annehmen. Wie hoch ist die Symbolrate?

Endliche Automaten

Übungsaufgaben

1.) Treppenhausbeleuchtung

Der folgende Zustandsautomat stellt eine Treppenhausbeleuchtung mit einem besonderen Effekt dar. Welche Aussage trifft zu? a) Wenn der Taster gedrückt wird, geht das Licht an und leuchtet weiß. Wenn man den Taster innerhalb von 3 Minuten noch einmal drückt, wird das Licht blau und geht nach 15 Sekunden aus. b) Wenn der Taster genau einmal gedrückt wird, geht das Licht an und leuchtet 3 Minuten weiß, danach 15 Sekunden blau und geht dann aus. c) Wenn der Taster genau einmal gedrückt wird, leuchtet das Licht zunächst 15 Sekunden blau und dann 3 Minuten weiß. Danach leuchtet es wieder 15 Sekunden blau und geht dann aus. d) Das Licht leuchtet in einer Endlossschleife 3 Minuten weiß und 15 Sekunden blau. Durch einen Tastendruck wird der Lauf der Schleife angehalten, durch einen weiteren Tastendruck wieder fortgesetzt.

2.) Endlichen Automaten entwerfen - Türöffner

a) Erstellen Sie einen endlichen Automaten für einen Türöffner mit zwei Tasten. Die erste Taste betätigt die Türklingel.Nur nachdem die Klingel betätigt wurde, wird die Türöffnertaste wirksam. Beim Drücken der Türöffnertaste ertönt der Summer. b) Erweitern Sie den Automaten aus Aufgabenteil a) so, dass ein verklemmter Klingelknopf erkannt wird. Wenn dieser mehr als 5 Sekunden gedrückt ist, soll eine rote LED aufleuchten, gleichzetig wird der Türöffner deaktiviert. Das System wird erst nach Loslassen des Klingelknopfes in seinen Ausgangszustand zurückversetzt.

3.) Endlichen Automaten in Programm umsetzen

Entwerfen Sie ein Arduino-Programm, das den in Selbsttest 8 entworfenen Automaten implementiert. Schreiben und testen Sie das Programm zunächst für Aufgabenteil 8 a), fahren Sie erst dann mit Teil b) fort.

4.) Endlicher Automat als Regex-Parser

a) Entwerfen Sie einen endlichen Automaten, der eine Temperatur in Grad Celsius einliest. Der zulässige Wertebereich sind ganze Zahlen zwischen −49 und +49. Das positive Vorzeichen muss immer mit angegeben werden. Einstellige Zahlen dürfen auch zweistellig mit führender 0 eingegeben werden.Beispiele für gültige Eingaben sind: −4 −09 +1 +05 b) Erweitern Sie den Automaten aus Aufgabenteil a) so, dass das positive Vorzeichen weggelassen werden darf, also Eingaben wie 2 oder 16 gültig sind.

5.) Regulärer Ausdruck

Entwerfen Sie einen endlichen Automaten, der die Eingabe einer Uhrzeit im 24-Stunden-Format überprüft. Die Stunden und Minuten sind durch einen Doppelpunkt getrennt. Nehmen Sie zur Vereinfachung an, dassbei den Stunden 0 bis 9 die Eingabe zweistellig als 00 bis 09 erfolgt. Beispiele: 09:23, 17:45 (Fertigen sie eine Skizze des Zustandsautomaten an und laden sie dann die Skizze als Bild hier hoch.)

Fortgeschrittene Aufgaben

Implementieren Sie einen Zähler, der mit drei Leuchtdioden die Zahlen von 0 bis 7 binär anzeigt. Eine ausgeschaltete LED zeigt ein 0-Bit an, eine eingeschaltete ein 1-Bit. Beim Starten beginnt der Zähler mit dem Wert 0, er wird im Sekundentakt jeweils um 1 hochgezählt. Sehen Sie drei Taster vor. Der erste hält den Zähler an, wenn er gedrückt wird. Bei nochmaligem Drücken läuft der Zähler weiter. Der zweite Taster setzt den Zähler auf 0 zurück. Der dritte Taster lässt den Zähler rückwärts laufen, bei nochmaligem Drücken wieder vorwärts. Implementieren Sie den Zähler als Zustandsautomaten. Überlegen Sie, welche Zustände es gibt und welche Übergänge zwischen den Zuständen auftreten können.

Zusatz: USB

Leseaufgabe

Bitte lesen Sie dieses Dokument aufmerksam und bearbeiten Sie im Anschluss die Übungsaufgaben.

Übungsaufgaben

1.) Flaschenhals

Eine externe Festplatte mit USB-Anschluss kann Daten mit 30 Megabyte je Sekunde liefern. Welche USB-Geschwindigkeitsklasse ist mindestens erforderlich, damit die Daten mit der vollen Geschwindigkeit der Festplatte an den Computer geliefert werden können, die Festplatte also durch die USB-Verbindung nicht „ausgebremst“ wird?

  • USB Lo Speed

  • USB Full Speed

  • USB High Speed

  • USB Super Speed

2.) Overhead

Nehmen Sie nun an, dass das USB-Protokoll einen Overhead von 10% aufweist. Welcher Datendurchsatz (in Mbit/sec) könnte mit der in Aufgabe 1 ausgewählten Geschwindigkeitsklasse maximal erreicht werden?

3.) Auslastung

Bestimmen Sie die Auslastung der USB-Verbindung, wenn (1) der in Aufgabe 1 angegebene Datendurchsatz der Festplatte und (2) der in Aufgabe 2 bestimmte maximale Datendurchsatz zugrunde gelegt werden. Unter Auslastung versteht man das Verhältnis der Werte (1) und (2). Geben Sie den Wert in Prozent an und runden Sie auf eine ganze Zahl.

4.) Dauer

Nehmen Sie an, dass eine 1000 Byte große Nachricht über eine USB-Full-Speed- Verbindung übertragen werden soll. Wie lange dauert es (in Mikrosekunden), bis ohne Berücksichtigung von Protokolloverhead sämtliche Bits der Nachricht übertragen wurden? Runden Sie auf eine ganze Zahl.

5.) USB

Welche Aussage über USB ist richtig? a) Es kann nur eine Station zu einem bestimmten Zeitpunkt senden. b) Über dieselbe Leitung kann Station A an Station B senden und gleichzeitig Station C an Station D. c) Wenn mehrere Stationen gleichzeitig senden, kann der USB-Controller die Nachrichten zwischenspeichern und dann nacheinander an die Zielstationen weitergeben.

Zusatz: String Funktion

Leseaufgabe

In diesem Dokument wird Ihnen eine neue Form gezeigt, Texte zu speichern.

Übungsaufgaben

1.) String 1

Gegeben ist folgender Code:

String myString="Dies ist ein Teststring 123.";
String mySubstring = "";
char zeichen = 0;
int zahl = 0;
int position = 0;
int laenge = 0;

a) mySubstring

Im Anschluss an obigen Code wird die Anweisung

mySubstring = myString.substring(24, 26);

ausgeführt. Was ist der Inhalt von mySubstring?

b) position 1

Die Anweisung

position = mySubstring.indexOf('3');

wird ausgeführt.

Was ist der Inhalt von position?

c) position 2

Die Anweisung

position = myString.indexOf('d');

wird ausgeführt.

Was ist der Inhalt von position?

d) zahl 1

Die Anweisung

zahl = myString.toInt();

wird ausgeführt.

Was ist der Inhalt von zahl?

e) zahl 2

Die Anweisung

zahl = mySubstring.toInt();

wird ausgeführt.

Was ist der Inhalt von zahl?

f) laenge 1

Die Anweisung

laenge = myString.length();

wird ausgeführt.

Was ist der Inhalt von laenge?

g) laenge 2

Die Anweisung

laenge = mySubstring.length();

wird ausgeführt.

Was ist der Inhalt von laenge?

2.) String 2

Gegeben ist folgender Codeschnipsel:

String erster_string = "abcdefghijklm";

String zweiter_string = "";

zweiter_string = erster_string.substring(3,8);

Was steht nach Ausführung des Codes in der Variablen zweiter_string?

Zusatz: AT-Kommandos

Leseaufgabe

Übungsaufgaben

1.) Datenübertragung Telefonnetz

Mit welchem Gerät erfolgte die Datenübertragung über das Telefonnetz?

  • Modem

  • Telefon

  • Fernseher

  • Fritzbox

2.) AT-Befehlssatz

Was war der ursprüngliche Zweck des AT-Befehlssatzes?

  • Die Weiterleitung von Telefonanrufen

  • Die Steuerung von Anrufbeantwortern

  • Die Steuerung von Modems

  • Die Steuerung von Computern

3.) Modem-Anbindung

Wie wurden Modems an den Computer angebunden?

  • Über ein WLAN

  • Über die serielle Schnittstelle

  • Das Modem war nicht am Computer angebunden, sondern am Telefonnetz

4.) Standard

Welcher Standard behandelt die Kommunikation über die serielle Schnittstelle?

  • WLAN

  • RS232

  • RS100

  • IEEE802.15.4

5.) Betriebsarten

Welches sind die zwei Betriebsarten bei der Benutzung von AT-Kommandos?

  • Download und Upload

  • Computer- und Telefonmodus

  • Daten- und Kommandomodus

6.) Datenmodus

Wozu dient der Datenmodus?

  • Telefonieren

  • Fernsteuerung eines Computers

  • Übertragung von Nutzdaten

  • Eingabe von Anweisungen zur Steuerung des Modems

7.) Kommandomodus

Wozu dient der Kommandomodus?

  • Eingabe von Anweisungen zur Steuerung des Modems

  • Übertragung von Nutzdaten

  • Telefonieren

  • Fernsteuerung eines Computers

8.) RING

Ein Computer empfängt die Steueranweisung RING von seinem Modem. Was bedeutet diese Anweisung?

  • Die Leitung ist besetzt.

  • Der Computer wird von der Gegenstelle angerufen.

  • Das Modem ruft die Gegenstelle an.

9.) Verbindung beenden

Welche der beiden Stationen kann eine laufende Verbindung beenden?

  • Nur die anrufende Station.

  • Nur die angerufene Station.

  • Beide Stationen.

Zusatz: Analog Read/Write

Leseaufgabe

Übungsaufgaben

1.) Spannung

In der Leseaufgabe wurde ein Poti mit dem analogen Eingang verbunden und der Wert des Eingangs auf dem seriellen Monitor ausgegeben. Passen Sie das Beispiel so an, dass es die Spannung ausgibt.

2.) LDR und Widerstand

In Ihrem Arduino-Kit sollte ein LDR (lichtabhängiger Widerstand) vorhanden sein. Bauen Sie folgende Schaltung auf. Der Widerstand in der Schaltung hat einen Wert von 10kΩ. Programmieren Sie Ihren Arduino so, dass es den Wert am A0 ausgibt. Um was für einen Aufbau handelt es sich bei der Kombination aus LDR und Widerstand?

3.) Spannung LDR und Widerstand

Basierend auf der Schaltung aus Übung 2: Welche Spannung wird mit dem Aufbau gemessen? Wo liegt diese Spannung an?

4.) Analoger Eingang

Basierend auf der Schaltung aus Übung 2:

Welche Werte liefert der analoge Eingang, wenn Sie a) den LDR verdunkeln b) den LDR einer Lichtquelle aussetzen?

5.) Helligkeit mit Poti regeln

Bauen Sie eine Schaltung, in der ein Poti an A0 und eine LED mit Vorwiderstand an GPIO 9 angeschlossen sind. Schreiben Sie ein Programm, welches die Helligkeit der LED in Abhängigkeit der Position des Potis regelt.

6.) A/D-Wandler

Eine Spannung zwischen 0 und 5 V soll durch einen A/D-Wandler gemessen werden. Der kleinste messbare Spannungsunterschied soll 20 mV sein.

Wieviel Bit muss der Wandler mindestens haben?

Es ist nicht erforderlich, dass der Wertebereich des Wandlers vollständig ausgenutzt wird.

Lösungen

Lösung zu Aufgabe 1.):

Umrechnung über den Faktor 4,9mV (siehe Leseaufgabe):

int sensorValue;
double voltage;
void setup() {
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(A0);
  Serial.print("Analog value:");
  Serial.println(sensorValue);

  voltage = 4.9*sensorValue/1000.0;
  Serial.print("Voltage:");
  Serial.println(voltage); 
  
  delay(200);
}

Lösung zu Aufgabe 2.):

Es handelt sich um einen Spannungsteiler, ähnlich einem Poti.

Lösung zu Aufgabe 3.):

Es wird die Spannung über den festen 10kΩ Widerstand gemessen.

Lösung zu Aufgabe 4.):

Die Werte hängen vom verwendeten LDR ab. Im Fall von a) werden die Werte kleiner, im Fall von b) größer.

Lösung zu Aufgabe 5.):

int sensorValue;

void setup() {
  Serial.begin(9600);
  pinMode(9, OUTPUT);
}

void loop() {
  sensorValue = analogRead(A0);
  analogWrite(9, sensorValue/4);  
  
  delay(200);
}

Zusatz: Software Serial

Leseaufgabe

Übungsaufgaben

1.) Übertragung testen

In der Leseaufgabe wurde beschrieben, wie zwei Arduinos mit Hilfe der Software Serial-Schnittstelle kommunizieren können. Falls noch nicht geschehen: Verbinden Sie die zwei Arduinos wie in der Leseaufgabe beschrieben und testen Sie die Übertragung.

2.) Passende Funktion

Es wird folgende Funktion benötigt: Es werden solange Daten von der Schnittstelle gelesen, bis ein bestimmtes Zeichen empfangen wird. Dann soll die gesamte Zeichenkette zurückgegeben werden. Recherchieren Sie: Welche Funktion gibt es dafür?

3.) Programm schreiben

Mit Ihrem Wissen aus Übung 2 sowie dem Aufbau aus Übung 1: Implementieren Sie folgende Funktionalität:

  • Auf dem ersten Arduino läuft das Programm aus der Leseaufgabe

  • Der zweite Arduino empfängt die Daten und schickt diese in Großbuchstaben zurück an den ersten Arduino

Schreiben Sie das entsprechende Programm für den zweiten Arduino.

4.) Recherche-Aufgabe

Welche der folgenden Aussagen ist korrekt? Recherchieren Sie.

  • println() hängt an die Ausgabe eine Kombination aus Wagenrücklauf- und Zeilenvorschubzeichen an (\r\n, <CR><LF>). Wird nur ein Zeilenvorschub (\n, <LF>) benötigt, sollte man die print()-Funktion verwenden und das Zeichen entsprechend anhängen.

  • println() hängt an die Ausgabe eine Kombination aus Zeilenvorschub- und Wagenrücklaufzeichen an (\n\r, <LF><CR>). Wird nur ein Zeilenvorschub (\n, <LF>) benötigt, sollte man die print()-Funktion verwenden und das Zeichen entsprechend anhängen.

  • println() hängt an die Ausgabe eine Kombination aus Zeilenvorschub- und Wagenrücklaufzeichen an (\n\r, <LF><CR>). Wird nur ein Zeilenvorschub (\r, <CR>) benötigt, sollte man die print()-Funktion verwenden und das Zeichen entsprechend anhängen.

  • println() hängt automatisch die im seriellen Monitor eingestellten Umbruchzeichen an. Probleme seitens des Programmierers sind nicht zu erwarten.

5.) Begrüßung

Schreiben Sie ein Programm, welches den Nutzer nach seinem Namen fragt und anschließend den Nutzer begrüßt. Verwenden Sie wieder die Kommunikation via SoftwareSerial. Es wird nur ein Arduino benötigt.

6.) Kommandoeingabe

Basierend auf Übung 5: Schreiben Sie eine Art Kommandoeingabe. Es gibt folgende Funktionen:

  • /login erlaubt es dem Benutzer sich anzumelden

  • /logout meldet den Benutzer ab

  • /time Gibt die aktuelle interne Zeit des Arduinos zurück. Diese soll nur ausgegeben werden, wenn sich der Nutzer vorher angemeldet hat.

7.) Software Serial

Welche Behauptung ist richtig?

Lösungen

Lösung zu Aufgabe 1.):

Daten werden erfolgreich zwischen beiden Arduinos übertragen.

Lösung zu Aufgabe 3.):

#include <SoftwareSerial.h>

SoftwareSerial softwareSerial(10, 11);

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  softwareSerial.begin(9600);
}

void loop() // run over and over
{
  String s = softwareSerial.readStringUntil('\n');
  s.toUpperCase();
  softwareSerial.println(s);
}

Erklärung zu Aufgabe 4.):

Es gibt mehrere Möglichkeiten, eine Zeile umzubrechen. Die klassische Kombination entspricht der Bedienung einer manuellen Schreibmaschine: der Wagen wird zurück geschoben und dann eine neue Zeile gestartet. Dies entspricht der Zeichenkombination bzw. \r\n. Diese Art des Umbruchs wird unter Windows verwendet. Linux-basierte Systeme verwenden nur das Zeichen für den Zeilenvorschub: \n bzw. . Ältere Versionen von MacOS verwenden nur den Wagenrücklauf: \r bzw. . Aus Gründen der Einfachheit fokussieren wir uns auf die Linux-Version und konzentrieren uns auf den Zeilenvorschub: \n. Jedoch muss beachtet werden, dass die Funktion println() noch ein weiteres Zeichen hinzufügt, welches ggf. ignoriert oder verworfen werden muss.

Lösung zu Aufgabe 5.):

#include <SoftwareSerial.h>

SoftwareSerial softwareSerial(10, 11);

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  softwareSerial.begin(9600);
}

void loop() // run over and over
{
  String s = softwareSerial.readStringUntil('\n');
  if (s != ""){
    s = "Hallo " + s + "!\n";
    softwareSerial.print(s);
  }
}

Lösung zu Aufgabe 6.):

#include <SoftwareSerial.h>

SoftwareSerial softwareSerial(10, 11);

void setup()
{
  Serial.begin(9600);
  softwareSerial.begin(9600);
}

bool userLoggedIn = false;

void loop()
{
  String s = softwareSerial.readStringUntil('\n');
  if (s != ""){
    // Daten empfangen
    if (s.startsWith("/login")){
      // 7: 6 Zeichen für "/login" + 1 Leerzeichen
      if (s.substring(7) == "meinPasswort"){
        softwareSerial.println("Korrektes Passwort");
        userLoggedIn = true;
      } else {
        softwareSerial.println("Falsches Passwort");
      }
    } else if (s.startsWith("/logout")){
      userLoggedIn = false;
      softwareSerial.println("Abgemeldet");
    } else if (s.startsWith("/time")){
      if (userLoggedIn){
        softwareSerial.print("Time: ");  
        softwareSerial.println(millis());
      } else {
        softwareSerial.println("Nicht angemeldet");
      }
      
    } else {
      softwareSerial.println("Unbekannter Befehl");
    }
  }
}

Last updated