Skip to content

Kommunikation

Rechnerarchitektur

In diesem Kapitel stellen wir eine kabelgebundene Kommunikation zwischen zwei micro:bit her. Dazu werden die micro:bit folgendermassen verbunden:

Die Übermittlung des Signals soll über den Anschluss 0 stattfinden. Dieser Anschluss wird im Programm durch die Variable pin0 repräsentiert. Mit den folgenden Unterprogrammen kann ein Signal gesendet bzw. empfangen werden:

pin.write_digital(value) schaltet den Pin ein oder aus. Der Pin wird eingeschaltet, wenn value den Wert 1 hat und ausgeschaltet, wenn value den Wert 0 hat.

pin.read_digital() überprüft, welche Spannung am Pin anliegt. Liefert 0 zurück, wenn eine Spannung von 0 V anliegt und 1, wenn eine Spannung von 3.3 V anliegt.

Tasten und Display

Das folgende micro:bit-Programm zeigt ein Herz auf dem Display an, solange die Taste A gedrückt wird:

python
from microbit import *

while True:
    if button_a.is_pressed():
        display.show(Image.HEART)
    else:
        display.clear()

Aufgabe: ✏️ Aufgabe Kommunikation 1

Sender: Erweitere das obenstehende Programm so, dass zusätzlich den Wert von pin0 auf 1 gesetzt wird, falls die Taste A gedrückt wird. Wird die Taste losgelassen, so wird der Wert von pin0 auf 0 gesetzt.

Empfänger: Ändere das obenstehende Programm so, dass das Herz angezeigt wird, falls pin0 den Wert 1 hat.

Mehrere Bits übermitteln

Mit der Lösung auf Aufgabe 1 kann ein Bit übermittelt werden. Um mehrere Bits zu übermitteln, muss der Sender dem Empfänger zusätzlich mitteilen, wann der Wert für ein Bit auf der Leitung übermittelt wird. Dazu wird eine zweite Leitung verwendet, welche als Takt bezeichnet wird. Indem der Sender auf der Taktleitung die Spannung von 0 V auf 3.3 V wechselt, signalisiert er dem Empfänger, dass nun der Wert auf der ersten Leitung gelesen werden soll. Die erste Leitung wird mit Daten bezeichnet.

Übermittlung mehrerer Bits mit Takt- und Datenleitung

Das obenstehende Diagramm zeigt den zeitlichen Verlauf einer Übermittlung mehrerer Bits.

  • Der Takt gibt an, wann ein Bit übermittelt wird, nämlich wenn die Taktleitung von 0 nach 1 wechselt.
  • Die Datenleitung gibt an was für einen Wert das übermittelte Bit hat.

Ablauf beim Sender

Um ein Bit zu übermitteln, muss der Sender zuerst die Taktleitung auf 0 setzen, damit der Empfänger nicht fälschlicherweise einen Wert liest. Danach setzt er die Datenleitung auf 1, falls das zu übermittelnde Bit gesetzt ist und sonst auf 0. Schliesslich setzt er die Taktleitung auf 1 und signalisiert so dem Empfänger, dass dieser die Datenleitung nun auslesen kann.

Der Sender muss sicherstellen, dass die Taktleitung jeweils eine bestimmte Zeit lang auf dem Wert 0 und auf dem Wert 1 fixiert ist, damit der Empfänger die Möglichkeit hat, den Wechsel festzustellen.

Ablauf beim Empfänger

Der Empfänger muss feststellen können, ob der Wert der Taktleitung von 0 auf 1 gewechselt hat. Dazu speichert er den zuletzt ermittelten Wert der Taktleitung in der Variable takt_vorher. Die folgenden Anweisungen werden immer wiederholt: Der Empfänger speichert den Wert der Taktleitung in der Variable takt. Falls die Variable takt_vorher den Wert 0 und die Variable takt den Wert 1 hat, liest er ein Bit aus der Datenleitung. Danach setzt er den Wert von takt_vorher auf den Wert von takt.

Aufgabe: ✏️ Aufgabe Kommunikation 2

Für diese Aufgabe benötigst du die folgenden Befehle:

button_a.was_pressed() überprüft, ob der Knopf seit dem letzten Aufruf heruntergedrückt worden ist.

sleep(ms) wartet für ms Millisekunden.

Sender: Schreibe ein Python-Skript, welches eine Liste von fünf Bits sendet, sobald der Knopf A gedrückt wird, z.B.

python
bits = [1, 0, 0, 1, 0]

Empfänger: Schreibe ein Python-Skript, welches Bits empfängt und mit folgenden Unterprogramm auf dem Display anzeigt:

python
x = 0

def bit_anzeigen(bit):
    global x
    display.set_pixel(x, 0, bit * 9)
    x = x + 1

Aufgabe: Aufgabe 3: Zahl übermitteln

Sender: Ändere das Programm, sodass beim Drücken der Taste A eine zufällige Zahl zwischen 1 und 6 erzeugt wird. Die Zahl soll als Byte codiert und an den Empfänger übermittelt werden.

Empfänger: Ändere das Programm so, dass die empfangenen 8 Bits zu einer Zahl zusammengesetzt werden. Die Zahl soll auf einer Segmentanzeige dargestellt werden.

Gymnasium Kirchenfeld, fts, lem & ros