Acceso al puerto paralelo LPT – Algo Más que encender un LED o Imprimir un DOC

Durante más de medio año y sobre todo desde LatinoAmerica estoy recibiendo cantidad de solicitudes de ayuda para manejar el puerto paralelo del Ordenador y poder así activar relés que ponen en marcha cualquier tipo de artilugio eléctrico o electrónico. He sido reticente a escribir nada al respecto, pues consideraba que existen mil y una soluciones actuales tanto en HardWare como en SoftWare que permiten controlar motores, luces o cualquier tipo de mecatronica pero de forma profesional  con tecnología y medios actuales. Pensar el soluciones del tiempo de MS-DOS, me parece como menos equivocado siempre y cuando la finalidad no sea como ejercicio docente o como una forma de aprender y experimentar. Una vez entendida la declaración me complace compartir la siguiente explicación para contextualizar que encender un ‘led’ utilizando el puerto paralelo no es ningún logro, aunque sin despreciar la experiencia pueda ser divertido, teniendo en cuenta que la interacción con el sistema operativo es la que marcan los cánones a pesar de que de vez en cuando podamos hacerle un giño.  A demás no debemos olvidar que a día de hoy no todos los ordenadores incorporan la antigua especificación para el puerto paralelo.

Una de las características de la arquitectura x86 es el direccionamiento de dispositivos periféricos a través de un bus de entradas/salidas. Si nos remontamos en el tiempo, para la mayoría de los que utilizaron “Macro Assembler” o “C” en los tiempos de sistemas operativos como CP/M o MS/DOS, recordaran como nos hacíamos con el control de los dispositivos desviando los vectores de interrupción a nuestras rutinas y por supuesto comunicándonos directamente con los dispositivos a través de sus puertos mapeados en tal bus de E/S. Estamos hablando de dispositivos como el Teclado, Puerto Serie, Paralelo, Memoria, Timer, etc … ciertamente todos los dispositivos que componían la estructura básica de nuestro sistema. Por supuesto estábamos más que familiarizados con la utilización de las instrucción ‘in’ y ‘out’, ellas nos permitían enviar o recibir un byte utilizando un puerto (Mapa E/S) que conectaba directamente y permitía el intercambio de información con un periférico en concreto.

En esos tiempos los sistemas operativos estaban orientados a la ejecución mono-Usuario, Mono tarea, sin entorno grafico y con la única posibilidad de interaccionar a través de un ‘prompt’  por parte del usuario.

Con la llegada y evolución de los sistemas gráficos, multitarea, multiusuario para plataformas Intel, tuvieron que adaptarse a una arquitectura adecuada para tal cometido. Dicha arquitectura dicta las normas en las deben efectuarse las llamadas a  procedimientos, manejar las interrupciones y como no las excepciones, por citar algunas.

Dicho esquema, familiar para cualquier estudiante de informática como mecanismo de protección reconoce en forma de aros, en concreto cuatro aros concéntricos que representan cuatro niveles de privilegio del 0 al 3, la principal razón para usar ese esquema se vasa en mejorar la fiabilidad del propio sistema operativo.

Privilegios

El primer aro en el centro es utilizado por módulos de código que contienen partes vitales y criticas del sistema, por lo tanto disponen del nivel de privilegios más alto. El resto de módulos con menor nivel de privilegio solo pueden acceder al nivel superior a través de un estricto controlador llamado “puerta” o “gate”, intentar acceder a un segmento privilegiado de un nivel superior directamente o si utilizar la protección “gate” sin los suficientes permisos causara una excepción de protección general.

En nuestro entorno Intel/Windows, tuvimos la posibilidad de utilizar las instrucciones de ‘in’ ‘out’ tanto desde lenguajes como Asm, C y Basic y los sistemas operativos DOS, 95 y 98. Sin embargo con la tecnología NT, el uso de estas instrucciones por programas con privilegios de usuarios generaba la consecuente excepción en el sistema.

Cabe dejar claro que es del todo irreconciliable la mentalidad de acceder al puerto paralelo enviando un byte a la dirección de su puerto en un entorno como el nuestro. Difícilmente podemos justificar una programación orientada a controlar los dispositivos… ese tiempo ya paso y precisamente una de las tareas más eficientes que nuestro sistema operativo es capaz de llevar a cabo es ese control. No debemos perder la perspectiva que si necesitamos programar partes especificas que justifican ese nivel de privilegios, debemos utilizar las herramientas que nos facilita el fabricante del SO, tales como SDK, DDK..etc.  Es evidente que necesitamos una serie de conocimientos avanzados, para encajar nuestra pieza en todo este puzle, pero sin duda solo siguiendo esos patrones seremos capaces de construir soluciones profesionales aptas para superar las pruebas a nivel de los mercados a los que van dirigidos.

Advertencia y Aclaración.
Está claro que os facilito este articulo por vuestra insistencia, aunque debo advertiros que el mal uso del soldador con el conector de 25 al intentar realizar experimentos o utilizar inadecuadamente el puerto paralelo conectando aparatos o dispositivos inadecuados o incompatibles, puede causar averías en el equipo o en el peor de los casos daños personales, debo rechazar categóricamente cualquier responsabilidad por el uso de la información contenida, cualquier aplicación o uso derivada de la información de este artículo y su alcance es estrictamente responsabilidad del lector aunque estaré encantado de recibir vuestros comentarios.

En el caso que nos ocupa, para poder enviar o recibir un byte de puerto, necesitaremos estar dentro del anillo de ‘driver’ que nos proporcione los derechos de privilegio suficiente para realizar dicha operación. La mayoría de nosotros carecemos de los conocimientos suficientes para desarrollar un adaptador que nos permita fabricarnos nuestro propio ‘driver’ aunque podemos encontrar multitud de ejemplos en la red, existe una conocida librería llamada ‘inpout32.dll’ que viene a implementar ese ‘kernel model driver’. Podemos descargarnos esa librería desde un montón de ubicaciones, solo es necesario buscar ‘inpout32.dll DownLoad’ en la red y una vez dispongamos de ella copiarla en “\windows\system32”.

Luego solo nos restara crear un nuevo proyecto en Visual Studio e incluir nuestras referencias como sigue:

‘Declaraciones para leer/ecribir un puerto E/S utilizando inpout32.dll

Public Declare Function leer Lib «inpout32.dll» Alias «Inp32» _

       (ByVal puerto As Short) As Short

Public Declare Sub escribir Lib «inpout32.dll» Alias «Out32» _

       (ByVal puerto As Short, ByVal Valor As Short)

 

Finalmente en el evento clic del botón por ejemplo:

    ‘ Para la prueba de los led’s

    ‘ Conectar los led’s a traves de una resistencia.

    ‘ La resistencia debe soldarse a la masa en las

    ‘ patillas del conector de (25pins) correspondientes

    ‘ a los pines 19,20,21,22,23,24,25 (son todos masa).

    ‘ El otro extremo de la resistencia lo soldaremos al

    ‘ negativo del led, y el positivo del mismo a las

    ‘ patillas 2,3,4,5,6,7,8,9 que corresponden a la salida

    ‘ del registro de datos del puerto serie.

 

    Private Sub Button1_Click() Handles Button1.Click

        Static OnOff As Boolean = False

        ‘el puerto &h378 corresponde a la direccion

        ‘del registro ‘data’ del LPT1:

        If OnOff Then

            ‘Apagar todos los led’s

            escribir(&H378, &H0)

        Else

            ‘Encender todos los led’s

            escribir(&H378, &HFF)

        End If

        OnOff = Not OnOff

    End Sub

 

Luego para leer el estado de las líneas del registro de datos:

    Private Sub Button2_Click() Handles Button2.Click

        MessageBox.Show(leer(&H378))

    End Sub

 Saludos,
Pep Lluis,

62 pensamientos en “Acceso al puerto paralelo LPT – Algo Más que encender un LED o Imprimir un DOC”

  1. Hola Pep Lluis
    Esta super..^_^…Estoy desarrollando una aplicacion donde necesito un voltaje para activar un circuito…Necesito que me ayudes en saber cual es voltaje de salida del LPT… Gracias por tu respuesta

    Salu2,
    Solorzano Jonathan

  2. Hola Pep Lluis

    Gracias por tu pronta respuesta. Necesito nuevamente tu ayuda. Empese a trabajar en el proyecto, construi un circuito con los led y resistencia, luego lo conecte al puerto LPT y copie tu codigo y lo pegue. Mi aplicacion contiene un form, 2 botones, y la libreria llamada ‘inpout32.dll’ ubicada en “windowssystem32”. Aqui biene el problema =(, cuando lo probe y pulse el boton1 Mostro el siguiente mensaje:

    No se controlo SEHException
    Un componente externo produjo una excepcion

    Pasa lo mismo con el boton2. Ademas al conectar el circuito con el puerto LPT se enciende todos los leds, ¿Es normal esto?… Gracias por responder…
    Salu2,

    Solorzano Jonathan

  3. Hola Jonathan,
    Este ejemplo se hizo usando Visual Basic 9.0 en un sistema con Vista ambos con SP1. Para entender la excepcion deberias incluir un Try… Catch, y leer el texto de ex.message, de esa forma nos indicara que esta fallando.
    Saludos,
    Pep Lluis,

  4. hola a todos, si bien ustd conectan directamente un led con una resistencia ( de preferencia 330 ohm) , hay que tener algo en cuenta la proteccion del mismo puerto asi como de la misma pc, es necesario si o si (solo en el caso de enviar y recibir ) el uso obligatorio de un buffer de proteccion (como el ttl 74ls2455) ideal para estas aplicaciones , asi protehemos a la pc y a nuistro circuito externo.

    lo digo por que hice muchos proyectos con el puerto serial pero en c++, lo cual no difiere en lenguajes superiores e inclusive le manejo de dtos es mas sencillo. si desean alguna ayuda dejo mi correo.
    washi_w_z_r@hotmail.com

    saludos

  5. que tal, muy buen articulo, me puse a trabajar sobre el circuito y me marco el mismo error , quise registrar la dll en vb 2003 y no se dejo, me marco que no podia cargarse, por lo que me busque otra version de la dll hasta que funciono.

    prueben con esta versión:

    http://logix4u.net/Legacy_Ports/Parallel_Port/Inpout32.dll_for_Windows_98/2000/NT/XP.html

    saludos y espero que les sea de la misma utilidad como este articulo lo fue para mi.

  6. Hola que tal, tengo una duda respecto al programa, el programa envia un mensage de exeption cuando se pulsa sobre el boton1 y 2
    La forma para tratar las exepciones son con Try Cath pero no le entiendo nada al mensage que manda el mensage de error, que puedo hacer?

  7. Hola estoy relizando un proyecto para controlar una bombilla pero estoy probando unas cosillas, conecte un led directamente al cable del puerto lpt y cuando lo conecto al PC se enciende y no se apaga cuando le envio la señal.

    Es normal q se encienda desde que lo conecto??
    porque no se apaga??

    Gracias de ante mano por su ayuda…
    Rep. Dom.

  8. Gracias, pero tengo otro problem, este es con la aplicacion, uso Visual Basic 2005 Express y cuando corro la aplicacion bien,pero cuando invoco la funcion para escribirle un valor me arroja el sigueinte error:

    Titulo:
    No se Control MarshalDirectiveException

    Texto:
    Restricción PInvoke: no se pueden devolver variantes.

    Ventana de Inmediato:
    Excepción del tipo ‘System.Runtime.InteropServices.MarshalDirectiveException’ en LPT Send v1.0.exe

    Gracias de antemano.

    Rep. Dom.

  9. Fausto,
    Es dificil predecir que esta fallando, sin conocer que sistema operativo y que codigo estas rodando.
    Si quieres puedes mandarme mas informacion a traves de la opcion de [Contact] y vemos que podemos hacer.

    Saludos,

  10. Hola peplluis

    ayer te envie informacion acerca del tema que me pediste, no se si ya lo reciviste. aqui esta mi e-mail otra vez por si estava mal.

    me avisas si ya lo reciviste.

    Gracias por todo.

  11. Hola a todos! les comento que esoty realizando un proyecto utilizando visual basic 6 y he conseguido programar la hora de encendido y apagado de 8 focos, el plan es tener acceso remoto a la aplicación e instalarlo directamente en la casa pero tengo problemas para recibir datos por el puerto:
    -A partir de que voltaje reconoce?
    -Tiene que ser 5v exactos?hay medios del proteccion?
    -Con librerias io.dll es suficiente?
    -Como se leen los valores en la entrada?
    Porfavor, cualquier ayuda sería de gran utilidad.
    Saludos,
    José.

  12. Hola Peplluis:

    He estado buscando información sobre un error que presenta mi programa de prueba para encerder 8 leds por el puerto paraleloy he seguido las indicaciones que das en este foro, ya tengo el circuito listo y conectado a la PC he corrido programas de la RED y funciona, sin embargo cuando corro el mio genera el siguiente error «Excepción del tipo ‘System.Runtime.InteropServices.SEHException’ en Puerto Paralelo.exe» tengo Windows XP y el codigo es el siguiente, es pequeño ya que es una prueba:

    Public Class Form1
    Public Declare Function Inp Lib «INPOUT32.dll» Alias «Inp32» (ByVal PortAddress As Integer) As Integer
    Public Declare Sub Out Lib «INPOUT32.dll» Alias «Out32» (ByVal PortAddress As Integer, ByVal Value As Integer)
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Out(&H378, 10)

    End Sub
    End Class

    Ojala puedas orientarme.

    Gracias

  13. El siguiente codigo genera el mensaje de error «Excepción del tipo ‘System.Runtime.InteropServices.SEHException’ en Puerto Paralelo.exe»

    Public Class Form1
    Public Declare Function Inp Lib «INPOUT32.dll» Alias «Inp32» (ByVal PortAddress As Integer) As Integer
    Public Declare Sub Out Lib «INPOUT32.dll» Alias «Out32» (ByVal PortAddress As Integer, ByVal Value As Integer)
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Out(&H378, 10)

    End Sub
    End Class

  14. Hola Peplluis, veo que eres muy bueno en esto de utilizar el puerto paralelo ojala puedas orientarme con un error que genera mi programa de prueba, el error es el siguiente «Excepción del tipo ‘System.Runtime.InteropServices.SEHException’ en Puerto Paralelo.exe», mi correo es jcmartinez_21@hotmail.com, intente escribir mas información por este medio pero hay limites.

    Saludos

  15. Hola, estoy tratando de realizar un ejercicio con puerto paralelo, se trata de comunicar 2 pc’s a traves del puerto lpt1, (un tipo chat), lo estoy realizando en C por que asi es conveniente, pero realmente no puedo enviar y recibir, no se si estoy utilizando la configuracion exacta del cable null modem, ahora con respecto al ejecicio del los leds, yo ya lo realice correctamente en Visal Basic 6.0, y me funciono muy bien, el que necesite el odigo que me lo solicite y se los hacer llegar a su correo…

    Espero que alguien me pueda ayudar con el codigo de mi ejercicio. de antemano les doy las gracias…

    Francisco Arreola (arreolafco@hotnail.com)

  16. saludos, en una ocasion me ayudo, le vuelvo a molestar pidiendole ayuda, necesito como he puesto de titulo prender un led con la orden de una lectura de algun dato en los pines de entrada, no se en los pines de ntrada del puerto paralelo deben quedarse unidos, o como es digital debe ser instantaneo el contacto que haga el swicht, y tambien si se les puede meter datos de 0 voltios tierra o solo leen de 5 voltios, el programa deseo hacerlo en visual basic 6.0, estoy utilizando la libreria IO.dll ya que la input 32 me dio problemas, le agradesco de antemano su respuestas.

    Marco
    Ecuador

  17. hola como hago para que los pines 2,3,4 sea los que quiero se gun este codigo
    2= data 3= clock 4= enable esto es para con trolar un pll con lpt en vb

    Sub UpdateNDivider()
    ‘Used to calculate Binary value
    Dim Digits ‘Number of Binary digit to S and N divider
    Dim BinValue ‘Binary value
    Dim TempValue
    Dim DecValue ‘Decimal value

    ‘Calculate Binary value for Swallow Counter
    DecValue = Val(SValue)
    BinValue = «»
    Do
    TempValue = DecValue Mod 2
    BinValue = CStr(TempValue) + BinValue
    DecValue = DecValue 2
    Loop Until DecValue = 0
    SDivider = BinValue

    ‘Calculate Binary value for NDivider
    DecValue = Val(NValue)
    BinValue = «»
    Do
    TempValue = DecValue Mod 2
    BinValue = CStr(TempValue) + BinValue
    DecValue = DecValue 2
    Loop Until DecValue = 0
    NDivider = BinValue

    ‘Used to transmit Swallow Counter digit to PLL
    Dim c As Integer
    Dim d As Integer
    ‘Used to transmit NCounter digit to PLL
    Dim e As Integer
    Dim f As Integer

    ‘ Send NDivider value to PLL Bit = 8 < 18 For e = 1 To (12 < Len(NDivider)) 'If number of Binary <14 digit PortOut OutPort, 0 'Set Data Low. PortOut OutPort, 1 'Set Clock High. PortOut OutPort, 0 'Set Clock and Data Low. Next e For f = 1 To Len(NDivider) Digits = Mid$(NDivider, f, 1) If Digits = 0 Then PortOut OutPort, 0 'Set Data Low. If Digits = 0 Then PortOut OutPort, 1 'Set Clock High. If Digits = 0 Then PortOut OutPort, 0 'Set Clock and Data Low. If Digits = 1 Then PortOut OutPort, 2 'Set Data High. If Digits = 1 Then PortOut OutPort, 3 'Set Clock High. If Digits = 1 Then PortOut OutPort, 0 'Set Clock and Data Low. Next f 'Send SCounter value to PLL Bit = 1 < 7 For c = 1 To (7 < Len(SDivider)) 'If number of Binary <7 digit PortOut OutPort, 0 'Set Data Low. PortOut OutPort, 1 'Set Clock High. PortOut OutPort, 0 'Set Clock and Data Low. Next c For d = 1 To Len(SDivider) Digits = Mid$(SDivider, d, 1) If Digits = 0 Then PortOut OutPort, 0 'Set Data Low. If Digits = 0 Then PortOut OutPort, 1 'Set Clock High. If Digits = 0 Then PortOut OutPort, 0 'Set Clock and Data Low. If Digits = 1 Then PortOut OutPort, 2 'Set Data High. If Digits = 1 Then PortOut OutPort, 3 'Set Clock High. If Digits = 1 Then PortOut OutPort, 0 'Set Clock and Data Low. Next d 'Send Control-bit LSB Control -Bit = 0 PortOut OutPort, 0 'Set Data Low PortOut OutPort, 2 'Set Clock High PortOut OutPort, 0 'Set all bit Low 'Send LE PortOut OutPort, 4 'Set EN High PortOut OutPort, 0 'Set all bit Low End Sub Sub UpdateRDivider() 'Used to calculate Binary value Dim Digits 'Number of Binary digit to R divider Dim BinValue 'Binary value Dim TempValue Dim DecValue 'Decimal value 'Calculate Binary value DecValue = Val(RValue) BinValue = "" Do TempValue = DecValue Mod 2 BinValue = CStr(TempValue) + BinValue DecValue = DecValue 2 Loop Until DecValue = 0 RDivider = BinValue 'Send Prescaler Control bit to R-divider Bit = 15 'Control -Bit = 1 PortOut OutPort, 2 'Set Data High PortOut OutPort, 3 'Set Clock High. PortOut OutPort, 0 'Set all bit Low 'Used to transmit digit to PLL Dim i As Integer Dim j As Integer 'Send Reference Divider value to PLL Bite = 1 < 14 For j = 1 To (13 < Len(RDivider)) 'If number of Binary <14 digit PortOut OutPort, 0 'Set Data Low PortOut OutPort, 1 'Set Clock High. PortOut OutPort, 0 'Set Clock and Data Low. Next j For i = 1 To Len(RDivider) Digits = Mid$(RDivider, i, 1) If Digits = 0 Then PortOut OutPort, 0 'Set Data Low. If Digits = 0 Then PortOut OutPort, 1 'Set Clock High. If Digits = 0 Then PortOut OutPort, 0 'Set Clock and Data Low. If Digits = 1 Then PortOut OutPort, 2 'Set Data High. If Digits = 1 Then PortOut OutPort, 3 'Set Clock High. If Digits = 1 Then PortOut OutPort, 0 'Set Clock and DataLow. Next i If SValue = 128 Then PortOut OutPort, 0 'Set Data Low. If SValue = 128 Then PortOut OutPort, 1 'Set Clock High. If SValue = 128 Then PortOut OutPort, 0 'Set Clock and Data Low. If SValue = 64 Then PortOut OutPort, 2 'Set Data High. If SValue = 64 Then PortOut OutPort, 3 'Set Clock High. If SValue = 64 Then PortOut OutPort, 0 'Set Clock and DataLow. 'Send Control-bit LSB Control - Bit= 1 PortOut OutPort, 1 'Set Data High PortOut OutPort, 3 'Set Clock High PortOut OutPort, 0 'Set all bit Low 'Send LE PortOut OutPort, 4 'Set EN High PortOut OutPort, 0 'Set all bit Low End Sub

  18. A ver si me pueden ayudar, como sería el código para prender los led por separado no todos juntos.

    otra cosa que necesito saber es como puedo hacer para que con esos 5v habilitar el paso de corriente eléctrica?

    quiero prender diferenes electrodomesticos de mi casa con código .NET

  19. Hola Ibarra,
    Lamentablemente no, aunque si lo vas a trabajar en C… puedes utilizar los pragmas #_Asm y lanzar directamente el Out al puerto 378.

    Saludos,
    Pep Lluis,

  20. Hola, soy nueva en esto del uso del pueto paralelo, mi computadora no cuenta con este puerto por lo que instale una tarjeta externa para puerto paralelo la cual me la detecto como lpt3, estoy haciendo un programa en el cual solo necesito mandar una salida y mando en metodo salir (EC00, 255) con esa información, el EC00 debido a que esa dirección me aparece al buscar la direccion del lpt3 y el 255 para mandar la salida. Al correrlo me manda un mensaje de: Un componente externo inicio una excepcion.
    No se como solucionar este problema si me pueden ayudar se los agradeceria mucho, estoy trabajanco con c# vs2003. Gracias =)

  21. Hola Ifvel,

    Entiendo que estas utilizando Inpout32?… que excepcion te esta mandando?

    Espero tus noticias, o contacto a traves de la opcion [Contact] de esta pagina (Margen Izquierdo en la parte superios)

  22. Hola! segui buscando en la web y probe con distintas versiones de dll que encontre, y al parecer era eso, al final de cuentas funciono correctamente =D la verdad no supe ni con cual inpout32 fué =S pero logré que funcionara.. Muchas gracias de igual manera =D

  23. hola queria saber como prender 2 focos al mismo tiempo , ya que estoy haciendo un semaforo con 2 caras, pero solo puedo prender una cara, mientra sk la otra no lo hace

  24. HOLA. PODRIAS AYUDARME CON LA LECTURA EN PUERTOS DE ENTRADA, ESTOY TRABAJANDO EN UN PROYECTO DE MEDIDOR DE NIVEL DE AGUA. TENGO TRES LEDS QUE INDICAN EL NIVEL DEL AGUA. PERO COMO PUEDO LEER CUAL DE LOS 3 LEDS SE ENCENDIO.

  25. hola pep muy buen articulo navegando por google me lo encontre tratando de aprender mas sobre el puerto .
    me podrias ayudar con una duda que tengo,
    quiero recibir señales del exterior al puerto paralelo por los pines de estado mi duda es si usted sabe que corriente maxima soporta el puerto se que el voltaje max son 5v pero no encuentro nada sobre la corriente tenes idea que corriente maxima entrega el puerto ?. veo que algunos conectan D0-D7 – LED – RESISTENCIA – MASA ,
    ES LO MISMO QUE D0-D7 – RESISTENCIA – LED – MASA ? gracias

  26. hola como eta porfavor queria saber si u me puede ayudar en lo siguiente, la idea es hacer un diplay la interfaz en VB 6.0 y el display con leds lo cuales van ir en una plca manipulkado con el puerto paralelo, lo que necesito es ingresar un texto simple yo que se puede ser una palabra cualquiera y que al presionar en un boton me muestre ese texto en el display tanto de la interfaz como del display que esta en la placa, si me puee ayudar le agradeceria un monton ya que es un proyecto, gracias.
    saludos

  27. tengo el mismo error me sale un error de un conponente externo produjo una excepcion y no se como corregirlo.
    tengo una pc con windows xp.

  28. Hola hola, ando ak con una duda, necesito hacer un proyecto en VB en el cual encienda unos leds pero de forma individual segun lo necesite el usuario, como hago la programacion y como podria ser el circuito, soy nuevo en esto de usar el puerto paralelo, y necesito su ayuda, muchas gracias.

  29. Hola Gian,
    Pues deberias utilizar la instruccion ‘inp’ del registro de datos. Que es lo que teoricamente se consigue cuando haces click en el ‘Button2’ según lo detalle en el ejemplo.

    Saludos,
    Pep Lluis,

  30. Hola, a raiz de sus comentarios hechos anteriormente, me dio por curiosear en el manejo del puerto paralelo, así que hice un circuito en un protoboard utilizando 8 LEDs y 8 resistencias; hice 2 programas de manera que en uno de ellos puedo encender o apagar el o los LEDs que yo desee y en el otro puedo detectar cual o cuales LEDs están encendidos. Todo funcionó perfecto, así que agregué un microswitch al circuito y lo coloqué en un cajón de un escritorio, cuando el cajón se abre el LED al que está conectado el microswitch se apaga, pero el programa encargado de detectar el estado del LED no detecta que está apagado ¿Qué me falta para poder detectar un cambio de estado cuando éste se provoca de manera externa y no por programa? Agradezco anticipadamente sus comentarios y les envío un cordial saludo.

  31. Hola Abel,
    Algunos componentes disponen de una interrupcion que se dispara automaticamente cuando se detecta algun cambio en las E/S. En nuestro caso la solucion mas facil es dotar a tu programa de un temporizador ‘timer’, que dispare y efectue una lectura del estado de las entradas, de esa forma podras controlar cuando una entrada esta activa/inactiva.
    Espero que esto te ayude.
    Saludos,
    Pep Lluis,

  32. Gracias Pep Lluis por tu respuesta,

    El programa que detecta el estado de los LEDs ya tiene un timer que revisa el estado de éstos cada medio segundo, la situación es que cuando se abre la gaveta y el microswitch apaga el LED, no lo detecta, solamente lo detecta cuando lo apago manualmente con el otro programa.

    No sé si se requiera configurar algo en el puerto o en el programa o dado que las patillas de datos del puerto (2-9) son de salida no se puedan detectar cambios externos, etc.

    Te agradezco anticipadamente cualquier orientación al respecto.

    Recibe un cordial saludo,

    Abel Lozano.

  33. Hola Abel,
    En todo caso deberiamos utilizar los foros o mandarme el mensage a traves de la opcion [Contact] pues dificilmente podemos seguir una conversacion fluida. Te respondere a tu correo.
    Saludos,
    Pep Lluis,

  34. PODRIAS USAR EL INPUT DESDE LA CARPETA BIN DE TU PROYECTO ASI SI LA TIENES GUARDADA EN ALGUN PENDIRVE O MEJOR CONOCIDA COMO USB EN EL BAJO MUNDO NO TENDRAS ESE PROBLEMA DE VERDAD YO LO PROBE Y ME RESULTO PUEDES PROBAR SOLO QUE NO ENTIENDO BIEN QUE REACCION TIENE PARA RECIBIR EL MENSAJE A LO QUE COMPRENDI DEL CODIGO ES QUE MANDA UN MENSAJE ESTOY EN LO CORRECTO.!!!!

  35. Buenas noches quisiera saber si se puede mandar a imprimir automaticamente un fichero(archivo) a una impresora y si me facilitarian algun codigo por favor.

  36. hola tengo una consulta quisiera una orientacion para poder encender solamente un unico led usando el puerto paralelo pero desde la barra de tareas de windows xp mi idea es la siguiente quisiera poder controlar un dispositivo haciendo unicamente un click en algun boton de la barra de tareas de windows de manera que mientras uso la pc si necesito encender ese dispositvo solo hago click y el programa se encarga de enviarle el pulso de encendido a ese dispositivo gracias

  37. hola no imagenes de la interface grafica muy bueno este tema mi amigo y porfa eso es lo q necesito imagens para ver estos objetos y el codigo simplificado es para prender a encender leds y gracias por compartir todo esto

  38. alguien me puede ayudar o me puede pasar un programa o tutorial que este en C++ que haga enceder minimo 3 led’s si son los 8 mejor, ya esta lo fisico protoboard con los led’s conectados las resistencias y eso, tenia pensado usar un pic pero para economizar que sea directo del puerto, solo que eso del programa no me enciende el foco XD

  39. Buen dia a todos. Muchas gracias por compartir este codigo. Lamentablemente al quererlo usar no me ha funcionado, al ejecutarlo me marca una excepcion «No se controlo SEHExcepcion» le puse un try y catch pero no me atrapa el error. Uso Visual Studio 2010 y Windows XP, Conecte directamente el LED al puerto paralelo pin 2 y pin 25 y desde que lo conecto se queda encendido el LED. Espero que alguien me pueda ayudar, gracias.

  40. Hola, recibe un cordial, saludo, mi consulta es la siguiente, hay manera de conectar o hacer encender.apagar, mas de 8 leds. Te explico un poco mi idea, tengo una maqueta,y qiero iluminar ciertas areas, las cuales decida mediante una pc.
    gracias, saludos

  41. Conoces microframework y/o Gadgetter?
    Puedes empezar en ‘savecomm.net’.
    Dispones de cantidad de ‘Cacharros’ programables para hacer ese tipo de tareas de forma facil, ordenada y desde Visual Studio.
    Saludos,
    PepLluis,

  42. hola, mira tengo el siguiente problema, quiero saber como puedo evitar que se enciendan todos leds al reiniciar la computadora, ya que por defecto los pines del LPT inician con carga,
    muchas gracias

Responder a carlos Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *