# Obtener direccion fisica puerto paralelo externo



## chugus (Dic 9, 2008)

Hola gente ando con un gran problema que no he podido resolver... El tema es que estoy haciendo un soft para controlar el puerto paralelo y funciona a la perfeccion.. Pero como necesitaba mas salidas opte por la simplesa de agregarle al pc una tarjeta pci con un puerto mas db25 y el problema es que no se como encontrar la direccion fisica de este puerto   ya que antes usaba el onboard de la tarjeta madre en la direccion 0378 y ahora no hay manera de hacerlo funcionar... Hay alguna manera de averiguarlo?

Desde ya muchas Gracias
Saludos


----------



## Chico3001 (Dic 9, 2008)

Las direcciones del puerto paralelo en una computadora son 3BC y 378h, pero si quieres averiguarlas mediante un proceso automatizado en esta web me encontre un programa simple en C que lo hace

http://www.modelo.edu.mx/univ/virtech/circuito/paralelo.htm

Si lo vas a hacer en algun Visual el proceso es distinto... desafortunadamente no lo conozco


----------



## Ferny (Dic 10, 2008)

Inicio -> Configuración -> Panel de control -> Sistema -> Hardware -> Administrador de dispositivos -> Puertos -> Seleccionas el LPT que corresponda y con el botón derecho vas a Propiedades -> Recursos

En mi caso salen dos direcciones, no entiendo por qué, pero la "buena" es la 378

En mi casa mi PC no tenía ningún puerto LPT, y tras agregar una tarjeta PCI se instaló en la dirección B880, me volví loco hasta encontrarla


----------



## chugus (Dic 10, 2008)

ok muchas gracias amigos... voy a checar mi pc a ver que aparece   

Saludos!


----------



## chugus (Dic 11, 2008)

Buenas... ya encontre la direccion del puerto de la forma que Ferny posteo....por lo tanto me puse a hacer multiples pruebas vuelvo al foro a postear ya que ahora el problema ahora es otro... el tema es que cuando envio cualquier dato al puerto automaticamente despues de dar la orden se tilda la pc y en algunos casos se reinicia...  Por lo que he ensamblado un programita que solo apague y encienda los puertos y tambien hace lo mismo...
No creo que sea el problema el soft por su simplicidad... Podran ser las tarjetas PCI o los drivers mal instalados? Aunque en el administrador del Sistema dice claramente que "El dispositivo funciona correctamente"

Cabe destacar que he probado con todos los valores que salen en " Inicio -> Configuración -> Panel de control -> Sistema -> Hardware -> Administrador de dispositivos -> Puertos -> Recursos " y sigue haciendo el mismo problema con ambas placas PCI...

Alguna idea?  

Saludos


----------



## Chico3001 (Dic 11, 2008)

Posiblemente es un corto en el puerto... verifica que tu circuito no consuma demasiada corriente y que este bien conectado...


----------



## Ferny (Dic 12, 2008)

A mi ya me pasó y acabé solucionándolo cambiando de .dll y de método de sacar los datos (usando visual basic). En mi caso incluso probando en una máquina virtual (con el virtualpc) también se reiniciaba la misma jeje...

Si quieres pásame la dirección base de tu puerto y en un momento te compilo un programa de prueba que tengo en visual basic que pone a 1 o a 0 todas las salidas del puerto. Así simplemente conectándole un led entre una salida y GND puedes ver si está cambiando

Saludos


----------



## chugus (Dic 12, 2008)

Amigos he logrado solucionar el problema!  Cambie la libreria io.dll por la input.dll y funciona todo a la perfeccion.. Muchas gracias por su colaboracion en el post...

Saludos a todos..
Leandro


----------



## Vzlaje (Abr 1, 2009)

Ferny dijo:
			
		

> Inicio -> Configuración -> Panel de control -> Sistema -> Hardware -> Administrador de dispositivos -> Puertos -> Seleccionas el LPT que corresponda y con el botón derecho vas a Propiedades -> Recursos
> 
> En mi caso salen dos direcciones, no entiendo por qué, pero la "buena" es la 378
> 
> En mi casa mi PC no tenía ningún puerto LPT, y tras agregar una tarjeta PCI se instaló en la dirección B880, me volví loco hasta encontrarla



Bueno solo queria agregar; que el el caso de targetas pci paralelo las direciones son tomadas automaticamente sin que se puedan modificar, en un rango de direcciones muy distinto al de los puertos paralelos omboard (03BC,0378,0278).Estas por lo general son muy altas en mi caso C050 , si no funciona hay que actualizar los driver!
este comentario es porque hice segun lei aca y no me funcionaba asta que actualice al driver mas reciente de mi targeta pci paralelo  (nota : el anterior driver funcionaba bien con impresoras pero no, con ninguna aplicacion que usara el dll imput32.dll)

si molesta mi comentario espero me disculpen saludos


----------



## jaimepsantos (Dic 14, 2009)

Si ingresas al BIOS puedes configurar las direciones de los puertos para ingresar al BIOS necesitas presionar suprimir al encendido de tu PC aparece una ventana azul ahi te daa opciones de configurar los puertos de hecho puedes cambiar la configuración de pines que tiene por default intentalo.


----------



## Nestor Chavez (Ago 17, 2010)

heyy vzlaje yo tengo el mismo problema y se q*UE* este ya es un foro muy viejo peor no *AYO* Como resolverlo me da lo mismo usar la libreria io.dll ya q*UE* se reinicia mi pc :S pero el mayor problema es q*UE* no se como ocupar la input32.dll no se si me podrias echar la mano ahi ya q*UE* se me hace muy dificil puesto q*UE* solo estaba ocupando la io.dll te lo agradeceria un monton


----------



## diegoja (Ago 17, 2010)

Hola gente, estoy empezando a programar el puerto paralelo para luego programar el serie en C/C++. Les hago unas consultas que tengo y que buscando por la web no me he podido sacar  sobre el paralelo:
1- El bus de datos pin del 2 al 9, es salida, entrada, o ambos?¿ en varios sitios lo eh visto como salida, en otros los ponen como bidireccional, eh ahi mi confucion y como distinguirlo en las PCs.
2- Los bus de control y estados son bidireccionales?¿ y que se refiere a que ciertos bits de estos buses estan como "negados" me refiero al simbolo de la raya arriba del nombre.
3- Se que en windows los puertos estan bloqueados al usuario, como adjunto en mi programa de C/C++ las librerias inpout32 y io32, o solo tengo que copiarlas a la carpeta windows??
4- Que circuito me recomiendan para aislar el puerto paralelo y no quemarlo cuando haga pruebas, por ej. desde LEDs hasta motores, y si es posible usarlo como entrada tambien.

Pido disculpas si me extendi mucho con mis inquietudes. Espero que me puedan ayudar.
Un saludo cordial. Diego.


----------



## Nestor Chavez (Ago 17, 2010)

1- los pines del 2 al 9 son unicamente salidas  no se pueden cambiar
2- los unicos q*UE* son bidireccionales creo q*UE* son los de control
3- si tienes que ponerlos en windows system32 ( pero por ejemplo en mi caso tengo q*UE* crear una clase o modulo en Visual basic y pues eso es lo q mas me esta dando problemas )
4- pues un circuito sencillo con una resistencia de 220 ohnios y un led basta 

a y con respecto a cuales estan invertidos
http://4.bp.blogspot.com/_-KMVaTAYLsk/SJsqTzv3HmI/AAAAAAAAAEs/T0ygrbuO8Ds/s400/paralelo+7.JPG

los de + son directos
y los  - son  invertidos


----------



## Nestor Chavez (Ago 17, 2010)

Bueno tras un par de horas me e dado cuenta que el inpout.dll solo tiene 2 funciones en in y out y pues no puedes apagar individualmente cada salida si no q*UE* las apagas de un solo y pues eso no gustar alguein sabe de algun .dll q*UE* funcione igual que el io.dll pero que soporte taregtas extenas pci o cantidades altisimas ?


----------



## lubeck (Ago 17, 2010)

> Bueno tras un par de horas me e dado cuenta que el inpout.dll solo tiene 2 funciones en in y out y pues no puedes apagar individualmente cada salida si no q las apagas de un solo y pues eso no gustar alguein sabe de algun .dll q funcione igual que el io.dll pero que soporte taregtas extenas pci o cantidades altisimas ?



Ambos funcionan de una forma similar la diferencia es que el io.dll hace los calculos por asi decirlo para pseudo-modificar un bit...

por otro lado con la tarjeta externa no pone la direccion del puerto???

que OS  usas???


----------



## Nestor Chavez (Ago 17, 2010)

mmmm vaya te explico tengo una pc con un puerto onboar de paralelo con ese no tengo problemas es el LPT1 ahora por el sentido de controlar mu*CH*o mas cosas quise agrandar las salidas a un maximo de 24 utilizando los de control como salida es un total de 12 salidas por cada tar*J*eta, el problema es la tar*J*eta externa al i*NS*talarla por no ser generica necesita drivers entonces da una direccion super extraña es la CC00  muy diferente a la q*UE* conocemos de puerto LPT2 Y LPT3 pero en el sistema la recconoce Como LPT2  Y LPT3 pero con otras direcciones (ocupo Xp SP3 se me olvidaba decirte) entonces al ocupar la io.dll con la onboar funciona de maravilla el problema es q*UE* al poner la direccion de la externa (PCI) y al enviar un dato reinicia mi pc a*QU*i arriba dice que pues no soporta y asi es... entonce*S* probé con la inpout.dll y exacto con esa funciona super bien la externa ningun problema pero el unico problema es que si digamos quiero encender 3 salidas y luego apagar solo una de ellas no puedo con el inpout.dll ya q*UE* apago todas de un solo no puedo quitar un byte como se hace con la io.dll  y ya q*UE* esta no soporta la tar*J*eta no*-*se q*UE* hacer asi q*UE* por eso pedia otro .dll mejor q*UE* estos dos o estos 2 unidos


----------



## lubeck (Ago 17, 2010)

> tengo una pc con un puerto onboar de paralelo con ese no tengo problemas es el LPT1 ahora por el sentido de controlar muxo mas cosas quise agrandar las salidas a un maximo de 24 utilizando los de control como salida es un total de 12 salidas por cada targeta



Multiplexando el puerto onboard podrias tener mas salidas hasta 32 de una manera mas o menos sencilla...



> uego apagar solo una de ellas no puedo con el inpout.dll ya q apago todas de un solo no puedo quitar un byte como se hace con la io.dll



que lenguage usas???

si pones 
outport &H378,&B10010010
outport &H378,&B10010000
(el comando es solo ilustrativo)
apagas el bit 2 unicamente o estoy entendiendo mal lo que necesitas??


----------



## Scooter (Ago 17, 2010)

Cuando yo era joven no habían instrucciones para encender o apagar un bit
Si haces un OR enciendes y si haces un AND apagas

Osea:
DATO OR bits_a_encender

DATO AND bits_que_quieres_dejar_ON


----------



## Nestor Chavez (Ago 17, 2010)

vaya no se me confundan
lubeck  *SI* se a cual idea te referis es ocupar 4 integrados encenderlos con los de control (c0-c3) y *ASÍ* cada intr*GRADO* controla 8 salidas me pareces (pero es q*SI* por eso busque otra alternativa esa manera no *ME* gusta) y es q*SI* aveces si ocupo algo y enciendo el otro integrado se enciende la del otro y es mu*CH*a complicacion *QU*eria salidas independientes

-te expli*C*o mejor lo del puerto  
para mandar un alto a la *SALIDA* con el Inpout.dll 
D0 = Out &H378,1
D1 = Out &H378,2
D2 = Out &H378,4
D3 = Out &H378,8   y asi susesivamente
para apagarlas tenes que poner Out &H378,0 pero se apagan todas no hay ninguna manera de apagarlas individualmente y ese es el *PROBLEMA*......

ya que con el io.dll con esa hay Como mandar un byte a cada salida y *TAMBIEN* como borrarlo los comandos son Setportbit y Clrportbit 

el Inpout.dll solo trae dos comandos el in y out
en cambio en io.dll trae los dos del inpout.dll + setportbit y clrportbit y otros mas q*SI* no recuerdo 
pero el problema es q*SI* io.dll no acepta mi tar*J*eta externa y inpout.dll si :S


----------



## lubeck (Ago 17, 2010)

No te enojes ni te desesperes pero estas confundido 

no solo puedes usar esto
D0 = Out &H378,1
D1 = Out &H378,2
D2 = Out &H378,4
D3 = Out &H378,8 

tambien esto
D0 = Out &H378,1
D1 = Out &H378,2
D2 = Out &H378,3
D3 = Out &H378,4
D0 = Out &H378,5
D1 = Out &H378,6
D2 = Out &H378,7
D3 = Out &H378,8 y asi sucesivamente...
si utilizas el binario puedes apagar uno en uno que es lo que te quiero decir...

con respecto a multiplexar si lo haces bien casi es como si tuvieras las salidas independientes los cambios son sobre los nano segundo... pero es tu decicion yo solo decia....

Mira yo hice algo parecido a lo que quieres hacer

https://www.forosdeelectronica.com/f26/interface-paralelo-64bits-i-amateurs-27566/


----------



## Nestor Chavez (Ago 17, 2010)

no no no me enojo de echo te agradesco lubeck  Eres de lo mejor me estas quitando muchas dudas de encima.... pero explicame Como es eso de binario osea ya estoy en el tema se q es binario pero no se q binario corresponde a cada puertooo q corresponde..... osea lo q necesito en si es el codigo o el binario q me apague individualmente Cada salida y no apagarlas todas de un solo  no se si me expliko 

mmmm seria algo asi 
Enciendo
D0 = Out &H378,1
D1 = Out &H378,2
D2 = Out &H378,4
pero quiero apagar unicamente 
D1 ??? eso no se como hacer :S

:O no no no estoy enojado lubeck nada q ver jejeje y gracias por toda la ayuda enserio mi problema radica en esto mira 

yo enciendo estas 
D0 = Out &H378,1
D1 = Out &H378,2
D2 = Out &H378,4
pero solo quiera apagar una de ellas 
D2= ???? pero no se como :S y eso es lo q quiero saber  me ayudas


----------



## lubeck (Ago 17, 2010)

mmm....

 por ejemplo

prender bit1
D0 = Out &H378,1

prender bit1 y bit2
D0 = Out &H378,3

prender bit 4 unicamnete
D0 = Out &H378,8

prender bit1,2 y3
D0 = Out &H378,7

apagar bit 2 unicamente y dejar 1y3
D0 = Out &H378,5

haz un prueba asi... y vera el resultado...


----------



## Fogonazo (Ago 17, 2010)

Nestor Chavez dijo:


> vaya no se me confundan
> lubeck  *SI* se a cual idea te referis es ocupar 4 integrados encenderlos con los de control (c0-c3) y *ASÍ* cada int*EGRADO* controla 8 salidas me pareces (pero es q*UE* por eso busque otra alternativa esa manera no *ME* gusta) y es q*UE* aveces si ocupo algo y enciendo el otro integrado se enciende la del otro y es mu*CH*a complicacion *QU*eria salidas independientes
> 
> -te expli*C*o mejor lo del puerto
> ...



*Reglas generales de uso del foro (Extended Version)*

*05)* Escribe de manera correcta y legible para todos. Estás en un Foro no en un Chat.


----------



## Nestor Chavez (Ago 17, 2010)

:O Super graciassssssssssssssssssss lubeck eres de lo mejor mis respetos :O tenias razon :O perooo Como hago para encontrar con q numero apago y con cual enciendo no tienes una tabala o es cada 3 numeros despues del q enciendo ??? Como va la numeracion la de encendido la entiendo muy bien se q va 1,2,4,8,16,32,64,128.... pero para el apagado ????

lo siento Fogonazo :/


----------



## Scooter (Ago 17, 2010)

Lee con detenimiento lo que decimos. Siempre se ha podido.

El código (mas o menos libre)

Encender:
dato = dato or 2^bit
out &H378,dato


Apagar:
dato=dato and not 2^bit
out &H378,dato


----------



## Nestor Chavez (Ago 17, 2010)

:O ya entendí, muchas gracias a ambos enserio me han ayudado mucho :O gracias se los agradezco de corazón


----------



## Scooter (Ago 17, 2010)

Ojo: bit va de 0 a 7 no de 1 a 8


----------



## calcasla (May 14, 2011)

Hola a todos, este debate está muy bueno, a pesar del tiempo que lleva, me gustaría consultar una inquietud, si alguien sería tan amable de responderme, llevo buscando mucho tiempo y no he dado con la solución.

Tengo una tarjeta de puerto paralelo por ranura PCI, funciona con Inpuot32.dll, puedo gestionar D0 hasta D7, sin embargo, me gustaría poder manipular también los pines de control (1, 14, 16 y 17), pero no me ha funcionado, no sé de qué manera hacerlo, los pines D0 a D7 tienen la dirección &HB400, y me parece que el de control es &HB407, pero no sé como enviar pulsos, aparte, intenté hacerlo, pero no sé si está bien porque los LED están encendidos siempre, y no puedo apagarlos. Pensé que podría ser así, pero no me resultó:

Out &HB407, 0 'Esto para el pin 1 de control
Out &HB407, 1 'Pin de control 2
Out &HB407, 2 'Pin de control 3
Out &HB407, 3 'Pin de control 4

Bueno, eso no me resulta, tampoco sabría como apagarlos, porque es diferente a la manipulación de D0 a D7. Si alguien me podría ayudar en este tema, ya que con Inpout32.dll estoy recién comenzando.

Saludos a todos.


----------



## MrCarlos (May 14, 2011)

Hola calcasla

Tal vez esto ya lo tengas por conocido pero si no aquí está.

Si la dirección BASE del puerto paralelo es &HB400 
&HB400+0 es el Registro De DATOS.
&HB400+1 es el Registro De ESTADO.
&HB400+2 es el Registro De CONTROL
&HB400+3 ó +7 Varios.


De los PIN’s que dices que quieres manipular.
Vistos de la PC hacia el periférico:
El PIN:
01 Strobe...... (Control) Salida...... Indica que hay datos válidos en las líneas de datos.
14 Auto-Feed. (Control) Salida...... Hace que la impresora automáticamente inserte una línea por cada retorno de carro.
16 Init.......... (Control) Salida...... Usado para aplicar un Reset a la impresora.
17 Select....... (Estado) Entrada.... Indica que la impresora está en línea.

Entonces: para las líneas de *Control* la dirección sería &HB402.
Y, para las líneas de *Estado* la dirección sería &HB401.

Analiza los archivos .DOC y la imagen adjunta, en esta vienen marcados con un punto color verde los PIN’s que deseas manipular.

Espero esta información te sirva.

saludos
a sus ordenes


----------



## calcasla (May 18, 2011)

MrCarlos dijo:


> Hola calcasla
> 
> Tal vez esto ya lo tengas por conocido pero si no aquí está.
> 
> ...



Hola, muchas gracias por vuestra ayuda, ahora pude leer las entradas y manejo las salidas de control, eso sí que no entiendo muy bien su lógica aún (1, 2, 4, 8), porque a veces se apagan o se encienden sin yo haber esperado tal resultado, pero veré haber si se me ocurre algo.

Muy agradecido por la ayuda brindada.

Saludos.


----------



## ciber2007 (Ago 9, 2014)

calcasla dijo:


> Hola, muchas gracias por vuestra ayuda, ahora pude leer las entradas y manejo las salidas de control, eso sí que no entiendo muy bien su lógica aún (1, 2, 4, 8), porque a veces se apagan o se encienden sin yo haber esperado tal resultado, pero veré haber si se me ocurre algo.
> 
> Muy agradecido por la ayuda brindada.
> 
> Saludos.




Amigo Estoy tratando de utilizar los pines de control con visual basic, pero no logro tener acceso a ellos, algun tip que me pudieras dar?

Saludos



MrCarlos dijo:


> Hola calcasla
> 
> Tal vez esto ya lo tengas por conocido pero si no aquí está.
> 
> ...



Amigo Estoy tratando de utilizar los pines de control con visual basic, pero no logro tener acceso a ellos, algun tip que me pudieras dar?

Saludos


----------



## Scooter (Ago 9, 2014)

Desde VB hace falta usar una dll. Hace mucho tiempo que windows no deja acceder al hardware.
Busca en el foro porque es un tema que se ha comentado varias veces.


----------



## miguelus (Ago 9, 2014)

Buenas noches

Como muy bien comenta Scooter, para tener acceso al Puerto Paralelo con Visual Basic, necesitarás una DLL

¿Qué versión de Windows estás utilizando?

Sal U2


----------

