mikrocontroller.net

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


Autor: Jörg Fischer (jones79)
Datum:

Bewertung
0 lesenswert
nicht 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:
...
JNIEXPORT void JNICALL Java_woehrbach_ParallelPort_writeOneByte
  (JNIEnv * algo, jclass otro, jint portData, jint oneByte)
{
if (ioperm(portData, 3, 1)){perror("ioperm error");}
outb(oneByte,portData);
  if (ioperm(portData, 3, 0)){perror("ioperm error");}
}

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

Autor: User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Port ist in den SPP-Modus geschaltet?

Autor: Jörg Fischer (jones79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ist er.

Autor: bko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
läuft evtl. noch ein Lineprinter Daemon auf
dem Port ?

Autor: Jörg Fischer (jones79)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.