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 einfache Textbefehle, was mit jeder beliebigen Programmiersprache auf jedem Betriebssystem funktioniert.

Ich habe drei Varianten von diesem Projekt:

Befehlssatz

Die Beispiel-App ioModule schaltet zwei Leuchtdioden ein und aus. Sie wurde mit dem Qt Framework erstellt.
Alle drei Varianten werden mit den gleichen Text-Kommandos gesteuert. Die Befehle bestehen jeweils aus einem Buchstaben, gefolgt von Parametern:

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

Die Befehle d, p, o und i können sich wahlweise auf einen einzelnen Pin, einen ganzen Port oder alle Ports gleichzeitig beziehen. Pin-Nummern werden immer als Dezimal-Zahl angegeben, und die Daten sind entweder binär (0/1) oder Hexadezimal.

Digitale Eingänge

Standardmäßig sind alle I/O Pins als Eingang. Der input Befehl liest den Eingang. Mit dem pull-up Befehl kann man die internen Pull-Up Widerstände einschalten.

Beispiel für das Lesen eines einzelnen Eingangs PB7 mit aktiviertem Pull-Up Widerstand:

Befehl:   pPB7,1
Antwort: Ok
Befehl:   iPB7
Antwort: PB7=1

Beispiel für einen ganzen Port PA am Stück (8 Pins):

Befehl:   iPA
Antwort: PA=FF

Beispiel für alle Ports auf einmal:

Befehl:   i
Antwort: i=000001FF

Die Hexadezimalzahl bezieht sich auf die Ports DD CC BB AA.
Bei größeren Mikrocontrollern ist sie doppelt so lang und bezieht sich auf die Ports HH GG FF EE DD CC BB AA.

Digitale Ausgänge

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 oder LOW setzen.

Beispiel für einen einzelnen I/O Pin PB4:

Befehl:   dPB4,1
Antwort: Ok
Befehl:   oPB4,1
Antwort: Ok
Befehl:   oPB4,0
Antwort: Ok

Beispiel für einen ganzen Port PB am Stück (8 Pins):

Befehl:   dPB,FF
Antwort: Ok
Befehl:   oPB,FF
Antwort: Ok
Befehl:   oPB,00
Antwort: Ok

Beispiel für alle Ports auf einmal:

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

Die größeren Mikrocontroller mit mehr Ports erwarten längere Hexadezimalzahlen für die Ports HH GG FF EE DD CC BB AA, aber ohne Leerzeichen dazwischen.

Analoge Eingänge

Das folgende Beispiel liest dann den analogen Eingang 3 ein:

Befehl:   a3
Antwort: ADC3=01A3

Das Ergebnis ist eine hexadezimale Zahl, entsprechend dem Messwert des ADC.

Je nach Mikrocontroller sind unterschiedliche Referenz-Spannungen einstellbar. Diese entspricht der höchsten Spannung, die man messen kann.

Das folgende Beispiel wählt die Versorgungsspannung VCC als Referenz:

Befehl:   rVCC
Antwort: Ok

  1. Standardvorgabe des Mikrocontrollers
  2. das ist 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 i Befehl abgefragt werden. Je nach Anzahl der Schieberegister antwortet der input Befehl mit unterschiedlich großen Hexadezimal-Zahlen (8-32 Bits). Zum Beispiel:

Befehl:   iPX
Antwort: PX=FFFF

Beispiel zur Abfrage eines einzelnen Pins X9:

Befehl:   iPX9
Antwort: PX9=1

Die Befehle d und p stehen bei erweiterten Eingängen und Ausgängen nicht zur Verfügung!

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 o Befehl beschrieben werden. Je nach Anzahl der Schieberegister erwartet der output Befehl unterschiedlich große Hexadezimal-Zahlen (8-32 Bits). Zum Beispiel:

Befehl:   oPY,FFFF
Antwort: Ok

Beispiel zum Ändern eines einzelnen Pins X12:

Befehl:   oPY12,1
Antwort: Ok

Die Befehle d und p stehen bei erweiterten Eingängen und Ausgängen nicht zur Verfügung!

Startseite