kramann.info
© Guido Kramann

Login: Passwort:










2.4 Senden und Empfangen via Parallelport

  • Wie bereits dargestellt, existieren neben den 12 Ausgängen auch 5 Eingangsbits beim Parallelport.
  • Nachfolgend sind Bedeutung und Pinnummer zu diesen Eingängen abzulesen.
  • Ferner ist zu sehen, wie die Bitbelegung bei Register 0x379 ist, wenn jeweils einer der Eingänge auf Masse gezogen wird.
  • Tatsächlich besitzen die Eingänge PC-intern Pullup-Widerstände.
  • Man benötigt also auch für die Beschaltung der Eingänge mit Tastern keine externe Spannungsquelle.
Dez   Bin       Taster  Pin Funktion  Hinweis
120   01111000  keiner  
112   01110000  S3      15  ERROR
104   01101000  S4      13  SELECT
 88   01011000  S5      12  PAPER-END
 56   00111000  S6      10  ACK
248   11111000  S7      11  BUSY      invertierend

Code 2.4-1: Ergebnis bei Register 0x379 beim Testen von Tastern, die an den 5 Eingängen des Parallelports angeschlossen sind.

  • Diese Ergebnisse lassen sich mit folgendem Testprogramm nachvollziehen:
#include<stdio.h>
#include<sys/io.h>
int lese()
{
    ioperm(0x379, 1, 1);
    return inb(0x379);
}
int main(int anz,char** args)
{
    int zahl_alt=0;
    int zahl=0;    
    int z;
    while(1)
    {
        zahl = lese();
        if(zahl!=zahl_alt)
        {
            zahl_alt = zahl;
            printf("%4i   ",(int)zahl);
            z=zahl;
            if(z>=128) printf("1"); else printf("0");  z%=128;
            if(z>=64) printf("1"); else printf("0");  z%=64;
            if(z>=32) printf("1"); else printf("0");  z%=32;
            if(z>=16) printf("1"); else printf("0");  z%=16;
            if(z>=8) printf("1"); else printf("0");  z%=8;
            if(z>=4) printf("1"); else printf("0");  z%=4;
            if(z>=2) printf("1"); else printf("0");  z%=2;
            if(z>=1) printf("1"); else printf("0");  z%=1;
            printf("\n");
        }   
    }
}

Code 2.4-2: Quellcode lesemuster.c, Kompilieren mit: gcc -O2 -o lesemuster lesemuster.c

Einbinden in Java

  • Die Einbindung in Java erfolgt analog zum vorangegangenen Kapitel.
  • Sinnvollerweise werden die Sende- und die Lesefunktion in eine einzige Klasse integriert.
  • Es werden im folgenden veränderten Dateien gegenüber dem vorangegangenen Beispiel angezeigt:
public class Parallelport
{
    static 
    {
        System.load("/mnt-system/parallellib.so");
    }
    public static native void sende(int zahl);
    public static native int  lese();
}

Code 2.4-3: Quellcode von Parallelport.java

#include<jni.h>
#include "parallel.h"
#include<sys/io.h>
JNIEXPORT void JNICALL Java_Parallelport_sende(JNIEnv *env, jclass clazz, jint zahl)
{
    ioperm(0x378, 3, 1);
    outb(zahl,0x378);
}
JNIEXPORT jint JNICALL Java_Parallelport_lese(JNIEnv *env, jclass clazz)
{
    ioperm(0x379, 1, 1);
    return inb(0x379);
}

Code 2.4-4: Quellcode von parallel.c

  • Das folgende Hauptprogramm schreibt den Zustand von Register 0x379 in das Register 0x378.
  • Damit werden einfach die 5 Eingangszustände am Ausgang des Parallelports sichtbar gemacht.
public class Main
{
    public static void main(String[] args)
    {
        int zahl;
        while(true)
        {
            zahl = Parallelport.lese();
            Parallelport.sende(zahl);
            try
            {
                Thread.sleep(10);
            }
            catch(Exception e)
            {
            }
        }
    }
}

Code 2.4-5: Quellcode zu Main.java

parallelinput.zip - Download obiger und der vorherigen Beispiele.
Übung - Hinarbeit auf einen PC/Linux/Java-geregelten Antrieb
  • Versehen Sie die Eingänge des Paralleladapters mit Tastern und einer Buchsenleiste, setzen Sie obiges Programm um und testen es.
  • Realisieren Sie eine Java-Anwendung samt Hardware, bei der über zwei Eingangstaster am Parallelport ein Servo am Parallelport bewegt werden kann. Nutzen Sie auch die Methode nanoTime() in der Klasse System.
  • Sehen Sie Ihre Anwendung als Javabean vor und versehen Sie über NetbeansIDE mit einem Schieberegler zur Manipulation des Servowinkels. Der Schieberegler ist ein eigenes Javabean. Ihre Anwendung könnte als sichtbares grafisches Element einfach einen Label haben.