PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Ansprechen des Parallel Ports



TobiTobsen
25.06.2008, 23:11
allo zusammen,
ich habe ein Problem beim ansprechen des Parallel Ports.

Ich habe die javacomm Api bereits auf meinem System. Ich denke das funktioniert auch.

Mein Ziel ist zunächst einmal einzelne Pins der Schnittstelle auf high (+5V) zu setzen. Allerdings habe ich so etwas noch nie mit Java gemacht und frage mich ob das überhaupt so geht. Genaugenommen solls erst einmal Pin 2 sein, also Datenbit 1.

Wenn ich mein kleines Programm laufen lasse, dann schickt er auf jedenfall Daten an meinen Parallelport, allerdings denkt er da wäre mein alter Drucker dran. Das heisst in der Drucker Liste in der alle Aufträge aufgeführt sind, erscheinen auch meine gesendete Bits.

Wenn ich die Schnittstelle an verschiedenen Pins durchmesse, dann liegt permanent eine gewisse Spannung (irgendwas um die 3,8V) an. Lasse ich mein Programm laufen und messe dabei, so stelle ich keinen Unterschied fest. Ich vermute mal mein Multimeter ist zu träge? Wobei ich auch dachte man könne die Pins länger auf high setzen.

Ich hänge meinen Code mal an, vll sind da schon grundlegende Fehler enthalten.




package test;

import java.io.*;
import javax.comm.*;

public class main {
static CommPortIdentifier portId;
static ParallelPort pPort;
static OutputStream outputStream;


public static void main(String[] args) {
boolean run = true;
try {
portId = CommPortIdentifier.getPortIdentifier("LPT1");
pPort = (ParallelPort) portId.open("Parallel Test", 1);
outputStream = pPort.getOutputStream();
} catch (Exception e) {
run = false;
}

if (run) {
for (int i = 0; i < 100; i++) {
try {
outputStream.write(1);
Thread.sleep(20);
} catch (Exception exc) {
System.out.println("Fehler :" + exc);
}

}
}

//
// int portType = portId.getPortType();
// String name = pPort.getName();
// int mode = pPort.getMode();
//

// System.out.println(name + " " + mode + " " + portType);

pPort.close();
}

}

Habe den Drucker jetz mal gelöscht, mit dem Erfolg das jetz auch diese Druckauftragsliste nicht mehr erstellt wird, allerdings klappt es jetz nicht mehr denn das Programm terminiert nicht mehr. Läuft und hört nich mehr auf.

Erwartet er vll irgenwie eine Antwort, Handshake oder so was?


Danke und Gruß,
Tobi

FeiaDragon
26.06.2008, 01:56
hey

also erstmal...ich persönlich kenne nur die rxtx lib für den seriellen/parallel port...also kann ich dir dazu nur empfehlen dir die libs anzuschauen. rs232 läuft bei mir da problemlos.

die bekommt man hier: http://www.jcontrol.org/download/rxtx_de.html

aber zu deinem programm:

wie hast du des hinbekommen dass das programm ewig läuft?
wenn keine exception geschmissen wird sollte das eigentlich nach 100 * 20 ms fertig sein.
ausserdem setzt du den port (obwohl ich bezweifle das outputStream.wirte(1); das macht) immer nur auf 1...nie auf 0.

das nur so vom prinzip her...
ich find auch gerade kein gutes beispiel für rxtx...aber versuch mal eine binäre zahl in den outputstream reinzuschieben, vielleicht setzt der das dann richtig.

viel erfolg,
kai

TobiTobsen
26.06.2008, 22:34
Also für alle die es interessiert, soweit scheint es zu funktioineren.

Ich habe folgendes gemacht:

- Pin1 (Data Strobe) mit Pin10 (ack) verbunden
- 11(busy), 12(paper end), 17( select in) auf GND

Jetz klappt es. Ich kann die einzelnen Bits dezimal setzten. Genauso brauch ich es.