Serielle Schnittstelle
Was sind Hardware-Schnittstellen?
Hardware-Schnittstellen werden benötigt, damit Rechner mit der Außenwelt
Daten austauschen können. Solche Schnittstellen werden beispielsweise benutzt, um Daten von
Tastatur und Maus zu übernehmen oder Daten an Bildschirm, Drucker und Lautsprecher weiterzugeben.
Sicher hast du auch schon die USB-Schnittstelle benutzt, um Daten von bzw. an externe Datenträger zu
übertragen.
Hardware-Schnittstellen begegnen uns in Form von Buchsen und Steckern, mit deren Hilfe die
Verbindung zum Innern
eines Rechners hergestellt werden.
Quelle: Wikimedia Commons
Hardware-Schnittstellen umfassen aber mehr als nur diese Buchsen und Stecker:
Eine Schnittstelle zur Hardware ist eine Hardwareeinheit (bestehend aus Leitungen und elektronischen Bauteilen), über die der Datenaustausch in die zentrale Verarbeitungseinheit eines Rechners erfolgt. Aufbau und Verhalten dieser Hardwareeinheit müssen in einer Schnittstellenbeschreibung genau festgelegt sein.
Schnittstellen werden auch benötigt, um Kommunikationsvorgänge mit und zwischen Rechnern zu realisieren. Wir werden im Folgenden hierzu die serielle Schnittstelle benutzen.
Serielle Schnittstelle
Bei einer seriellen Schnittstelle werden die Daten bitweise (d.h. Bit für Bit nacheinander) übertragen.
Die folgende Abbildung zeigt einen Stecker für eine serielle Schnittstelle.
Zu erkennen sind etliche Leitungen, die für verschiedenste Zwecke für den Datentransport zur Verfügung stehen.
Wir werden im Folgenden nur die sogenannten Handshake-Leitungen RTS und CTS für den Datentransport benutzen. Über die RTS-Leitung können Daten vom Rechner in die Außenwelt übertragen werden. Über die CTS-Leitung können Daten von der Außenwelt an den Rechner übergeben werden.
Die Datenbits werden dabei durch Spannungen zwischen der RTS- bzw. CTS-Leitung und der GND-Leitung repräsentiert: Die 0 wird dabei durch eine negative Spannung gegenüber der Masse-Leitung GND (etwa -12V), die 1 durch eine positive Spannung gegenüber der Masse-Leitung GND (etwa +12V) dargestellt.
Aufgabe 1
Die serielle Schnittstelle wurde hier gewählt, da sie technisch robust ist und softwareseitig leicht angesprochen werden kann. Daneben besitzt ein Computer noch einige andere Schnittstellen. Nenne einige Schnittstellen und zähle Nutzungsbeispiele der Schnittstellen auf.
Voraussetzungen für die Experimente
Die folgenden Experimente kannst du nur durchführen, ...
- ... wenn dein Rechner eine serielle Schnittstelle hat (oder du eine Zusatzkarte oder einen geeigneten Adapter benutzt),
- ... wenn du das unten beschriebene Anzeigegerät benutzt (oder auf andere Weise die Spannungen anzeigst),
- ... wenn du das Python-Modul pySerial installiert hast (s.u.).
Unser Anzeigegerät
Für unsere Experimente benutzen wir ein selbst gebautes Anzeigegerät, das direkt (oder über ein Verbindungskabel) auf den Schnittstellenstecker aufgesteckt wird.
Die LED ist hier so eingebaut, dass sie nur dann leuchtet, wenn die RTS-Leitung eine positive Spannung gegenüber der Masse-Leitung aufweist, d.h., wenn eine 1 gesendet wird.
Eine Anleitung zum Bau eines solchen Anzeigegeräts findest du hier.
Ein Python-Zusatzmodul
Die folgenden Experimente benutzen das Python-Modul pySerial.py. Dieses Modul ist kein Bestandteil einer Standardversion von Python und muss daher zusätzlich installiert werden. Wie das geht, findest du hier.
Ein Dialog mit der seriellen Schnittstelle
Zuerst musst du herausfinden, welchen Portbezeichner die benutzte serielle Schnittstelle hat.
Im Folgenden gehen wir davon aus, dass die serielle Schnittstelle den Portbezeichner 'com1' hat (bzw. die Portnummer 0 hat). Wenn die von dir benutzte serielle Schnittstelle einen anderen Portbezeichner hat, musst Du den folgenden Dialog dann entsprechend abändern.
Die serielle Schnittstelle kann jetzt im Dialog-Modus direkt angesprochen werden.
>>> from serial import Serial # die Klasse Serial des Moduls serial wird importiert
>>> s = Serial('com1') # ein Objekt s der Klasse Serial wird erzeugt und öffnet Port COM1
>>> s.getCTS() # CTS wird abgefragt
True
>>> s.setRTS(0) # RTS wird auf Pegel 0 (bzw. Low) gesetzt
>>> s.getCTS() # CTS wird abgefragt
False
...
>>> s.close() # die Schnittstelle wird geschlossen
Aufgabe 2
Führe selbst diese Versuche aus und beobachte die LED.
Zeitliche Abfolge von Signalen
Außer dem Pegel an sich muss auch dessen Dauer kontrolliert werden können.
Dazu nutzen wir die Funktion sleep
aus dem Modul time
.
Die Benutzung demonstriert das folgende Python-Programm:
from time import sleep
print("Hallo")
sleep(3)
print("wie")
sleep(3)
print("geht's?")
Aufgabe 3
Schreibe ein Programm, das die LED zum blinken bringt.