Ich versuche, einen parallelen Anschluss von einem Computer als eine Form billiger digitaler Ausgabe zu verwenden, um verschiedene Dinge zu tun (Steuermotoren, Licht-LEDs, Endschalter zum Lesen usw.).
Ich möchte wissen, wie man die 8 Datenpins an einem parallelen Port mit C ++ steuert, aber es gibt einen Haken. Da ich einen modernen Computer mit einem modernen Betriebssystem verwende, gibt es einige Probleme.
Erstens erlauben moderne Windows-Betriebssysteme keinen direkten Zugriff auf parallele Port-Pins. Ich muss einen Treiber durchgehen. Ich wurde darauf hingewiesen, Inpout32 zu verwenden, aber das Beispielprogramm wurde kompiliert und ordnungsgemäß ausgeführt, aber meine angeschlossene Hardware reagierte nicht. Eine andere Person hat mich auf die Verwendung der Windows-API hingewiesen. Ich habe die MSDN durchsucht und nur Erwähnungen der entsprechenden Funktion gefunden, aber ohne Beispielcode bin ich verloren (möglicherweise suche ich an den falschen Stellen).
Das zweite Problem ist, dass mein neuer Computer keine parallelen Ports hat. Ich muss stattdessen USB für parallele Ports verwenden (billig und direkt aus China, jeweils 5 US-Dollar, Versand und Steuern inbegriffen). Die Ports werden vom Computer als IEEE-1284-Controller erkannt und die entsprechenden Treiber wurden automatisch installiert. Der Computer meldet, dass das Gerät ordnungsgemäß funktioniert. Nach dem, was ich online gesehen habe, scheint es eine Vielzahl von Meinungen über die Nützlichkeit dieser USB-Parallelanschlüsse zu geben. Eine Person sagt, dass es einwandfrei funktioniert wie jeder normale parallele Port, der an das Motherboard gelötet ist, eine andere sagt, dass es mit einigen Hardware-Hacks funktioniert, eine sagt, dass es schreiben, aber nicht lesen kann, und eine andere sagt, dass es überhaupt nicht funktioniert, weil sie es sind nicht so konzipiert, dass es genauso funktioniert wie "echte" parallele Ports.
Ich habe bereits viel recherchiert, bevor ich hierher gekommen bin (als letztes Mittel, denke ich, hat StackOverflow auch nach dem Anwenden eines Kopfgeldes keine Antworten geliefert). Fast alle Informationen, die ich zum Programmieren paralleler Ports gefunden habe, sind veraltet und setzen voraus, dass Sie entweder einen parallelen Port auf Ihrem Motherboard, ein Betriebssystem vor Windows NT oder beides haben.
Wenn jemand eine Idee hat, wie das geht, teilen Sie sie mir bitte mit.
Vielen Dank,
-Faken
Hinweis: Ich verwende Windows 7 x64 auf einem Core i7 860. Ich programmiere in C ++ unter Visual Studio 2008 Pro. Die USB-Parallel-Port-Anschlüsse sind über USB 2.0-Ports verbunden.
Antworten:
Die parallele Schnittstelle ist tot und USB-Mikrocontroller sind wirklich die zukünftige IMO. Wenn Sie das HID- oder CDC-Profil verwenden, benötigen Sie nicht einmal einen Treiber auf Ihrem PC. Zum Beispiel für den Teensy für 18 US-Dollar erhalten Sie 25 E / A, von denen alle als digitale E / A verwendet werden können, oder bis zu 12 davon als analoge Eingänge und 7 als PWM-Kanäle. Der Teensy ist ein allgemeinerer Zweck. Wenn Sie etwas speziell für die Kommunikation zwischen Ihrem PC und der Elektronik wünschen, gibt es andere Geräte, die eher darauf ausgerichtet sind, wie den Buspiraten . Wenn Sie nicht zu viele E / A benötigen, können Sie den standardmäßigen, recht einfachen FT232R-USB-Chip im Bit-Bang-Modus verwenden und 8 digitale E / A-Vorgänge ausführen.
Wenn Sie sich absolut weigern, auf die Vernunft zu hören, benötigen Sie eine PCI-Karte, die einen parallelen Anschluss wie diesen hinzufügt . Sie benötigen einen PCI-Steckplatz (nicht PCI-Express), die meisten Motherboards haben heutzutage noch einen, aber sie werden allmählich auslaufen.
USB-zu-Parallel-Adapter haben alle möglichen Probleme. Die wichtigste ist die Latenz ... Die Standardlatenz für parallele Ports wird in Mikrosekunden gemessen, während die USB-Latenz in Millisekunden gemessen wird. Das andere ist, dass viele USB-zu-Parallel-Adapter nur für Drucker entwickelt wurden und nicht über die zusätzlichen Schaltkreise verfügen, die erforderlich sind, um die Adressleitungen individuell nach Ihren Wünschen zu steuern.
quelle
Wenn Sie mit der aktuellen Technologie eine Reihe von diskreten E / A-Signalen bearbeiten möchten, basteln Sie am besten an einem dedizierten USB-Mikrocontroller oder einem Standard-Mikrocontroller, der mit einer FTDI-USB-zu-232-Schnittstelle gekoppelt ist.
Parallele Ports der alten Schule gab es in verschiedenen Varianten, und nicht alle konnten Eingaben vornehmen, da der Port hauptsächlich zum Senden von Daten an einen Drucker konzipiert war. Es gab nur ein paar Handshake-Zeilen, die tatsächlich der Eingabe gewidmet waren. Wenn Sie wirklich einen parallelen USB-Anschluss verwenden möchten, sollten Sie nach den EPP- oder ECP-Varianten suchen, da diese bidirektional sind.
quelle
Die Tatsache, dass Sie dies unter Windows versuchen, macht die Sache noch komplizierter. Die direkte Interaktion mit Hardware ist zwar nicht unmöglich, wird jedoch durch die HAL ernsthaft erschwert. Ich habe dies unter Linux mit der Parapin-Bibliothek gemacht, aber das war auf einem älteren Computer mit einem echten parallelen Port auf dem Motherboard.
Wenn man sich die Hinweise für pyParallel unter Windows ansieht , scheint es den giveio-Treiber zu erfordern, der die Verwendung eines USB -> Parallel-Adapters ausschließt.
Ich muss Jeff und Joby oben zustimmen. Besorgen Sie sich einen Arduino oder einen anderen Mikrocontroller und lösen Sie das Problem auf diese Weise.
quelle
Mit einem Arduino sind Sie vielleicht besser dran. Anschließend können Sie über die RS232-Verbindung mit Ihrer PC-Anwendung kommunizieren.
Es ist nicht viel teurer als ein USB-Parallelanschlussadapter.
quelle
Ich möchte hinzufügen, dass alle USB-Adapter für parallele Ports, auf die ich gestoßen bin, keinen parallelen Port emulieren, sondern einen Drucker über USB emulieren und daher nicht für ihre einzelnen E / A-Pins verwendet werden können. Vielleicht gibt es einige, die dies so tun, wie Sie es möchten, aber mit einer USB-E / A-Lösung mit viel mehr E / A wie einem IO-Warrior oder einem Arduino sind Sie sicherlich besser dran .
quelle
Sind Sie sicher, dass Sie Ihr Gerät richtig an den parallelen Anschluss angeschlossen haben? Hast du eine Pinbelegung bekommen, dich an den richtigen Boden angeschlossen usw.? Ich würde ein Oszilloskop oder ein DMM bekommen, dann alle 8 Datenbits umschalten, wenn Sie eine Taste auf der Tastatur drücken, und versuchen, zumindest das zu sehen.
Verwenden Sie die richtige Adresse? Die Standardadresse für mit Motherboard gelötete parallele Ports (0x378, glaube ich) wird wahrscheinlich nicht funktionieren. Sie sollten den Knoten Ports (COM und LPT) des Geräte-Managers durchlaufen, Ihren USB-> Paralleladapter auf der Registerkarte Ressourcen suchen und die Basisadresse für Ihren Adapter suchen.
quelle
USB-Geräte haben keine Basisadresse, sie sind nicht Teil des Adressraums der CPU, ähnlich wie ein Server im Internet nicht Teil Ihres Adressraums ist.
Und alles über USB-zu-Parallel-Adapter wurde bereits in diesem Profil erwähnt. Sie funktionieren normalerweise nur für das Drucken.
quelle