Autor Tema: Puerto control 37A en C++ ó VB6  (Leído 3380 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Puerto control 37A en C++ ó VB6
« en: 15 de Noviembre de 2004, 22:22:00 »
Hola Amigos:

Quisiera saber si alguien me puede hechar una mano y me puede indicar como utilizar el puerto 37A del LPT de la PC, hasta donde tengo entendido este puerto es bidireccional y lo que quisiera saber es como lo seteo para utilizarlo como entrada o salida.

Gracias a todos... un abrazo a la distancia:

                                                 LordLafebre Sonrisa Gigante

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Puerto control 37A en C++ ó VB6
« Respuesta #1 en: 16 de Noviembre de 2004, 14:05:00 »
Que onda Lorlafebre,
Necesitas  librerias...
Puedes usar el paquete de DLL"s de portio.dll hay para paltaformas nt  http://www.geocities.com/avt232/PortIO/Win2kNTPortIO.htm
 o tipo win98
 http://www.geocities.com/avt232/PortIO/Win9xPortIO.htm
acuerdate de proteger con un relay el puerto para evitar problemas.. jajajaja.
Para el conexionado aqui hay un link qu describe los pines:
http://www.logix4u.net/parallelport1.htm, aqui hay mas informacion interesante:
http://www.lvr.com/

una forma de hacer lo que quieres es usando un motor de arranque en ASM(usando debug o turboasembler)aqui un ejemplo de guardado de secuencias (preestablecidas)
mov dx,0378   ;tu puerto de la LPT
mov ax,00ffh   ;lo cargas con 11111111  <-- priemr secuencia
out dx,al         ; Envias el Valora LPT!
mov ax,00AAh ;load al with 10101010     <--- segunda secuencia
out dx,al          ;envias el valor a  LPT1    
....... todas las secuencias que se te ocurran
(este tipo de ejmplo es muy empleado para mover motores en secuencias preestablecidas)
GUARDAS este archivo como COM

por ejemplo:"Movimiento.com" y este es el que usas en Visual basic con una llamada comun y correinte:
moveRobot=shell("C:Movimiento,com",vbHide)

claro esta es una Forma de hacerlo cuando puedes PREESTABLECER los pasos

Una forma mas elegante de hacerlo es usando como te comente librerias como Inpout32.dll y esto dependera de el sistema operativo que uses este Dll tiene dos codigos fuenets importantes: inpout32drv.cpp y osversion.cpp uno para l kernel y ser como interface entre entrada y salida del puerto y el otro como chekador de Os, las dos funciones que se importan del inpout32.dll son:
Inp32 para leer la data de un especificado puerto
out32 para  enviar data...................
Este mismo Dll tiene otras funciones como:
DllMain,Closedriver,Opendriver, etc..

Bueno despues de esta breve introduccion, en resumen es bajarte el dll de aqui: http://www.logix4u.net/inpout32_source_and_bins.zip        busca el archivo inpout32.dll , copialo y ponlo en la carpeta de system de tu OS.
Una ves hecho esto has la prueba de lectura que viene en:
inpout32_source_and_binsinpout32_source_and_bins   est applicationsVB_test_app
y oprimiendo el boton In debe de aparecer dependiendo del puerto que escribas el dato...
una ves hecho esto.. tu puedes revizar el codigo inmerso para ver como funciona con los comandos, ademas en su misma web viene una gran cantidad de ejemlos los cuales puedes analizar con calma y ver que es muy facil y rapido. BASICAMENTE ES USAR INP Y OUT. Y no te olvides de definirlas como modulo o en el campo general...
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)

Salu2 pana

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Puerto control 37A en C++ ó VB6
« Respuesta #2 en: 20 de Noviembre de 2004, 20:04:00 »
Hola pana Lager:

Gracias por prestarme interes y gracias por las librerias y el circuito, en realidad librerias tengo, el circuito de protexion para el LPT tambien tengo, lo que no tengo muy bien entendido es lo siguiente:

El puerto paralelo se divide en 3 partes:
Puerto de Datos (378H), puerto Status(379H) y puerto control (37A), este ultimo es bidireccional y puede controlar al 378 para que pueda ser utilizado como entrada esto se logra poniendo en HIGH al bit 5 del puerto 37A, el de Status es solamente de entrada.  El 37A es bidireccional pero lo que no se o lo he intentado y no me funciona es que este tiene que ser seteado para ser utilizado como entrada o salida, se tiene que hacer mediante software?, porque lo he hecho y leí que para ser utilizado como salida se tiene que enviar un dato 0FH, esto hace que los cuatro primeros bits se pongan en 0100 (Tomando en cuenta que los bits 0, 1 y 3 estan invertidos), y luego decia que puedo enviar datos, y para utilizarlo como entrada tengo que enviar el dato 0BH lo cual hace que los 4 primeros bits se pongan en 1011 y puedo utilizarlo como entrada, esto que te cuento ya lo hice y no me funiona, no puedo utilizar el 37A ni como entrada ni como salida, con los puertos 378 y 379 no tengo problemas.  No se si tu sabes alguna otra manera para poder utilizar este puerto.

GRACIAS PANA LAGER.

Saludos desde ECUADOR.

LordLafebreSonrisa Gigante

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Puerto control 37A en C++ ó VB6
« Respuesta #3 en: 20 de Noviembre de 2004, 22:29:00 »
LordLafebre ,
EL CODIGO PARA DATOS:

Private Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer

Private Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Dim Puerto As String

Private Sub Command1_Click()
Out puerto, 255   "Transmito todos d0-d7 en alto
End Sub

Private Sub Form_Load()
PortAddress = &H378 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!!!!!!!!!!!!!!
End Sub

Salu2 pana

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Puerto control 37A en C++ ó VB6
« Respuesta #4 en: 21 de Noviembre de 2004, 00:21:00 »
Y otra cosa pana,por favor  reviza esta pagina ,para que veas el acceso que puedes tener en cada puerto,:
http://lesmateriaal.saxion.nl/gej/java/lpt/lpt.html . y aqui una forma mas de hacerlo(dlportio.dll).
http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=33181&lngWId=1
Espero haya quedado todo claro
Salu2 pana

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Puerto control 37A en C++ ó VB6
« Respuesta #5 en: 24 de Noviembre de 2004, 13:56:00 »
Hola Pana Lager:

Solucionado el problema, pero lo hice a mi manera, estube leyendo mucho sobre puerto paralelo en un libro de Jan Axelson, pero me sirvió de mucho los links que tu pusiste, y estaba en la razón, con el LPT dispones en total de 12 bits para utilizar como salida y de 17 bits para utilizarlos como entrada, esto es utilizando justamente todos los puertos es decir 378, 379 , 37A, para utilizar el 378 como entrada tienes que enviar una dato 37A ya sea binario decimal o en hexa para poner en 1 al bit 7 del 37A, esto te permite utilizarlo como entrada, el 379 es exclusivamente como entrada, y el 37A para poder utilizarlo como salida de igual manera se lo hace enviando el dato 0FH para utilizarlo como salida y 0BH para utilizarlo como entrada, la libreria que estoy utilizando es IO.dll y funciona con todos los sistemas operativos, así que con esto concluyo con esto del puerto.

Gracias nuevamente por darme una mano, gente como tu se nesecita para que este foro salga adelante...

Saludos desde ECUADOR !!!

LordLafebre Sonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteRebotadoRebotadoRebotadoRebotado

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Puerto control 37A en C++ ó VB6
« Respuesta #6 en: 24 de Noviembre de 2004, 18:54:00 »
PERFECTO pana, RebotadoRebotadoRebotado
 me da gusto que lo hayas MEJORADO Y PERFECCIONADO,  Y como te puedes dar cuenta es muy sencillo , la conversion o mejor dicho translacion a otro lenguaje tambien facilita las cosas, si trabajas con C(nivel directo con hardware IO) es aun mas sencillo, y asi sucesivamente. Pero Por favor no te olvides de aportar TUS CONOCIMIENTOS para que todos APERNDAMOS(me incluyo) mas  a manejar software con hardware.
Un abrazo pana

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Puerto control 37A en C++ ó VB6
« Respuesta #7 en: 26 de Noviembre de 2004, 21:26:00 »
Hola nuvamente pana lager:

Tambien he utilizado C++ y si trabajo directo con el puerto mediante la libreria dos.h pero solo en 98 y ME pero hay problemas en los demas sistemas oprativos basados en NT.  Y si quires con gusto te hago llegar el codigo para trabajar con el puerto ademas de la circuiteria qu estoy utilizando, sólo hazmelo saber.

hasta siempre.

Saludos desde ECUADOR !!!!

LordLafebre. Sonrisa Gigante

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Puerto control 37A en C++ ó VB6
« Respuesta #8 en: 26 de Noviembre de 2004, 21:53:00 »
Gracias pana lorlafebre, Sonrisa
No me lo envies pana, solo compartelo con usuarios del foro que tengan tus mismos problemas para manejar el puerto paralelo.

Un abrazo pana