Controlar Puerto Paralelo

Iniciado por fdsigu, 13 Julio 2010, 18:28 PM

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

fdsigu

Amigos como estan, estoy haciendo unprogramita en c# para controlar el puerto paralelo, uso lalibrelia inpout32.dll, ya se como enviar los datos del puerto, pero lo que no se como leer e interpretar los datos que recibo,
uso este codigo para la lectura?

//Llama a la función de entrada del archivo dll.
[DllImport("inpout32.dll", EntryPoint="Inp32")]
public static extern int Entrada(int direccion);

El puerto paralelo tiene los pines de entrada (pin 15,10,11,12,13)
Entonces cuando leo el puerto 889 como se que esta en cada pin, por decir algocuando este con 1 el pin 15 que valor debo tener?? igual para el resto de pines, de igual forma  si esta con 1 el pin 15 y el 10 como se que valor debe darme cuando leo el puerto 889.

Ademas de esto necesito hacer uso del puerto de entrada y salida, es decir tengo que leer cuando esta con 1 o 0 el pin1, aqui igual tengo que leer el puerto 890 pero que valor me deberia dar cuando tiene 1 el pin1 y que valor cuando tiene 0 este pin1.

Espero me puedan ayudar.

cbug


fdsigu

Amigo muchas gracias por el enlace, pero mas que nada de como leer el valor del puerto es saber como interpretar o saber que valores me da cuando leo el puerto 379 y 390 del puerto paralelo,
los pines de status  son
Pin 10: S6
Pin 11: S7
Pin 12: S5
Pin 13: S4
Pin 15: S3                   

por ejemplo cuando el pin10, tiene un uno que valor deberia tener en decimalo binario? cuando tiene un 0 igual, para el resto de pines de igual manera y las combinaciones por ejemplo si el pin10 y 11 esta con el valor de uno que valor deberia tener, porfa alguien que mepueda ayudar porque estoy bien confundido con esto.

Mr.Blue

#3
bueno aver si entendi bien que es lo que queres.
ya habia respondido o habia creado un post, pero no recuerdo.
te doy un ejemplo en c++ que es el luenguaje quue mas manejo para que te des una idea.

Código (cpp) [Seleccionar]
 outportb (0x378,2); //Esta linea apunto al puerto de salida 0x378, el 2 indica que led tengo q prender, tene encuenta esto que explico despues
       delay (1000);// tiempo que qeda prendido.


Bueno, como funciona ese 2 que te dije.

Supongamos esto, en un puerto LPT son 8 pines que se pueden usar con leds, entonces como saber como prender el led que queremos, de la sigiente forma:

128 64 32 16 8 4 2 1  // aca son valores que sumados podemos formar  cualquier numero desde el 0 hasta el 255

entonces

        128 64 32 16 8 4 2 1
LEDs    1   2   3   4  5 6 7 8

queremos prender el led 4 seria igual a 00010000 (binario) = 16 (decimal)
el led 1 3 5 7 seria igual a 10101010 = 170

en el ejemplo en c++ q di prenderia el led 7

Espero q te sea de ayuda.
Saludos

fdsigu

Gracias amigo por la respuesta pues si algo asi es lo que queria, pero lo que me indicas es para los pines de salida, ahora como seria para los pines de status o de entrada y los de control???

Gracias ojala y mepuedas ayudar.

Mr.Blue

http://www.todorobot.com.ar/proyectos/paralelo/paralelo.htm

Fijate esta web por ahi te sea de ayuda, me estoy yendo a estudiar justo, cuando vengo te respondo mas elavoradamente, saludos.

fdsigu

Gracias Sr Blanco pero no me ayudo mucho esa web, esperare a ver si me puedes ayudar con una breve descripcion asi como lo hiciste de los pines de salida ahi si entendi pero ahora el problema es con los de entrada y control

Saludos


Mr.Blue

#7
Bueno, el pueto paralelo LPT consta de tres registros: Estado , de datos y de control
los de estado: es un reguistro de entradas de 5 bits, i trabajan con la direccion 0x379 (LPT1)
los de datos: consta de 8 bits, es bidireccional, y su direccion es 0x378 (LPT1)
Los de control: Tambien son bidireccional de 4 bits, y su direccion es 0x37A (LP1)

DATOS:
Como ves el de datos que es el que te explique anteriormente trabaja con 8 bit, de 0 a 7 binario (2e3) 255 conbinaciones posibles.

Estado:
Son 5bits, de 0 a 4, osea 2e2, 31 conbinaciones posibles.
El registro de estado indical la situacion actual de la impresora conectada al puerto, segun los niveles de tencion, ACK, BSY, PAP y OF/ON, lo que permite controlar el comportamiento de la impresora, es un regustro de entrada (Lectura) de informacion. Se compone de los pines (10,11,12,13,15).

Si te fijas en la web que te deje en el cuadro que dice Lectura: Entrada de datos

Coresponden a estos:
Aclaracion D3,...,D7, indica el bit, osea bit 3 a 7
# D3: state of pin 15 (ERROR) inverted -> Si esta en 0, indica que se ah producido un error.
# D4: state of pin 13 (SELECTED), -> Este es de OF/ON, si esta en 1 la impresora no esta en linea.
# D5: state of pin 12 (PAPER OUT) -> Si esta en 1, significa que falta papel.
# D6: state of pin 10 (/ACK) -> Indica que se producio una transferencia correcta, Trabaja con estados alto-bajo, si se transfiere un byte a la impresora, esta activa la line ACK de reconocimiento de caracter,en este momento pasa a estado bajo, si el ACK esta en niven alto significa que la impresora esta ocupada, y no se pueden realizar envios.
# D7: state of pin 11 (/BUSY) inverted -> Inpresora ocupada.

Los bit 0,1 y 2 no se usan.

Control:

Son 4 bit, igual q antes 2e2, 15 conbinaciones posibles.

Este registro permite controlar las transferencias de informacion con la impresora, y tiene acceso de Lectura y escritura, como dije su direccion es 0x37A (LPT1).
Corresponden a los pines 1,14,16,17

Los bit de este registro son:
# D4: state of ping 2-9 (Son los de datos) (IRQ)
# D3: state of ping 17 *(DSL)
# D2: state of ping 16 (/INI)
# D1: state of ping 14 *(ALF)
# D0: state of ping 1 *(STR)

Notas:
1- La / indica bit activo a nivel bajo
2- El * indica que son invertidos por el Hardware por lo tanto.

Bit 4 (IRQ): Permite controlar las interrupciones de tipo hardware, si el bit esta en 1 corresponde con la interrupcion 0x0Fh (Creo) para procesador x86.

Bit 3 (DSL): Esta es activada con un pulsador produce la iniciacion de la impresora.

Bit 1 (ALF): Esta en nivel alto y cuando se produce un carry CR produce un cambio de linea.

Bit 0 (STR) Controla la linea, y permite validar el dato exitente en el registro de datos, En 1 en el bit STR indica que el caracter es valido y se debe aceptar


Fuente: http://mimosa.pntic.mec.es/~flarrosa/puerto.pdf

Lo que te deje esta resumidamente, de esa fuente ya q no me acuedo de todo.

Aclaracion importante.
Al trabajar con todo el puero paralelo, te recomiendo, si estas trabajando en una placa madre unboard, comprar aparte el pueto paralelo LPT para hacer experimentos y trabajar con ese ya que si quemas el puerto LPT de la placa madre queda inutilizable, y su arreglo puede llegar a ser muy costoso, y talves te sea mas barato comprar una placa madre nueva.


Otra cosa, seria de mas utilidad si expones el circuito y/o que trabajo queres hacer con el puerto, brindarte mas ayuda.

andres_5

Una duda por mi parte, como se desbloquea el puerto paralelo desde el Windows 7 de 64 bits ?? he provado haciendo mi aplicación y usando ya programas ya creados, y ningun avance ...
gracias y saludos
Algunos de mis proyectos sobre electronica -->
En Mi Canal de Youtube



fdsigu

Gracias Sr blanco po la informacion, pero queria saber si no es mucha molestia, asi como lo hiciste con el ejemplo de los pines de datos explicarme con los pines de control, osea en terminos mas comprensibles para el comun de los usuarios jeje,
Por ejemplo
Pin 10: S6 cuando tine 1 que valor en decimal es igual cuando tiene 0
Pin 11: S7 cuando tine 1 que valor en decimal es igual cuando tiene 0
Pin 12: S5 cuando tine 1 que valor en decimal es igual cuando tiene 0
Pin 13: S4 cuando tine 1 que valor en decimal es igual cuando tiene 0
Pin 15: S3     

Como me indicaste
128 64 32 16 8 4 2 1
LEDs    1   2   3   4  5 6 7 8

Aqui si esta claro, pero ya para los pines de entrada no, lo que tengo que hacer es un programita que envie datos al puerto y prenda  leds, dependiendo de lo que el profe pida, con lo que me indicaste ya lo tengo claro,  ademas de esto debo leer el puerto y ver que datos tiene y segun los datos que tenga debo decir por ejemplo
S6 cuando este con 1 activo cuando este con 0 desactivado.
S7 activo o desactivo (si es 1 o 0)

y asi con todos los pines, para enviar estos datos uso un pulsante.

Saludos y gracias por la ayuda