将并行端口编程为数字 I/O

电器工程 平行线 港口 C++
2022-01-28 01:39:56

我正在尝试使用计算机的并行端口作为廉价数字输出的一种形式来执行各种操作(控制电机、LED 灯、读取限位开关等)。

我想知道如何使用 C++ 控制并行端口上的 8 个数据引脚,但是有一个问题。由于我使用的是具有现代操作系统的现代计算机,因此会出现一些问题。

首先,现代 Windows 操作系统不允许直接访问并行端口引脚,我必须通过驱动程序。有人指出我使用 Inpout32 来执行此操作,但是示例程序编译并正常运行,但我连接的硬件没有响应。另一个人指出我使用 Windows API。我搜索了 MSDN,发现只提到了适当的功能,但没有一些示例代码,我迷路了(也许我在错误的地方搜索)。

第二个问题是我的新电脑没有任何并行端口。我必须使用 USB 转并行端口(便宜且直接来自中国,每个 5 美元,包括运费和税费)。这些端口被计算机识别为 IEEE-1284 控制器,并且自动安装了相应的驱动程序,并且计算机报告该设备“正常工作”。从我在网上看到的情况来看,对于这些 USB 转并行端口连接器的实用性,似乎有各种各样的意见。一个人说它像焊接到主板上的任何常规并行端口一样工作得非常好,另一个人说它可以与一些硬件黑客一起工作,一个人说它可以写但不能读,最后另一个人说它根本不能工作,因为它们是并非设计为与“真正的”并行端口相同的工作方式。

在来这里之前,我已经做了大量的研究(我猜这是最后的手段,即使在申请赏金之后,StackOverflow 也没有给出任何答案)。我在并行端口编程中找到的几乎所有信息都已过时,并假定您的主板上有并行端口、Windows-NT 之前的操作系统或两者都有。

如果有人知道如何做到这一点,请与我分享吗?

谢谢,

- 伪造

注意:我在 Core i7 860 上运行 Windows 7 x64 操作系统。我在 Visual Studio 2008 pro 上使用 C++ 编程。USB 转并行端口连接器通过 USB 2.0 端口连接。

4个回答

并口已死,而 USB 微控制器确实是未来的 IMO。如果您使用 HID 或 CDC 配置文件,您甚至不需要 PC 上的任何驱动程序。例如 18 美元的Teensy,您可以获得 25 个 I/O,其中所有的 I/O 都可以用作数字 I/O,或者其中多达 12 个用作模拟输入,其中 7 个 PWM 通道。Teensy 更通用,如果您想要专门用于在 PC 和电子设备之间提供通信的设备,还有其他设备更针对此,例如Bus Pirate或者,如果您不需要太多的 I/O,您可以在“bit-bang”模式下使用标准的、相当简单的 FT232R USB 芯片,并从中获得 8 个数字 I/O。

如果你绝对不听理由,那么你需要的是一张PCI卡,它增加了一个并行端口,就像这个你需要一个 PCI 插槽(不是 PCI-Express),现在大多数主板仍然有一个,但它们开始被淘汰。

USB to Parallel 适配器会有各种各样的问题。主要的是延迟...标准并行端口延迟以微秒为单位,而 USB 延迟以毫秒为单位。另一个是许多 USB 到并行适配器仅设计用于打印机,并且缺少以您想要的方式单独控制地址线所需的额外电路。

使用当前技术,如果您想对多个离散 I/O 信号进行操作,最好的办法是修补专用的 USB 微控制器,或与 FTDI USB-to-232 接口耦合的标准微控制器。

老式的并行端口有多种形式,并不是所有的都可以输入,因为该端口主要用于将数据发送到打印机。只有几条握手线实际上专用于输入。如果您真的想使用 USB 并行端口,您应该寻找 EPP 或 ECP 变体,因为它们是双向的。

您尝试在 Windows 上执行此操作的事实使问题更加复杂。与硬件的直接交互虽然不是不可能的,但 HAL 严重复杂。我在 Linux 下使用 parapin 库完成了这项工作,但那是在主板上有真正并行端口的旧机器上。

查看windows 下 pyParallel的注释,似乎需要 giveio 驱动程序,这排除了使用 USB -> Parallel 适配器。

我将不得不同意上面的杰夫和乔比。去买一个 Arduino 或其他微控制器,用这种方式解决问题。

我想补充一点,我遇到的所有 USB 到并行端口适配器都不模拟并行端口,它们通过 USB 模拟打印机,因此不能用于它们各自的 IO 引脚。也许有些人可以按照您想要的方式执行此操作,但使用具有更多 IO(例如IO-Warrior或 Arduino)的 USB IO 解决方案肯定会更好。