Programando un puerto paralelo como I / O digital

7

Estoy tratando de usar un puerto paralelo desde una computadora como una forma de salida digital barata para hacer varias cosas (motores de control, luces LED, interruptores de límite de lectura, etc.).

Quiero saber cómo controlar los 8 pines de datos en un puerto paralelo utilizando C ++, sin embargo, hay un problema. Dado que estoy usando una computadora moderna con un sistema operativo moderno, esto presenta algunos problemas.

En primer lugar, los sistemas operativos modernos de Windows no permiten el acceso directo a los pines del puerto paralelo, debo pasar por un controlador. Se me ha indicado que use Inpout32 para hacer esto, sin embargo, el programa de ejemplo se compiló y se ejecutó correctamente, pero mi hardware adjunto no respondió. Otra persona me ha indicado que use la API de Windows. Busqué en MSDN y solo encontré menciones de la función apropiada, pero sin algún código de ejemplo, estoy perdido (tal vez estoy buscando en los lugares equivocados).

El segundo problema es que mi nueva computadora no tiene puertos paralelos. Debo usar USB para puertos paralelos (barato y directo desde China, $ 5 cada uno, gastos de envío e impuestos incluidos). La computadora reconoce los puertos como controladores IEEE-1284 y los controladores apropiados se instalaron automáticamente y la computadora informa que el dispositivo "funciona correctamente". Por lo que he visto en línea, parece haber una gran variedad de opiniones sobre la utilidad de estos conectores de puerto USB a paralelo. Una persona dice que funciona perfectamente bien como cualquier puerto paralelo convencional soldado a la placa base, otra dice que funcionará con algunos hacks de hardware, una dice que puede escribir pero no leer, y finalmente otra dice que no funcionará en absoluto porque son no está diseñado para funcionar de la misma manera que los puertos paralelos "reales".

Ya he investigado mucho antes de venir aquí (como último recurso, supongo, StackOverflow no dio ninguna respuesta, incluso después de aplicar una recompensa). Casi toda la información que encontré en la programación de puertos paralelos está desactualizada y se supone que tiene un puerto paralelo en su placa base, un sistema operativo anterior a Windows-NT o ambos.

Si alguien tiene alguna idea de cómo hacer esto, ¿podría compartirlo conmigo?

Gracias,

-Faken

Nota: Estoy ejecutando el sistema operativo Windows 7 x64 en un Core i7 860. Estoy programando en C ++ en Visual Studio 2008 pro. Los conectores de puerto USB a paralelo se conectan a través de puertos USB 2.0.

    
pregunta Faken

7 respuestas

8

El puerto paralelo está muerto y los microcontroladores USB son realmente la futura OMI. Si usa el perfil HID o CDC, ni siquiera necesita ningún controlador en su PC. Por ejemplo, Teensy por $ 18, obtiene 25 I / O, de las cuales todas se pueden usar como I / O digital, o Hasta 12 de ellos como entradas analógicas y 7 de ellos canales PWM. El Teensy tiene un propósito más general: si desea algo específicamente para proporcionar comunicación entre su PC y los dispositivos electrónicos, hay otros dispositivos orientados más hacia eso, como el Bus Pirate . O, si no necesita demasiadas E / S, puede usar el estándar, bastante sencillo FT232R Chip USB en modo 'bit bang' , y obtiene 8 E / S digitales de él.

Si se niega absolutamente a escuchar el motivo, entonces lo que necesita es una tarjeta PCI que agregue un puerto paralelo, como este uno . Necesitará una ranura PCI (no PCI-Express), la mayoría de las placas madre todavía tienen una en estos días, pero están comenzando a eliminarse gradualmente.

Los adaptadores USB a paralelo tendrán todo tipo de problemas. La principal es la latencia ... la latencia del puerto paralelo estándar se mide en microsegundos, mientras que la latencia del USB se mide en milisegundos. La otra es que muchos adaptadores USB a paralelo están diseñados solo para impresoras, y carecen de los circuitos adicionales necesarios para controlar individualmente las líneas de dirección de la forma que desee.

    
respondido por el davr
8

Con la tecnología actual, si desea operar con una serie de señales de E / S discretas, lo mejor es jugar con un microcontrolador USB dedicado o un microcontrolador estándar junto con una interfaz FTDI USB a 232.

Los puertos paralelos de la vieja escuela venían en una variedad de tipos, y no todos podían hacer entrada, ya que el puerto estaba diseñado principalmente para enviar datos a una impresora. Solo había un par de líneas de handshaking que en realidad estaban dedicadas a la entrada. Si realmente desea utilizar un puerto paralelo USB, debe buscar las variantes de EPP o ECP, ya que estas son de tipo bidireccional.

    
respondido por el JustJeff
3

El hecho de que esté intentando hacer esto en Windows complica aún más el asunto. La interacción directa con el hardware, aunque no es imposible, se ve seriamente complicada por la HAL. He hecho esto en Linux usando la biblioteca parapin, pero eso fue en una máquina más antigua con un puerto paralelo real en la placa base.

Mirando las notas de pyParallel under windows , parece que se requiere el controlador giveio, que descarta uso de un USB - > Adaptador paralelo.

Voy a tener que estar de acuerdo con Jeff y Joby arriba. Consigue un Arduino o algún otro microcontrolador y resuelve el problema de esa manera.

    
respondido por el ducksauz
1

Quizás estés mejor con un Arduino. Luego, puede comunicarse con la aplicación de su PC a través del enlace RS232.

No es mucho más caro que un adaptador de puerto paralelo USB.

    
respondido por el Toby Jaffey
1

Me gustaría agregar que todos los adaptadores de puerto USB a paralelo que he encontrado no emulan un puerto paralelo, emulan una impresora a través de USB y, por lo tanto, no se pueden usar para sus pines IO individuales. Quizás haya algunos que hagan esto de la manera que desee, pero seguramente estaría mejor con una solución de IO USB con muchos más IO, como IO-Warrior o un Arduino.

    
respondido por el penjuin
1

¿Está seguro de que conectó su dispositivo al puerto paralelo correctamente? ¿Recibió un pinout, se conectó al terreno correcto, etc.? Obtendría un oscope o un DMM, luego alternaría los 8 bits de datos cuando presionas una tecla del teclado y tratas de ver al menos que eso suceda.

¿Está utilizando la dirección correcta? La dirección predeterminada para los puertos paralelos soldados a la placa base (0x378, creo) probablemente no va a funcionar. Debe pasar por el nodo Puertos (COM y LPT) del Administrador de dispositivos, encontrar su adaptador paralelo USB-gt; pestaña de recursos, y encontrar la dirección base para su adaptador.

    
respondido por el ajs410
0

Los dispositivos USB no tienen una dirección base, no forman parte del espacio de direcciones de la CPU, al igual que un servidor en Internet no forma parte de su espacio de direcciones.

Y todo lo relacionado con los adaptadores de USB a paralelo ya se ha dicho en esta banda de rodadura, por lo general no funcionan para nada más que para imprimir.

    
respondido por el TheBug

Lea otras preguntas en las etiquetas