Forum: PC-Programmierung ParallelPort/LPT1: Manche Bytes werden falsch übertragen


von Jörg F. (jones79)


Lesenswert?

Hi!

Ich will mittels Linux, Java und JNI einen Parallel Port ansteuern,
also die Datenleitungen.
Das funktioniert soweit ganz gut, allerdings werden nicht
alle Bytes richtig übertragen.

z.b. resultiert 33 in 255

Um das genauer zu untersuchen hab ich eine Schleife geschrieben,
die alle Werte von 0 bis 255 schreibt und anschließend ausliest.

Hier die Ausgabe (W= geschrieben, R: ausgelesen)

WriteData==ReadData for: 1 (1) - W:1 R:1
WriteData==ReadData for: 11111 (31) - W:31 R:31

Jetzt tritt das Problem auf:

WriteData==ReadData for: 100000 (32) - W:32 R:255
WriteData==ReadData for: 100001 (33) - W:33 R:255
WriteData==ReadData for: 100010 (34) - W:34 R:255
WriteData==ReadData for: 100011 (35) - W:35 R:255
WriteData==ReadData for: 100100 (36) - W:36 R:255
WriteData==ReadData for: 100101 (37) - W:37 R:255
WriteData==ReadData for: 100110 (38) - W:38 R:255
WriteData==ReadData for: 100111 (39) - W:39 R:255
WriteData==ReadData for: 101000 (40) - W:40 R:255
WriteData==ReadData for: 101001 (41) - W:41 R:255
WriteData==ReadData for: 101010 (42) - W:42 R:255
WriteData==ReadData for: 101011 (43) - W:43 R:255
WriteData==ReadData for: 101100 (44) - W:44 R:255
WriteData==ReadData for: 101101 (45) - W:45 R:255
WriteData==ReadData for: 101110 (46) - W:46 R:255
WriteData==ReadData for: 101111 (47) - W:47 R:255
WriteData==ReadData for: 110000 (48) - W:48 R:255
WriteData==ReadData for: 110001 (49) - W:49 R:255
WriteData==ReadData for: 110010 (50) - W:50 R:255
WriteData==ReadData for: 110011 (51) - W:51 R:255
WriteData==ReadData for: 110100 (52) - W:52 R:255
WriteData==ReadData for: 110101 (53) - W:53 R:255
WriteData==ReadData for: 110110 (54) - W:54 R:255
WriteData==ReadData for: 110111 (55) - W:55 R:255
WriteData==ReadData for: 111000 (56) - W:56 R:255
WriteData==ReadData for: 111001 (57) - W:57 R:255
WriteData==ReadData for: 111010 (58) - W:58 R:255
WriteData==ReadData for: 111011 (59) - W:59 R:255
WriteData==ReadData for: 111100 (60) - W:60 R:255
WriteData==ReadData for: 111101 (61) - W:61 R:255
WriteData==ReadData for: 111110 (62) - W:62 R:255
WriteData==ReadData for: 111111 (63) - W:63 R:255

Jetzt ist wieder alles normal:

WriteData==ReadData for: 1000000 (64) - W:64 R:64

Wieder falsch:

WriteData==ReadData for: 1011111 (95) - W:95 R:95
WriteData==ReadData for: 1100000 (96) - W:96 R:255
...
WriteData==ReadData for: 1111111 (127) - W:127 R:255
WriteData==ReadData for: 10000000 (128) - W:128 R:128

Normal...

Problem:

WriteData==ReadData for: 10011111 (159) - W:159 R:159
WriteData==ReadData for: 10100000 (160) - W:160 R:255
...
WriteData==ReadData for: 10111111 (191) - W:191 R:255
WriteData==ReadData for: 11000000 (192) - W:192 R:192
...
WriteData==ReadData for: 11011111 (223) - W:223 R:223
WriteData==ReadData for: 11100000 (224) - W:224 R:255
...
WriteData==ReadData for: 11111110 (254) - W:254 R:255

Meine JNI-Bibliotek sieht folgendermaßen aus:
1
...
2
JNIEXPORT void JNICALL Java_woehrbach_ParallelPort_writeOneByte
3
  (JNIEnv * algo, jclass otro, jint portData, jint oneByte)
4
{
5
if (ioperm(portData, 3, 1)){perror("ioperm error");}
6
outb(oneByte,portData);
7
  if (ioperm(portData, 3, 0)){perror("ioperm error");}
8
}

Ein Program, das ich in C geschrieben habe, mit denselben
Methoden wie die in der JNI-Bibliothek funktioniert einwandfrei.

Irgendwie gibt es ein Muster, wann Zahlen falsch übertragen werden.
Ich glaube, wenn die letzten Bits von 11111 auf 00000 springen,
dann werden, bis zum nächsten Wechsel von 11111 auf 00000 die Zahlen
falsch oder richtig übertragen.

Hat jemand von Euch eine Idee? Ich bin sowas von ratlos.
jones

von User (Gast)


Lesenswert?

Der Port ist in den SPP-Modus geschaltet?

von Jörg F. (jones79)


Lesenswert?

Ja, ist er.

von bko (Gast)


Lesenswert?

läuft evtl. noch ein Lineprinter Daemon auf
dem Port ?

von Jörg F. (jones79)


Lesenswert?

Hi!
Nein, kein LinePrinterDeamon.
Ok, hab noch ein bischen weiter recherchiert und probiert.
Jetzt hab ich mal im BIOS den Modus auf EPP/ECP gestellt
und ich weiß zwar nicht warum, aber es funktioniert bis jetzt
einwandfrei.

Viele Grüße,
jones

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.