Archiv verlassen und diese Seite im Standarddesign anzeigen : Parallel Port Programmierung
Import-Script
14.11.2002, 18:08
Hallo Leute, <BR> <BR>wie kann man unter MS-Visual C++ 6.0 den Parallelport ansteuern? <BR> <BR>Vielen Dank! <BR> <BR>Ciao John <BR> <BR>PS.: unter Linux und Windows ist das mit dem GNU-C-Compiler ganz einfach. Nur gibt es diese Funktionen (ioperm, inb, outb etc...) nicht unter MS-VC6.0 <BR>
Import-Script
16.11.2002, 18:49
Für sowas gibt's zahlreiche DLLs im Internet z.B. vbio32.dll, um mal eine zu nennen...
Import-Script
29.11.2002, 15:40
ansonsten unter verwendung von assembler <BR>
Import-Script
25.03.2003, 22:14
kannst du mir ein beispiel mit assembler machen, wäre echt froh! Wir haben da mal was in der Schule gehabt. Aber der Borland ruft immer aus: <BR> <BR>asm <BR>{ <BR> MOV DX,378h <BR> MOV AL, 0 <BR> OUT DX, AL <BR>} <BR> <BR>Was ist daran falsch? <BR> <BR>mfg Tronic <BR>
Import-Script
02.04.2003, 21:52
Die geschweiften Klammern denke ich mal, oder es fehlt ein Semikolon oder so. Ich kanns nur von Pascal her sagen: der will <BR>asm <BR>und jetzt wird schon der Text grün. <BR>... <BR>... grüne Assemblerbefehle <BR>... <BR>end; <BR>dann gehts normal in Pascal weiter.
Import-Script
15.04.2003, 16:55
Hi, <BR> <BR>der parallelport wird mit Portadressen angesteuert und nicht mit Speicheradressen. Mit diesen Befehlen versuchst Du nur irgendwelche Speicherzellen zu verändern. Bei der kleinen Nummer wahrscheinlich sogar im Bios. <BR> <BR>Unter Windows muss man die Schnittstellen mit File-Befehlen ansprechen. Unter DOS-Umgebung bzw. Win98 und tiefer mit outportb(...,...); Lassen aber nur die älteren Compiler zu, da man heutzutage nicht mehr mit der Hardware rumspielen darf. <BR> <BR>Gruß <BR>Elmar
Import-Script
17.04.2003, 00:24
Unter Windows geht das selbst unter WinXYZ noch mit Uralt Routinen aus Win 2.x, und zwar genau wie die seriellen. <BR>Beispiel aus dem Borland Pascal 7.0 für Windows Hilfetext: <BR>Die interessante Stelle hab ich mit "<<<<<guckst du" mal gekennzeichnet. Beachte "PARALLELE" <BR>------------------------------------------------- <BR>function GetCommError(Cid: Integer; var Stat: TComStat): Integer; <BR> <BR>Die Funktion GetCommError ermittelt den letzten Fehlerwert und den aktuellen Status für das angegebene Gerät. <BR>Tritt ein Schnittstellenfehler auf, sperrt Windows die Schnittstelle, bis der Fehler durch die Funktion GetCommError behoben wird. <BR> <BR>-Parameter Beschreibung <BR> <BR>Cid Legt fest, welche Schnittstelle überprüft werden soll. Die Funktion OpenComm gibt diesen Wert zurück. <BR>Stat Zeigt auf eine TCOMSTAT-Datenstruktur, die den Gerätestatus aufnehmen soll. Ist dieser Parameter Nil, gibt die Funktion nur Fehlerwerte zurück. <BR> <BR>Rückgabewert <BR> <BR>Der Rückgabewert ist der Fehlercode des zuletzt ausgeführten Schnittstellenfunktionsaufrufs an das angegebene Gerät, wenn die Funktion erfolgreich ausgeführt wurde. <BR> <BR>Fehler <BR>Der Rückgabewert kann eine Kombination aus folgenden Werten sein: <BR> <BR>Wert Bedeutung <BR> <BR>CE_BREAK Die Hardware stellte eine Abbruchbedingung fest. <BR>CE_CTSTO Clear-to-send-Unterbrechung (time out). CTS war für die durch das Element fCtsHold der TCOMSTAT-Struktur festgelegte Dauer gelöscht, während gleichzeitig versucht wurde, ein Zeichen zu übertragen. <BR>CE_DNS Die parallele Schnittstelle war nicht gewählt. <<<<<<guckst du auch <BR>CE_DSRTO Data-set-ready-Unterbrechung. DSR war für die durch das Element fDsrHold der TCOMSTAT-Struktur festgelegte Dauer gelöscht, während gleichzeitig versucht wurde, ein Zeichen zu übertragen. <BR> <BR>CE_FRAME Die Hardware stellt einen Framing-Fehler fest. <BR>CE_IOE Ein I/O-Fehler trat während des Versuchs der Kommunikation mit einer parallelen Schnittstelle auf. <<<<<<und guckst Du hier <BR>CE_MODE Der gewünschte Modus wird nicht unterstützt, oder der Parameter Cid ist fehlerhaft. Ist der Parameter gesetzt, ist CE_MODE der einzig gültige Fehler. <BR>CE_OOP Gerät an der parallelen Schnittstelle meldet Papierende. <<<<<< guckst Du weiter <BR>CE_OVERRUN Ein Zeichen wird von der Hardware nicht rechtzeitig gelesen. Das Zeichen ist verloren. <BR> <BR>CE_PTO Bei der Kommunikation mit der parallelen Schnittstelle trat ein Timeout auf. <<<<<<<guckst Du <BR>CE_RLSDTO Receive-line-signal-detect-Unterbrechung. RLSD war für die durch das Element fRlsdHold der TCOMSTAT-Struktur festgelegte Dauer herabgesetzt, während gleichzeitig versucht wurde, ein Zeichen zu übertragen. <BR>CE_RXOVER Überlauf der Empfangswarteschlange. Entweder reicht der Platz in der Empfangswarteschlange nicht aus, oder die Übertragung wurde nach Erhalt des End-of-file-Zeichens fortgesetzt. <BR> <BR>CE_RXPARITY Die Hardware stellte einen Parity-Fehler fest. <BR>CE_TXFULL Die Sendewarteschlange war voll. Gleichzeitig wurde versucht, ein Zeichen zur Warteschlange hinzuzufügen. <BR> <BR>Siehe auch <BR>OpenComm <BR>TCOMSTAT <BR>User-Funktionen <BR>------------------------------------------------ <BR>Du musst also nicht mit inportb $378 oder sowas loslegen. Verwende die Funktionen, die sind bei jedem Compiler dabei... und dazu brauchst Du auch keine speziellen DLLs. Übrigens das läuft sogar unter NT einwandfrei, sollte also mit Win2000 / XP auch gehen. <BR>
Import-Script
21.04.2003, 17:03
Hallo zusammen, <BR>ich habe eine kleine Steuerung für den Parallelport geplant (also was ganz einfaches um 8 Transistroren zu schalten/steuern). Nun, ich konnte die Leerlaufspannung der Pins bestimmen. Aber wie groß der max. Strom sein kann, weiß ich nicht, und ich möchte nur ungern damit experimentieren da es direkt am PC angeschlossen wird. Gibt es da eine Faustformel oder so etwas in der Art? <BR>Ich danke alle in voraus <BR> <BR>MfG <BR>Terrex
Import-Script
21.04.2003, 20:53
Hi, <BR> <BR>am Sinnvollsten ist es, das Ausgangssignal des Ports mit TTL ICs zu puffern. So kann man einen genau definierten Strom entnehmen und bei Kurzschluß bennen höchstens die preisgünstigen TTLs durch. Falls man mehr als 5V verwenden will, nimmt man Open Collector Treiber. <BR> <BR>Sachau Dir am besten mal das Datenblatt zum 74LS245 an. Der puffert direkt 8-bit auf einmal. <BR> <BR>Gruß <BR>Elmar
Import-Script
22.04.2003, 20:02
@elmar <BR>ich habe heute meinen Lehrer gefragt wesswegen mein oben genanntes Beispiel nicht funktionierte. Und wir haben dann herusbekommen dass es fünktionieren würde, jedoch nicht auf win2000 und winXP! Auf win95 läuft es! <BR>Hier nochmal den Code: <BR> <BR>asm <BR>{ <BR>MOV DX,378h <BR>MOV AL, */byte wert der ausgegeben werden soll/* <BR>OUT DX, AL <BR>} <BR> <BR>Gruss marc
Import-Script
29.04.2003, 23:06
also es da es 16bit-code ist und es direkt auf die HW zugreift wird NT/2K sich weigern... <BR> <BR>die parallelle übrigens ich keine gute idee... allein schon weil win drucker sucht udgl.... <BR>besser USB oder die serielle... ich bevorzuge die serielle weil uart so ziemlich jeder controller hat ;) und ein kleiner avr mit einem kleinen progrämmchen der einfach die uart-bytes an ein port weitergibt....das is schnell gemacht... <BR> <BR>btw alles was direkte hw-aufrufe bedeutet wird scheisse baun... <BR> <BR>vielleicht geht aber ein createfile("\\.\LPT1".....); <BR>aber da wird wieder das handshaking scheisse baun also die parallele in den normal-mode schalten (bios) und nicht im schnellen ecp/epp mode... <BR>cya HG
Import-Script
30.04.2003, 14:02
@HGSTaBRF <BR>Dass der LPT-Zugriff unter Win2000/XP nicht funktioniert, hat nichts mit einem 16-Bit Programm zu tun, sondern schlicht damit, dass dieses Betriebssystem sich nicht so ohne weiteres in der Hardware rumpfuschen lässt. Das ist ja durchaus sinnvoll. <BR>Um unter Win2000/NT/XP auf den LPT-Port zugreifen zu können braucht man einen Treiber, wie weiter oben schon erwähnt, der die Portadresse in einen User-Bereich mapped. Auf diesen kann man dann zugreifen. Ich arbeite mit LabWindowsCVI, da ist schon so ein Treiber dabei, der automatisch gestartet wird. <BR>Ich hatte bisher noch keine Probleme damit, dass Win irgendwelche Drucker sucht. Ich denke eher, dass bei USB ständig was los ist (Plug'n'Play!). Ausserdem kann ich mit USB/COM und co keine Transistoren ansteuern oder Eingangssignale einlesen. <BR>Gruß Daniel
Import-Script
30.04.2003, 14:12
Klar kann man mit dem COM Port Transistoren steuern und Signale einlesen. Das ist doch Sinn der Sache! <BR> <BR>Alles nur eine Frage der verwendeten Hard- und Software.
Import-Script
19.06.2003, 22:08
Hi, <BR> <BR>probiere doch folgendes: <BR> <BR> <BR>#include <iostream> <BR>#include <conio.h> <BR>#include <windows.h> <BR> <BR>using std::cout; <BR>using std::cin; <BR> <BR>int main(int argc, char* argv[]) <BR>{ <BR> const int port = 0x378; <BR> <BR> <BR> cout << _inp(port) << "
"; // DATA <BR> cout << _inp(port + 1) << "
"; // BUSY, /ACK, PAPER EMPTY, SELECT, n.c. <BR> <BR> cout << _inp(port + 2) << "
"; <BR> <BR> int value; <BR> cout << "Gebe einen Wert an: "; <BR> cin >> value; <BR> <BR> _outp(port, value); // und jetzt ausgeben (DATA-Leitungen) <BR> <BR> _outp(port + 2, value); // /STROBE, /AUTO FEED, INT, /SELECT IN <BR> <BR> return 0; <BR>} <BR> <BR> <BR> <BR>Das war nur mal ganz grob... <BR> <BR>du kannst auch noch ein controll Register beschreiben (_outb(port + 1, xx) ), allerdings muss weiß ich gerade nicht was man da alles machen kann... <BR> <BR>cu, <BR>MB <BR> <BR> <BR>
Powered by vBulletin® Version 4.1.7 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.