I/O Schnittstellen Module

Mit I/O Schnittstellen Modulen kann man elektrische Einrichtungen überwachen und steuern. Da PC's keine herkömmlichen Parallel-Ports mehr haben, stelle ich hier Ersatz mit alternativen Schnittstellen vor. Der Zugriff auf die I/O Ports erfolgt über textbasierte Standardprotokolle, was ohne spezielle Treiber mit jeder beliebigen Programmiersprache auf jedem Betriebssystem funktioniert.

Ich habe drei Varianten von diesem Projekt:

Befehlssatz

Alle drei Varianten werden mit Text-Kommandos gesteuert, zum Bespiel: oPA3,1

Die Befehle bestehen jeweils aus einem Buchstaben, gefolgt von dem gewünschten Pin oder Port. Bei Schreibzugriffen folgt dahinter ein Komma oder "=" Zeichen und dann der Wert.

Die ersten vier Befehle können sich wahlweise auf einen einzelnen Pin, einen ganzen Port oder alle Ports beziehen:

Jeder Befehl wird mit einem Zeilenumbruch (\n oder \r\n) beendet.

Digitale Eingabe

Standardmäßig sind alle I/O Pins als Eingang konfiguriert. Mit dem input Befehl fragt man den Zustand digitaler Pins ab. Beispiel für einen einzelnen Pin:

Befehl:   iPA7
Antwort: PA7=1

Beispiel für den ganzen Port A (8-Bit):

Befehl:   iPA
Antwort: PA=E7

Beispiel für vier Ports auf einmal (32-Bit):

Befehl:   i
Antwort: i=00FF01E7

Die Hexadezimalzahl bezieht sich auf die vier Ports DDCCBBAA. Bei größeren Mikrocontrollern ist sie doppelt so lang und bezieht sich auf die Ports HHGGFFEEDDCCBBAA.

Mit dem pull-up Befehl kann man die internen Pull-Up Widerstände einschalten. Beispiele:

Befehl:   pPA7,1
Antwort: Ok

Befehl:   pPA,FF
Antwort: Ok

Befehl:   pP,FFFFFF
Antwort: Ok

Auf Pins, die als Ausgang konfiguriert sind, hat der pull-up Befehl keine Auswirkung. Der input liefert bei Ausgängen den aktuellen Zustand der Pins.

Digitale Ausgabe

Zuerst muss man die gewünschten I/O Pins mit dem direction Befehl als Ausgang konfigurieren, danach kann man sie mit dem output Befehl auf HIGH und LOW setzen. Beispiel für einen einzelnen Pin:

Befehl:   dPA4,1
Antwort: Ok
Befehl:   oPA4,1
Antwort: Ok
Befehl:   oPA4,0
Antwort: Ok

Beispiel für den ganzen Port A (8-Bit):

Befehl:   dPA,FF
Antwort: Ok
Befehl:   oPA,FF
Antwort: Ok
Befehl:   oPA,00
Antwort: Ok

Beispiel für vier Ports auf einmal (32-Bit):

Befehl:   d,FFFFFFFF
Antwort: Ok
Befehl:   o,FFFFFFFF
Antwort: Ok
Befehl:   o,00000000
Antwort: Ok

Die Hexadezimalzahl bezieht sich je nach Länge auf die Ports DDCCBBAA oder HHGGFFEEDDCCBBAA. Auf Pins, die als Eingang konfiguriert sind, hat der output Befehl keine Auswirkung.

Analoge Eingabe

Das folgende Beispiel liest den analogen Eingang 3 mit dem analog Befehl ein:

Befehl:   a3
Antwort: ADC3=01A3

Das Ergebnis ist eine 16-Bit Hexadezimalzahl, entsprechend dem Messwert des ADC.

Je nach Mikrocontroller sind unterschiedliche Referenz-Spannungen einstellbar. Sie legt die höchste messbare Spannung fest.

Das folgende Beispiel stellt die 2.56 Volt als Referenz ein:

Befehl:   r2.56V
Antwort: Ok

  1. Standardvorgabe des Mikrocontrollers
  2. das ist die Versorgunsgspannung an VCC geteilt durch 1.6

Erweiterte Eingänge

Mit Hilfe von Schieberegistern kann man die Anzahl der Eingänge erweitern. Diese zusätzlichen Eingänge nenne ich "Port X". Sie können mit dem input Befehl abgefragt werden. Je nach Anzahl der Schieberegister antwortet der Befehl mit unterschiedlich langen Hexadezimalzahlen (8-32 Bits). Beispiel für 16 Bits:

Befehl:   iPX
Antwort: PX=25CF

Beispiel zur Abfrage eines einzelnen Eingangs X9:

Befehl:   iPX9
Antwort: PX9=1

Erweiterte Ausgänge

Mit Hilfe von Schieberegistern kann man die Anzahl der Ausgänge erweitern. Diese zusätzlichen Ausgänge nenne ich "Port Y". Sie können mit dem output Befehl beschrieben werden. Je nach Anzahl der Schieberegister erwartet der Befehl unterschiedlich lange Hexadezimalzahlen (8-32 Bits). Beispiel für 24 Bits:

Befehl:   oPY,FFFFFF
Antwort: Ok

Beispiel zum Ändern eines einzelnen Ausgangs Y0:

Befehl:   oPY0,1
Antwort: Ok

Alternative Zahlenformate

Hexadezimale Zahlen dürfen wahlweise mit kleinen und großen Buchstaben geschrieben werden.

Für binäre Zahlen kann man alternativ zu 0 und 1 auch diese Buchstaben in klein und groß verwenden:

lowhigh
inputoutput
disabledenabled
Startseite