| Autor |
|
LPT-Port: 8 Datenbits LESEN im ECP/EPP-Modus!? |
|
|
|
|
BID = 35830
DanielM Gerade angekommen
Beiträge: 10
|
|
Hallo Elektronik-Fans!
Ich muss für ein kleines FH-Projekt 8 Werte in den PC einlesen. Dies möchte ich über den Parallen Port (LPT) des PC realsieren. Die 8 Datenbits schreiben funktioniert einwandfrei, das LESEN jedoch nicht.
Jetzt habe ich schon herausgefunden, dass man nur mit neuen LPT-Ports (ECP/EPP) die 8 Bits auch LESEN kann und nicht nur schreiben. Also habe ich kurzerhand in meinem Bios den Modus auf ECP/EPP geändert.
Leider liest mein Testprogramm aber immernoch einfach 0 und nicht z.B. eine 1, wenn ich +5V an Pin 2 von dem Sub-D-Stecker lege. Wo könnte mein Fehler liegen?
Danke für Eure Tipps! |
|
BID = 35833
Jornbyte Moderator
      
Beiträge: 7349
|
|
Unter WinNT, W2k und Xp ist das Lesen und Schreiben nicht so ohne weiteres möglich. Verrate uns mal dein verwendetes BS. Auch die Proggisprache währe Aufschlussreich.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten. |
|
BID = 35854
DanielM Gerade angekommen
Beiträge: 10
|
Zitat :
Jornbyte hat am 21 Okt 2003 21:11 geschrieben :
|
Unter WinNT, W2k und Xp ist das Lesen und Schreiben nicht so ohne weiteres möglich. Verrate uns mal dein verwendetes BS. Auch die Proggisprache währe Aufschlussreich.
|
Ich verwende Windoze XP und als Entwicklungsumgebung C#. Ausserdem habe ich eine Lizenz von NTPort.dll (http://www.zealsoft.com/ntport) über die ich entsprechende direkte input und output-Befehle auch unter XP habe.
Von daher liegt es vermutlich nicht an der Software, sondern an der Hardware, deshalb habe ich auch dieses Elektronikforum ausgewählt und keine Programmer-Newsgroup.
Daher vielleicht noch mal zu meiner Hardware: Ich habe im Bios ECP/EPP eingestellt. Und lege um eine 1 an dem jeweiligen Data-Bit zu empfangen, den +Pohl ab Pin2 (bis Pin9) und die Masse meiner 5V Stromquelle an die Pins 19-22 (sind wohl die Massen von Data1 bis Data8).
Aber wie gesagt: ich bekomme immer nur den Wert 0 beim Einlesen von der Adresse 378 (mein LPT-Port). 378 ist richtig, denn wenn ich an meine oben genannten Pins LEDs anlege und z.B. out(1) sende, leuchtet meine LED an Pin2 (Data1).
Please help - ich verzweifele hier noch...
|
BID = 35945
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
Zitat :
| | Und lege um eine 1 an dem jeweiligen Data-Bit zu empfangen, den +Pohl ab Pin2 (bis Pin9) und die Masse meiner 5V Stromquelle an die Pins 19-22 (sind wohl die Massen von Data1 bis Data8). |
1) Du solltest keinesfalls die Portpins direkt an Masse oder +5V legen, da durch diesen Kurzschluß die Transistoren im I/O-Chip zerstört werden können.
270-Ohm Widerstände begrenzen den Strom, der in den Port hinein- oder herausfließt auf einen ungefährlichen Wert.
2) SPP (steht auch in EPP zur Verfügung) ist für dich die richtige Betriebsart.
3) Zum Basisadresse 378h gehören ein (Read Only) Statusregister auf 379h und ein (Read Write) Steuerregister 37ah.
Die Bits im Statusregister, mit ihnen kannst Du die Statusleitungen des LPT abfragen:
7: /BUSY: Inverse of Printer Busy Signal, A logic "0" means that the printer is busy and cannot accept another character. A Logic "1" means that is ready to accept the next character.
6: /ACK: Printer Acknowledge, a logic "0" means that the printer has received a character and is ready to accept another. A logic "1" means that it is still processing the last character.
5: PE. Paper End, a logic "1" indicates a paper end.
4: SLCT. Printer selected, a logic "1" means that the printer is online.
3: /ERR. Printer Error Signal. A Logic "0" means an Error has been detected.
2:reserved
1:reserved
0:Timeout(nur EPP mode)
Im Control Register 37ah findest Du das PPDIR-Bit, mit dem Du den Port 378h als Eingang oder Ausgang umschalten kannst , und noch ein paar Signale die als Ausgänge am LPT landen:
7: reserved (1)
6: reserved (1)
5: PDDIR: Data port direction control, this bit determines the direction of the data port. Set this bit to "0 to output the data port to PD bus and "1" to input from PD-bus.
4: IRQE: Interrupt request enable, set this bit "1" to enable interrupt requests from the parallel port to the host and "0" to disable. An interrupt request ist generated by a "0" to "1" transition of the /ACK signal.
3: SLIN: Inverse of /SLIN pin, setting this bit "1" selects the printer.
2: INIT: Initiate printer, setting this bit "0" initializes the printer.
1: AFD: Inverse of the /AFD-pin, setting theis bit "1" causes the printer to automatically fees after each line is printed.
0: STB: Inverse of the /STB-pin, this pin controls the data strobe to the printer.
Die Betriebsarten EPP und ECP kann ich Dir nicht ohne weiteres empfehlen, da Du dazu tiefer in die Hardwareprogrammierung einsteigen müßtest. Falls Dich Details interessieren, findest Du sie in den Datenblättern der Super I/O Chips (obiges ist vom UM8663A).
Diese Datenblätter sind aber etwas voluminös weil diese Chips auch noch die seriellen Schnittstellen, den Floppy-Controller und das Interface für die IDE-Laufwerke beinhalten
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 36007
2SJ200 Schreibmaschine
     Beiträge: 1942 Wohnort: Österreich
|
frage: der kuzschlusstrom einer Centronic port datenleitung liegt ja teils bei satten 100mA - wenn man da mit 270Ohm nach masse geht, ob des die datenleitung beeindruckt?
|
BID = 36013
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
Was soll diese unsinnige Frage?
Es geht nicht darum den Chip zu beeindrucken oder die Bonddrähtchen zu schmelzen, sondern die Treibertransistoren abzuschalten, damit man den anliegenden Pegel lesen kann.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 36015
2SJ200 Schreibmaschine
     Beiträge: 1942 Wohnort: Österreich
|
ich bin davon ausgegangen dass beim LPT port die ausgänge alle auf HIGH geschaltet werden und dann von aussen gegn masse gezogen werden (per OC zB) und des wird dann eingelesen - da wärs aber fraglich ob du mit 270Ohm die leitung nach masse ziehen kannst, darum die frage - die is nicht ½ so unsinnig wie du meinst...
|
BID = 36073
DanielM Gerade angekommen
Beiträge: 10
|
Zitat :
|
perl schrieb am 2003-10-23 02:11
Im Control Register 37ah findest Du das PPDIR-Bit, mit dem Du den Port 378h als Eingang oder Ausgang umschalten kannst |
Hab jetzt mal 32 (für Bit 5, dem PPDIR-Bit) an 37a geschickt. Die LEDs die ich an meine Pins zur Kontrolle gelötet haben leuchten jetzt alle!? Zwar nicht so stark, als wenn ich die entsprechenden Bits bei 378 auf 1 setze, aber sie leuchten. Ist das nicht seltsam? Ich meine laut deinem Tipp, schaltet man über Bit 5 bei 37a ja nur von schreiben auf lesen?
Wenn ich (jetzt mit 330 Ohm Widerstand davor - hatte keine 270 Ohm) nun an die 8 Datenbits 5+ Volt lege leuchten die LEDs zwar heller, aber über 378 lese ich trotzdem nur 0xFF.
Ich bin schon wieder am verzweifeln
Muss das zu nächsten Dienstag am laufen haben... :-(
|
BID = 36093
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
Zitat :
| | war nicht so stark, als wenn ich die entsprechenden Bits bei 378 auf 1 setze, aber sie leuchten. Ist das nicht seltsam? |
Prima.
Der geringe Strom, der die LEDs jetzt zum Leuchten bringt, kommt aus den Pullup-Widerständen, die die Inputpins auf "1" bringen sollen, wenn nichts angeschlossen ist.
Und das ist auch die "1", die Du liest.
Der Eingang muß aktiv auf Masse gezogen werden (aber bitte nur über den Schutzwiderstand), damit Du die "0" lesen kannst.
Übrigens können Dir die LEDs u.U. den High-Pegel verderben. Daran solltest Du denken, wenn Du mal keine "1" findest, wo Du sie erwartest.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 36100
DanielM Gerade angekommen
Beiträge: 10
|
Zitat :
perl hat am 24 Okt 2003 15:08 geschrieben :
|
Der Eingang muß aktiv auf Masse gezogen werden (aber bitte nur über den Schutzwiderstand), damit Du die "0" lesen kannst.
|
Kannst du das bitte für einen Dummy erklären? Hab ich nämlich jetzt nicht verstanden. Wäre nett.
Zitat :
|
Übrigens können Dir die LEDs u.U. den High-Pegel verderben. Daran solltest Du denken, wenn Du mal keine "1" findest, wo Du sie erwartest.
|
Kann man da nichts gegen tun, weil es waere schon nett, wenn mir die LEDs visualisieren könnten, ob eine 1 oder 0 an dem jeweiligen Pin anliegt.
Aber die LEDs sind ersteinmal nicht so wichtig. Wichtiger ist obiges...
|
BID = 36154
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
In umgekehrter Reihenfolge:
Zitat :
| | Kann man da nichts gegen tun, weil es waere schon nett, wenn mir die LEDs visualisieren könnten, ob eine 1 oder 0 an dem jeweiligen Pin anliegt. |
Am einfachsten verwendest Du grüne LEDs, die haben eine höhere Durchlaßspannung als rote.
Oder Du schaltest jeweils zwei rote LEDs hintereinander. Dann werden die zwar nicht ganz so hell leuchten, aber der Logikpegel ist dann auf jeden Fall ok.
Zitat :
| Kannst du das bitte für einen Dummy erklären? Hab ich nämlich jetzt nicht verstanden. Wäre nett.
|
Schalte den Eingabeschalter mit einem Bein an Masse, mit dem anderen Bein über 220R an den LPT-Eingang.
Das sollte schon reichen, um mit dem geschlossenen Scahlter eine 0 eingeben zu könnnen.
Normalerweise benötigst Du nun noch einen Widerstand von etwa 4k7 bis 20k vom Schalter nach +5V, damit sich ein gesunder High-Pegel einstellen kann, aber dieser Widerstand scheint bei Deinem LPT-Port schon eingebaut zu sein.
Dann kontrollierst Du dein Werk mit einem Voltmeter, indem Du die Spannung zwischen Portpin und Masse überprüfst.
Den Port programmierst Du dazu als Eingang.
Wenn der Schalter geschlossen ist (0), muß die Spannung kleiner als 0,8V sein. Wenn der Schalter geöffnet ist (1), muß die Spannung mindestens 2V betragen.
Zwischn 0,8V und 2V liegt eine Grauzone, bei der man vorher nicht weiß, ob der Chip den Spannungswert als 0 oder als 1 ansieht.
Wenn Du den Port als Ausgang verwendest müssen die Schalter natürlich offen sein, sonst würden sie ja als Kurzchluß wirken.
Damit durch diesen Kurzschluß im Falle eines Falles dabei trotzdem nix kaputtgeht, habe ich die 220R Widerstände (330R sollten auch gehen) vorgesehen, die den Kurzschlußstrom begrenzen.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 36189
Jornbyte Moderator
      
Beiträge: 7349
|
Und so sieht es als Schaltung aus.
Hochgeladenes Bild : portpin.gif
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 36192
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
Genau.
Danke, Jörgen.
Womit hast Du das kleine Bildchen gemacht ? Ich konnte mich nicht überwinden das große Malprogramm anzuwerfen.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 36206
ET-Profi Neu hier

Beiträge: 30 Wohnort: Bückeburg
|
|
BID = 36222
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
Hab ich u.a. selbst. Ich meinte auch nicht das Layoutprogramm, sondern den Grabber oder was immer die paar Pixel extrahiert/konvertiert hat.
|