You are on page 1of 33

Usando el puerto paralelo de una PC

Proyecto: Interfaz para el Puerto Paralelo Fecha: 3 de Setiembre de 2000 Autor: Todorobot IMPORTANTE: Ya est disponible la nueva versin del software de control para Windows 9x, NT,
2000 y XP

Introduccin:
El puerto paralelo de una PC es ideal para ser usado como herramienta de control de motores, rels, LED's, etc. El mismo posee un bus de datos de 8 bits (Pin 2 a 9) y muchas seales de control, algunas de salida y otras de entrada que tambin pueden ser usadas fcilmente. Las PC's generalmente poseen solo uno de estos puertos (LPT1) pero con muy poco dinero se le puede adicionar una tarjeta con un segundo puerto paralelo (LPT2). En reglas generales la direccin hexadecimal del puerto LPT1 es igual a 0x378 (888 en decimal) y 0x278 (632 en decimal) para el LPT2. Esto se puede verificar fcilmente en el setup de la PC o bien en el cartel que generalmente la PC muestra en el momento del booteo. Puede darse el caso que el LPT1 asuma la direccin 0x3BC (956 en decimal) y el LPT2 0x378, en ese caso habr que tratar de corregir el setup y/o los jumper de las tarjetas en caso que sea posible. De lo contrario se puede modificar el software que veremos mas adelante para aceptar esas direcciones.

Breve descripcin del puerto paralelo:


El puerto paralelo de un PC posee un conector de salida del tipo DB25 hembra cuyo diagrama y seales utilizadas podemos ver en la siguiente figura:

Si deseamos escribir un dato en el bus de salida de datos (pin 2 a 9) solo debemos escribir el byte correspondiente en la direccin hexadecimal 0X378 (888 en decimal) cuando trabajamos con el LPT1 y 0x278 (632 en decimal) cuando trabajamos con el LPT2. Los distintos pins (bits) de salida correspondientes al bus de datos no pueden ser escritos en forma independiente, por lo que siempre que se desee modificar uno se debern escribir los ocho bits nuevamente. Para leer el estado de los pins de entrada (10, 12, 13 y 15) se debe realizar una lectura a la direccin hexadecimal 0x379 (889 en decimal) si trabajamos con el LPT1 o bien leer la direccin 0x279 (633 en decimal) si trabajamos con el LPT2. La lectura ser devuelta en un byte en donde el bit 6 corresponde al pin 10, el bit 5 corresponde al pin 12, el bit 4 corresponde al pin 13 y el bit 3 corresponde al pin 15. En la siguiente tabla se puede ver lo antedicho en una forma ms grfica:

Escritura: Salida de Datos


Escritura en direccin 0x378 (LPT1) o 0x278 (LPT2) DATO DB25 CN5 CN4 BIT 7 Pin 9 BIT 6 Pin 8 BIT 5 Pin 7 BIT 4 Pin 6 BIT 3 Pin 5 BIT 2 Pin 4 BIT 1 Pin 3 BIT 0 Pin2

TTL 7 TTL 6 TTL 5 TTL 4 TTL 3 TTL 2 TTL 1 TTL 0


No usar

HP 6

HP 5

HP 4

HP 3

HP 2

HP 1

HP 0

Lectura: Entrada de Datos

Lectura en direccin 0x379 (LPT1) o 0x279 (LPT2) DATO BIT BIT BIT 6 BIT 5 BIT 4 BIT 3 7 2
No

BIT 1
No usar No usar

BIT 0
No usar No usar

DB 25 usar CN6
No usar

Pin 10

Pin 12

Pin 13

Pin 15

No usar No usar

Input Input Input Input 3 2 1 0

Interfaz:
En la archivo IPP01-CIRCUIT.PDF podemos apreciar el circuito correspondiente a la interfaz para el puerto paralelo. La interfaz nos provee 8 salidas TTL, 7 salidas de potencia (500ma) y cuatro entradas TTL. Es importante tener en cuenta que las salidas TTL entregan una tensin de 5v y solo se les puede exigir un mnimo de corriente, apenas suficiente para activar un transistor o bien un par de compuertas TTL. As mismo las entradas TTL deben ser alimentadas con una tensin mxima de 5v o de lo contrario el chip resultar daado. Esta tensin se obtiene desde VDD a travs del regulador U1 (7805). Las 7 salidas de potencia no son mas que la amplificacin mediante un array de transistores Darlington (ULN2003) de las salidas TTL 0 a 6 (la salida 7 no es usada). Este chip puede drenar una corriente mxima de 500ma, lo que es suficiente para activar un LED, un rel y hasta un motor DC de bajo consumo (tipo motor de grabador). La teora de funcionamiento es muy simple, solo se usan unas compuertas del tipo Buffer (74HC245) para poder conectarnos con seguridad al puerto paralelo, y un array de transistores Darlington (ULN2003) para brindar una salida de mayor potencia. Cabe aclarar que los dos integrados 74HC245 se alimentan del regulador de voltaje 7805, el cual se encarga de reducir la tensin de entrada (VDD) a 5v (Vcc). La tensin VDD debe estar comprendida entre 9 y 12v. La tensin de entrada VHH alimenta directamente al ULN2003 para obtener mayor voltaje en caso de querer manejar un rel o bien un pequeo motor. La tensin VHH debe estar comprendida entre 3 y 15v. VHH podr conectarse directamente a VDD (y de esa forma usar solo un fuente de alimentacin) siempre que esto no provoque problemas de ruido. En los siguientes diagramas se pueden apreciar un ejemplo de conexionado de un LED y un Rel a las salidas de potencia. En forma anloga podramos conectar tambin un pequeo motor DC.

Programa para manejo de la interfaz:


El siguiente es un programa hecho en Qbasic en donde se puede apreciar como se debe trabajar con el puerto paralelo y como se puede sacar provecho de la interfaz. Para visualizarlo o bajarlo a la PC haga click aqu. Tambin puede bajar el ejecutable (.exe) directamente si as lo desea haciendo clickaqu. El funcionamiento de este software es muy simple y bsico. Primero le solicitar que elija el puerto a usar (LPT1 o LPT2). Luego puede elegir "Leer Port" para recuperar el estado de los pins de entrada (0 a 3) o bien "Escribir Port" para cambiar el estado de los pins de salida (0 a 7). Recuerde que si cambiamos el pin de salida 0 , tambin se altera el mismo pin en la salida de potencia (solo pins 0 a 6, el 7 no tiene salida de potencia). Mediante el anlisis de este programa Basic se puede intentar hacer programas mas elaborados en lenguajes ms modernos.

Programa "Control para la IPP01" para W9x - NT - 2000 - XP


Aqu puedes bajar un programa realizado en VisualBasic (versin 6.0) que te permitir controlar las salidas y ver el estado de las entradas disponibles en la Interfaz para Puerto Paralelo compatible con Windows 95, 98, ME, NT, 2000 y XP.

Para bajarlo a tu PC has click aqu. Tambin puede bajar los fuentes haciendo click aqu. En nuestra seccin DOWNLOAD podrs encontrar las DLL necesarias para manjar el puerto paralelo desde el entorno Windows. La misma est siendo utilizada en el programa "Control para la IPP01" arriba mencionado.

Conclusin:
Esta interfaz es tan sencilla como til, ya que nos permite realizar todo tipo de pruebas sin la necesidad de usar un microcontrolador. Y de paso nos permite tomar experiencia en el manejo de seales mediante equipos microprocesados. Podemos por ejemplo conectar un pequeo robot y tomar datos de sus sensores y analizar las decisiones a tomar mediante un programa hecho en cualquier lenguaje de PC actual.

IMPORTANTE
Al conectar o desconectar la interfaz al puerto paralelo de la PC, se debe asegurar de que tanto la PC como la interfaz se encuentren apagadas. Caso contrario el puerto paralelo de la PC podra llegar a daarse permanentemente.

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

DISPLAY 7 SEGMENTOS Para controlar un display de 7 segmentos ocuparemos los 8 bits de salida del puerto. Haremos una interfse para proteger el puerto, esta se puede hacer con optoacopladores de 4n25. Para este ejemplo yo utilizar un Display de nodo comn, si alguien lo va a hacer con display de ctodo comun, habra que hacer un pequeo cambio al siguiente diagrama, en lugr de unir todos los emisores y mandarlos a tierra, unimos todos los colectores y los mandamos a VCC y en los emisores conectamos el nodo de cada segmento del display.

Este circuito puede montarse en protoboard, pero si alguien quiere puede hacerlo en baquelita, si

tienen pensado trabajar mucho tiempo con el puerto paralelo, esta interfse ya montada les ser muy til, yo les sugiero entonces que no monten sin el display y tampoco unan los emisores, pues si lo hacen y ocupan usar el transistor en otro arreglo ya no se va a poder modificar, simplemente pongan los optoacopladores y cables a las salidas. Les dejo el diagrama hecho en eagle junto con su board que esta a medio terminar, si les sirve, este es el link dedescarga. Descargas Diagrama+Board Funcionamiento El circuito anterior, no es la gran cosa, funciona as: Consta de Conector db25 Macho, solo sirve para conectar la interfse al PC Resistencias 470, para limitar la corriente que llega al optoacoplador evitando daar el puerto Optoacoplador 4n26, para aislar la etapa de control (PC) de lo que queremos controlar (display) Cuando uno de los pines del puerto paralelo se pone en alto, el led interno del optoacoplador se enciende, iluminando al fototransistor interno del 4n26, este se satura proporcionalmente a l luz que recibe del led. Este transistor esta siendo utilizado como un simple interruptor, al saturarse, permite que la corriente fluya desde el nodo del display hacia el ctodo del segmento correspondiente a ese bit, permitindole llegar a tierra con lo cul enciende este segmento. Si el pin del puerto paralelo esta en nivel bajo, el led no enciende, el fototransistor se va a corte y el segmento del display no enciende pues la corriente no puede fluir del colector hacia el emisor o tierra. Y eso es para cada segmento. Si se ha hecho con display de ctodo comn, el fototransistor tambin se comporta como un simple interruptor solo que ahora permite/bloquea la corriente de VCC hacia el nodo. Ahora vamos a ver el software, pero antes de empezar, cabe sealar que este display, por no ser precisamente para mostrar letras, algunas se muestran en minscula para distinguirlas de los nmeros, Otras como la "S" no fue posible as que qued igual que el "5" SOFTWARE EN C Para lograr que el programa detecte la letra que hemos presionado sin presionar ENTER, he utilizado la instruccin getche(), pero para ello hubo la necesidad de declarar una cadena de caracteres para cada smbolo a mostrar.
Cdigo:

char *a= "a", *b= "b", *c= "c", *d="d", *e="e", *f="f", *g="g", *h="h", *i="i", *j="j", *l="l", *o="o", *p="p", *r="r", *s="s", *u="u", *letra, *stopo="*", *n0="0", *n1="1", *n2="2", *n3="3", *n4="4", *n5="5", *n6="6", *n7="7", *n8="8", *n9="9", *punto= ".";
Ahora si utilizamos el getch y le decimos que lo que presionemos, lo guarde en la variable letra
Cdigo:

*letra=getch();

Ya guardado el smbolo qu ehemos presionado, se va a buscar cul es el que hemos presionado y que es lo que debe de hacer. Para comparar lo que ha guardad con las variables que declaramos, se utiliza
Cdigo:

strcmp
Esta instruccin, regresa un valor de "0", si las 2 cadenas que estamos comparando son iguales, entonces, hacemos la comparacin y le decimos que el resultado lo guarde en opci, compara lo que hay guardado en "letra" con la cadena que hemos guardado en cada variable, en este caso busca si hemos presionado un punto ".", si es as guarda un 0 en opci.
Cdigo:

opci=strcmp(letra, punto);
Ahora, lo anterior solo fue una comparacin, ahora hay que preguntarle si es cierto que hemos presionado ese caracter y utilizamos un IF, si lo que presionamos fue un puno, entonces en opci debe haber un 0 guardado, de lo contrario un 1.
Cdigo:

opci=strcmp(letra, punto); if(opci==0)


Y como si es cierto que presionamos un punto ".", entonces opci=0, ahora que debe de hacer el programa? pues sacar el dato correspondiente a los bits que deben encenderse para que en el display se encienda el punto. En este caso el punto solo necesita que se encienda el bit 8, entonces el dato a sacar, debemos pensarlo como si el puerto paralelo fuese un nmero binario, y sera as = 10000000, eso lo onvertimos a decimal y es igual a 128, entonces lo que debemos sacar es un 128.
Cdigo:

opci=strcmp(letra, punto); if(opci==0) outportb(para, 128);


Si no fue el punto "." lo que hemos presionado, entonces opci ser igual a 1 y como la condicin no se cumple, se brinca la lnea del outport y ahora empieza a checar el siguiente caracter por ejemplo la "A" y sigue el mismo porcedimiento que con el punto. Si no se ha presionado ninguna tecla, entonces esta dando vueltas checando una y otra vez hasta que se presione algo. Eso siempre y cuando no se presione "*" asterisco, he agregado una condicin, para que al presionarlo, stop tome un valor de 1
Cdigo:

opci=strcmp(letra,stopo); if(opci==0) stop=1;


Y cuando ello ocurre, la condicin del while principal ya no se cumple y se sale del ciclo terminando el programa.
Cdigo:

while(stop==0)

Y eso sera lo ms relevante que cre necesitaba explicacin. El cdigo completo es este
Cdigo:

#include #include #include #include #include

<conio.h> <graphics.h> <dos.h> <stdio.h> <string.h>

int paralelo(), para, contador=2, stop=0, opci; unsigned int _far *puntero_a_direccion; char *a= "a", *b= "b", *c= "c", *d="d", *e="e", *f="f", *g="g", *h="h", *i="i", *j="j", *l="l", *o="o", *p="p", *r="r", *s="s", *u="u", *letra, *stopo="*", *n0="0", *n1="1", *n2="2", *n3="3", *n4="4", *n5="5", *n6="6", *n7="7", *n8="8", *n9="9", *punto= "."; main() { paralelo(); outportb(para,0); while(stop==0) { clrscr(); printf("Presiona una letra"); *letra=getch(); opci=strcmp(letra, punto); if(opci==0) outportb(para, 128); opci=strcmp(letra, a); if(opci==0) outportb(para, 119); opci=strcmp(letra, b); if(opci==0) outportb(para, 124); opci=strcmp(letra, c); if(opci==0) outportb(para, 57); opci=strcmp(letra, d); if(opci==0) outportb(para,94); opci=strcmp(letra, e); if(opci==0) outportb(para, 121); opci=strcmp(letra, f);

if(opci==0) outportb(para, 113); opci=strcmp(letra, g); if(opci==0) outportb(para, 111); opci=strcmp(letra, h); if(opci==0) outportb(para, 118); opci=strcmp(letra, i); if(opci==0) outportb(para, 48); opci=strcmp(letra, j); if(opci==0) outportb(para, 30); opci=strcmp(letra, l); if(opci==0) outportb(para, 56); opci=strcmp(letra, o); if(opci==0) outportb(para, 92); opci=strcmp(letra, p); if(opci==0) outportb(para, 115); opci=strcmp(letra, r); if(opci==0) outportb(para, 80); opci=strcmp(letra, s); if(opci==0) outportb(para, 109); opci=strcmp(letra, u); if(opci==0) outportb(para, 62); /*Nmeros*/ opci=strcmp(letra, n1); if(opci==0) outportb(para, 6); opci=strcmp(letra, n2); if(opci==0) outportb(para, 91);

opci=strcmp(letra, n3); if(opci==0) outportb(para, 79); opci=strcmp(letra, n4); if(opci==0) outportb(para, 102); opci=strcmp(letra, n5); if(opci==0) outportb(para, 109); opci=strcmp(letra, n6); if(opci==0) outportb(para, 125); opci=strcmp(letra, n7); if(opci==0) outportb(para, 7); opci=strcmp(letra, n8); if(opci==0) outportb(para, 127); opci=strcmp(letra, n9); if(opci==0) outportb(para, 103); opci=strcmp(letra, n0); if(opci==0) outportb(para, 63); opci=strcmp(letra,stopo); if(opci==0) stop=1; } outportb(para, 0); } paralelo() { clrscr(); busqueda: puntero_a_direccion=(unsigned int _far *)0x00000408; printf("Rastreando Direccin de Puerto Paralelo"); while(contador<40) { printf("."); contador++; delay(30);

} clrscr(); para=*puntero_a_direccion; outportb(para, 0); }


Y como siempre, dejo un compilado por si desean descargarlo. <center>

</center> Descargas Software En C SOFTWARE EN VISUAL BASIC 2005 Para hacerlo en Visual Basic es ms sencillo, podemos aprovechar las variables de tipo "Objeto" para guardar ah lo que escribimos en el Texbox y luego compararlo. Ocuparemos un texbox y un botn El programa funciona as. 1.- Ingresamos un caracter en un Texbox 2.- Presionamos un Botn 3.- Mueve lo que hay en el texbox hacia una variable que llamaremos letra, puede ser de tipo String o Object. 4.- Compara el caracter almacenado en "Letra" para saber que es 5.- Cuando define que caracter es, saca por el puerto un valor predefinido. En cdigo sera as. Para hacer que al presionar el boton mueva lo del texbox hacia letra y despus se vaya a realizar la funcin"Define" que como su nombre lo dice se encarga de definir que caracter se ha ingresado.

Cdigo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click letra = TextBox1.Text decide() End Sub
Ahora, en la Funcin Define () Lo que hace es, preguntarse, lo que hay almacenado en letra es un 0? *Si es as, saca por el puerto un 63 *De lo contrario no hace nada y se hace una nueva pregunta Lo que hay almacenado en letra es un 1 y as sucesivamente
Cdigo:

If letra = "0" Then Out(&H378S, 63) If letra = "1" Then Out(&H378S, 6)


Las comillas se ocupan para que el programa busque una cadena de caracteres o STRING y no trata de reconocerlas como variables o nmeros. Hay que agregar una opcin para el caso de que no quisieramos mostra nada en el display, entonces utilizaremos un espacio en blanco " " Y la instruccin sera si hay un espacio en blanco, saca un 0
Cdigo:

If letra = " " Then Out(&H378S, 0)


La funcn Define () quedara as:
Cdigo:

Private Sub decide() If If If If If If If If If If If If If If If If If If If If If If If letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra = = = = = = = = = = = = = = = = = = = = = = = " " "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "l" "o" Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, 0) 63) 6) 91) 79) 102) 109) 125) 7) 127) 103) 119) 124) 57) 94) 121) 113) 111) 118) 48) 30) 56) 92)

If If If If If End Sub
Y eso es todo
Cdigo:

letra letra letra letra letra

= = = = =

"p" "r" "s" "u" "."

Then Then Then Then Then

Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S,

115) 80) 109) 62) 128)

Ms sencillo imposible

El cdigo completo quedara as:

Option Explicit On Public Class Display Dim letra As Object

Private Sub Display_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Text = "" decide() End Sub Private Sub decide() If If If If If If If If If If If If If If If If If If If If If If letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra letra = = = = = = = = = = = = = = = = = = = = = = " " "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "l" Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Then Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, 0) 63) 6) 91) 79) 102) 109) 125) 7) 127) 103) 119) 124) 57) 94) 121) 113) 111) 118) 48) 30) 56)

If If If If If If End Sub

letra letra letra letra letra letra

= = = = = =

"o" "p" "r" "s" "u" "."

Then Then Then Then Then Then

Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S, Out(&H378S,

92) 115) 80) 109) 62) 128)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click letra = TextBox1.Text decide() End Sub End Class
No hay que olvidar agregar el mdulo para la .dll El mdulo es as, cambi solo un poco del que ponamos en Visual basic 6
Cdigo:

Option Strict Off Option Explicit On Module Module1 Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32"(ByVal PortAddress As Short) As Short Public Declare Sub Out Lib "inpout32.dll" Alias "Out32"(ByVal PortAddress As Short, ByVal Value As Short) End Module
Y como ya es costumbre les dejo uno ya compilado

Descargas Software en Visual Basic

Como Usar Puerto Paralelo (C++, Visual Basic, Lab View)

En el foro se han abierto varios temas similares, solicitando informacin de como sacar datos con el puerto paralelo. Con la finalidad de evitar tantos temas repetidos, tratar de hacer un tutorial sencillo. Notas Antes de Empezar --------1.- Este tema permanecer cerrado para manterer la consecutividad en el tema, pero si tienen dudas comentarios, crticas o sugerencias, pueden hacerlas en. Comentarios Tuto Puerto Paralelo -------2.- En el caso de "Controlar 1 Bit" y "CONTROLAR TODOS LOS BITS DE SALIDA" Se ha hecho un ejemplo en Turbo c++ v3, LabView v 7.1 y Visual Basic Profesional v6 Pero a Partir del 3 "DISPLAY 7 SEGMENTOS " Ser con Visual Basic V8 Turbo c++ v3 y LabView 7.1 El nico que cambia es VB, la razn es que me gusta ms esta versin Si quieren pueden seguir hacindolos en vb6, solo hay que modificar un par de cosillas. Adems Visual Basic Puede Descargarse Gratuitamente Visual Basic 2005 Express Edition En esta versin se pueden abrir y convertir proyectos de Vb6 -------3.- Hasta hace das solo saba usar C, as que aprend Visual Basic para poder hacer este tuto. Si alguien esta interesado en aprender Visual Basic este tutorial me sirvi mucho. Curso Visual Basic -------4.- Har lo posible por hacer un ejemplo en C, en Visual Basic y Lab View. -------5.- Tomen todas las precauciones posibles con el puerto, compren opto acopladores 4n26 para trabajar con CD o moc3010 para CA, si llegaran a quemar su puerto o necesitan otro, pueden comprarlos, los venden por $300 para PCI. -------CONTROLAR 1 BIT Para empezar solo controlaremos un bit de salida para apagar/encender un dispositivo de CA desde el puerto Paralelo del PC, ya entendiendo esto se pueden controlar los dems Bits.

Material Necesario 1 Puerto paralelo libre 1 Moc3010m 1 Triac (A los Amperes que trabaje el dispositivo I=P/V) 1 Resistencia 560 Ohms 1 Resistencia 220 Ohms 1 Led 1 Conector Db25 Macho Cable para interconexiones (Puede ser del de Red de 8 Hilos) 1 Fusible (Al amperaje del dispositivo) 1 Clavija CA con cable Si quieren pueden hacer sus propios programas o bajar el que yo he hecho. El circuito es bastante sencillo, aunque si quieren primero pueden probar con un LED + 2 resistencias y un 4n26.

Funcionamiento: La R1, se encarga de limitar la corriente del puerto paralelo evitando que este se dae, esta conectada al pin2 del puerto paralelo que es el Bit Menos Significativo (LSB=Less Significative Bit) del dato de salida del Puerto. Del puerto paralelo podemos utilizar desde el pin 2 hasta el 9, para escribir un dato de 8 bits el pin 2 es el que utilizaremos y corresponde al bit1 o LSB. Si quisiramos controlar ms dispositivos podemos utilizar los dems bits. Puede verse que R1 se conecta al pin1 de un Moc3010m, este es un dispositivo de 6 patas que esta sirviendo como aislante entre la etapa de control (PC) y la de potencia (Dispositivo de CA, motor, foco, lavadora, televisin.). El moc, contiene en su interior un acoplamiento ptico entre un LED y un fotodiac, cuando ponemos a 1 lgico, el bit1 del puerto paralelo, llega corriente al Led interno del moc y fluye corriente a travs de este hasta La tierra del puerto Paralelo que va desde el pin18 hasta el 25. Mientras el Bit1 se mantenga en 1, el led esta encendido (pero no se ve pues esta adentro), frente al Led del Moc, existe un fotodiac, que es un dispositivo tpico de disparo, acta cuando entre sus 2 terminales hay cierto potencial llamado voltaje de disparo (regularmente son 35v). Pero este disparo no ocurre si el Led no le proporciona luz.

Por tanto mientras no haya pulso por parte del puerto LPT, el led no enciende y el fotodiac no se dispara, la haber pulso, el led enciende y el fotodiac esta habilitado para hacer los disparos. El triac es un dispositivo semiconductor, el cul conduce corriente en ambos sentidos por tanto puede conducir durante los 360 de una seal de CA. Su conduccin esta controlada por la compuerta, en la cul es recibido el disparo proporcionado por el fotodiac, cuando este manda un pulso a la compuerta del triac, este se comporta como un interruptor cerrado, haciendo que la corriente fluya hacia la Carga que puede ser cualquier cosa como un foco, motor, televisin. Si no hay disparo del Fotodiac, el Triac se comporta como un aislante o interruptor abierto y no llega corriente a la carga por lo cul no enciende. Ahora, en la lista aparece un Led, este puede ponerse en serie con el interno del moc solo para tener un indicador visual del estado del puerto. El fusible sera solo si el aparato no lo incluye ya, se pondra en serie con la carga. Y eso sera todo en cuanto a hardware se refiere. Software SOFTWARE PARA C En C sera de esta manera. Notas: *Adjunto el link para descargar el compilado *No lo explicar para evitar enfadar, pero si alguien tiene dudas respecto al cdigo, puede hacrmelas saber. *Como estamos usando dos.h solo puede correr en DOS, no he podido hacerlo funcionar en XP por que tiene los puertos Bloqueados, si alguien me dice como se lo agradecer mucho. *Empezamos con las libreras necesarias *La funcin PARALELO pueden o no agregarla, yo la pongo para que el programa solito busque la direccin del puerto casi siempre es la misma pero bueno introducirla manualmente.
Cdigo:

. Si lo quitan tendrn que declararla o

#include #include #include #include

<conio.h> <dos.h> <stdio.h> <string.h>

int paralelo(), para, opc=0, contador, estado=0; unsigned int _far *puntero_a_direccion; char *uno="1", *dos="2", *tres="3", *letra;

main() { paralelo(); outportb(para,0); while(opc!=3) { clrscr(); *letra=getch(); opc=strcmp(letra,uno); if(opc==0) { outportb(para,1); estado=1; } else { opc=strcmp(letra,dos); if(opc==0) { outportb(para,0); estado=0; } else { opc=strcmp(letra,tres); if(opc==0) { gotoxy(30,20); printf("Aplicacin Finalizada"); delay(1000); opc=3; } else { gotoxy(30,20); printf("Presiona una opcin v*lida"); delay(1000); } } } } outportb(para,0); } paralelo() { clrscr(); busqueda: puntero_a_direccion=(unsigned int _far *)0x00000408; printf("Rastreando Direccin de Puerto Paralelo"); while(contador<40)

{ printf("."); contador++; delay(35); } clrscr(); para=*puntero_a_direccion; outportb(para, 0); }

Descargas Software en C Solo Funciona Para Win9x Razn: En Xp deben desbloquearse los puertos

SOFTWARE PARA VISUAL BASIC En Visual Basic es ms sencillo, podemos solo agregar 2 botones y lo dems es cosa de presentacin. El comando es Out &direccin.dato El cdigo sera as: Notas: Hay que agregar un .dll que esta adjunto en el 1bitlptfvisual.zip, a la carpeta del sistema, yo lo pegu en Windows, system y system32.

Adjunto el compilado por si lo quieres ya hecho, no lo explicar por que esta muy sencillo, pero si alguien tiene dudas respecto al cdigo, puede hacrmelas saber Para el Form
Cdigo:

Private Sub Command1_Click() Out &H378, 0 End Sub Private Sub Command2_Click() Out &H378, 1 End Sub
Adems debemos agregar un Mdulo par ala Dll
Cdigo:

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)

Descargas Software en Visual Basic

SOFTWARE EN LABVIEW Si creyeron que en Visual Basic es fcil, pues esperen trabajar con Lab View, en 5 min, se puede hacer lo que hicimos con los anteriores programas. Las versiones superiores a Lab View 5 permiten utilizar el puerto paralelo. Yo estoy usando la 7.1 y permite compilar las simulaciones, pero no he podido comprobar si funciona en Pc's sin Lab View, dejar un instaler por si alguien "QUE NO" tenga instalado Lab View, me hace favor de probarlo. Para empezar, ocupamos poner un Interruptor Bolean, un convertidor de Bolean String a Number , una constante numrica en la que pondremos la direccin del puerto en decimal =888 y un Out Port

Tal como en la imagen siguiente:

No olviden meterlo dentro de un ciclo while

Descargas Software LabView Se Necesita tener Instalado LabView O El Visor De LabView Para Poder Ejecutarlo.

CONTROLAR TODOS LOS BITS DE SALIDA Ya vimos como controlar un solo Bit, pues el proceso para hacerlo con todos es similar. Disponemos de 8 bits de salida o lo que es igual a 1byte. En fin, para encender el primer bit debamos enviar un 1, para encender los dems debemos pensar en el puerto como un nmero binario, los 1 representan un estado "alto" y los 0 un estado "bajo". Si quieremos, encender todos los 8 bits, entonces debemos mandar un 11111111, podemos mandarlo en decimal y el mismo programa lo pasa a binario, enviaremos entonces un 255. Y as es para cada nmero. 000=00000000 001=00000001 002=00000010 ... 255=11111111

En este caso no explicar el Hardware externo, ya que no hay ninguno

, simplemente estamos

viendo como controlar los bits sin nada conectado. As que nos pasamos directo al Software. SOFTWARE EN C En C, puede ser de esta manera: La funcin paralelo, lo que hace es buscar la direccin del puerto y almacenarla. Si queremos que al salir del programa se apaguen todos los bits debemos mandar un
Cdigo:

outport(para,0);
De lo contrario al salir del programa se quedarn tal cul los hayamos dejado. La explicacin del programa es un poc extensa, as que me la ahorrar, si alguien no lo entiende, me avisa y entonces lo explico.
Cdigo:

#include #include #include #include #include #include

<conio.h> <graphics.h> <dos.h> <stdio.h> <string.h> <math.h>

int paralelo(), para, contador=2, stop=0, opci, arreglo[8], salida(), datum[8]; unsigned int _far *puntero_a_direccion; char *letra, *stopo="*", *n0="0", *n1="1", *n2="2", *n3="3", *n4="4", *n5="5", *n6="6", *n7="7", *n8="8"; long dato=0; float resultado; main() { paralelo(); outportb(para,0); contador=0; while(contador<8) { arreglo[contador]=0; contador++; }

while(stop==0) { clrscr(); printf("Presiona una nmero del 0-7\nPara Salir Presiona *"); *letra=getch(); opci=strcmp(letra, n0); if(opci==0)

arreglo[0]=arreglo[0]+1; opci=strcmp(letra, n1); if(opci==0) arreglo[1]=arreglo[1]+1; opci=strcmp(letra, n2); if(opci==0) arreglo[2]=arreglo[2]+1; opci=strcmp(letra, n3); if(opci==0) arreglo[3]=arreglo[3]+1; opci=strcmp(letra, n4); if(opci==0) arreglo[4]=arreglo[4]+1; opci=strcmp(letra, n5); if(opci==0) arreglo[5]=arreglo[5]+1; opci=strcmp(letra, n6); if(opci==0) arreglo[6]=arreglo[6]+1; opci=strcmp(letra, n7); if(opci==0) arreglo[7]=arreglo[7]+1; opci=strcmp(letra,stopo); if(opci==0) stop=1; salida(); } } salida() { contador=0; clrscr(); dato=0; while(contador<8) { datum[contador]=((arreglo[contador])%2)*(pow(2,contador)); dato=dato+datum[contador]; contador++; } outportb(para,dato);

} paralelo() { clrscr(); busqueda: puntero_a_direccion=(unsigned int _far *)0x00000408; printf("Rastreando Direccin de Puerto Paralelo"); while(contador<40) { printf("."); contador++; delay(30); } clrscr(); para=*puntero_a_direccion; outportb(para, 0); }

Si quieren, pueden descargar el que yo he compilado. Descargas Software en C

SOFTWARE EN VISUAL BASIC La ocasin anterior, el programa en visual fue ms sencillo, pero en esta, la verdad es que me ha costado ms por los arreglos que he hecho con los checkbox.

Los Bits pueden encenderse o apagarse desde los 8 checkbox o puede ingresarse el dato en el texbox. Para hacerlo, hubo que agregar 1 checkbox y copiarlo y pegarlo 7 veces para hacer una matriz, entonces se simplifica el trabajo pues solo damos la instruccin una vez y solo debemos indexarlos para hacer referencia a cada uno. Para empezar, ocuparemos un mdulo para la dll
Cdigo:

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)
El cdigo para hacer que revise los checkbox es as
Cdigo:

Private Sub revisa() contador = 0 dato = 0 While contador < 8 If Check1(contador).Value = 1 Then arreglo(contador + 1) = 1 Else arreglo(contador + 1) = 0 dato = dato + (arreglo(contador + 1) * (2 ^ contador)) contador = contador + 1 Wend Text1 = dato Out &H378, dato End Sub

Private Sub Check1_Click(Index As Integer)

revisa End Sub


Lo de poder ingresar el dato desde el texbox es adiciona y no es necesario para el funcionamiento del programa. Descargas Software Visual basic

SOFTWARE EN LABVIEW Como la ocasin anterior, en LabView la programacin result ms sencilla, el nico detalle es que no pude hacer que los chek buttons se selccionen solos cuando el dato es ingresado, por ello agregu LEDS Empezamos aadiendo 8 checkbuttons y les agregamos un convertidor de Boleano a Nmero.

Despus, ocupamos darle un peso a cada salida, deben de estar en base 2, el primero se eleva (2^0)multiplicado por 0 o 1 dependiendo del estado del check button. Si esta presionado tendramos (2^0)(1)=1 Para el segundo check (2^1)(check) Si el check esta presionado (2^1)(1)=2 si no esta activo (2^1)(0)=0

Las salidas de cada bit elevado a su potencia, al final las sumaremos para sacar el dato completo y como son muchas, agregamos una suma mltiple, le hacemos de 8 y listo .

La salida de la suma, la mandamos a un indicador numrico o si no quieren visualisarlo, simplemente lo mandan al outport

Finalmente, metemos todo dentro de un ciclo while y le ponemos un bolean true para que se repita siempre y quedara as:

Este Es EL Que Yo He Compilado, Si Quieren Pueden Descargarlo En El Link De Abajo

Descargas Software LabView Se Necesita tener Instalado LabView O El Visor De LabView Para Poder Ejecutarlo. Visor LabView Si No tiene LabView, Puede Instalar Este Programa Que Le Servir Para Poder Ejecutarlo. Ocupa Xp. Resmen Descargas Software Visual basic Software en C Solo Funciona en Win9x, en Xp se deben desbloquear los puertos. Software LabView Se Necesita tener Instalado LabView O El Visor De LabView Para Poder Ejecutarlo. Visor LabView Si No tiene LabView, Puede Instalar Este Programa Que Le Servir Para Poder Ejecutarlo. Ocupa Xp.

Por el momento aqu termina, cualquier error que encuentre agradecera me avisen o si tienen el cdigo para algn otro compilador tambin es bienvenido.

Programa y cdigo fuente en VB6 que permite controlar el puerto paralelo , enviandole seales para activar dispositivos conectados a este. Incluye pequeas rutinas de ejemplos para cuando se conecte el puerto paralelo a un juego de luces. Estas rutinas hacen destellar las luces de tal manera de formar distintos motivos.

Para armar el circuito, hay muchas posibilidades, la mas econmica que puedes usar para probar el programa y mandar seales al puerto consite en utilizar diodos led

Los diodos led son como lucesitas que podemos encontrar en cualquier lado como por ejem las luces que indican el encendido de tu pc, Estas lucesitas las consigues por centavos en cualquier casa de electrnica y para armar el circuito todo lo que tienes que hacer es conectar los diodos led poniendo una pata seguida de una resistencia de 470 ohms en la salida de color verde del

cable paralelo y otra pata en el polo negativo de la pc o tambien el negativo de una alimentacion externa (esta alimentacion externa debe ser un transformador que entregue corriente continua, yo prob con uno de 12v y anduvo joya, al estar enchufado el tranformador en la misma linea que la pc los negativos son los mismos y lo puedes tomar facilmente de ahi gracias por el comentario) Claro que para conseguir las salidas del cable paralelo necesitaras sacrificar algn cable de alguna impresora vieja cortandole la punta que va a la impresora, con esto podras ver un monton de cablecitos de distintos colores , como los que muestra la figura arriba Volviendo al circuito, ten en cuenta que debes coincidir las patas negativas de los diodos led con el polo negativo de la alimentacion externa, Para identificar cual es el polo negativo del led , debes mirarlo a la luz y veras que en el interior del led el polo negativo es el que tiene una plaquita mas grande, mietras que el positivo es solo un palito.

Para controlar las entradas( identificar cuando alguien presiona un boton) solo debes poner un interruptor entre alguna de las entradas S (rojas) y masa externa Armar todo este circuito te costara aprox 1 dolar (dependiendo tu pais), pero como ves es super econmico y te permitira experimentar con el puerto antes de pasar a un circuito mayor que te permita controlar dispositivos

http://logix4u.net/component/content/article/14-parallel-port/15-a-tutorial-on-parallel-portinterfacing http://logix4u.net/component/content/article/14-parallel-port/16-inpout32dll-for-windows982000ntxp http://www.forosdeelectronica.com/f26/programa-control-luces-puerto-paralelo-10262/

http://www.forosdelweb.com/f29/controlar-usb-con-c-794909/ http://dev.emcelettronica.com/serial-port-communication-c http://www.c-sharpcorner.com/Forums/Thread/53551/ http://www.todopic.com.ar/foros/index.php?topic=2260.0 http://www.taringa.net/posts/downloads/4430288/Control-de-Puerto-Paralelo.html http://electronica-pic.blogspot.mx/2010/01/interfaz-puerto-paralelo.html http://electronica-pic.blogspot.mx/ http://www.slideshare.net/Metaconta/presentations http://support.microsoft.com/kb/823179 http://www.mygnet.net/codigos/csharp/varios/programacion_del_puerto_paralelo_solo_salida.1 764 http://www.google.com.mx/search?sourceid=chrome&ie=UTF8&q=prgramas+para+usar+el+puerto+paralelo#hl=es&sclient=psyab&q=como+programar+el+puerto+paralelo+en+c+sharp&oq=como+programar+el+puerto+paral elo+en+c+sharp&aq=f&aqi=qw1&aql=&gs_l=serp.3..33i21.29l6360l2l6475l15l12l3l0l0l0l453l3914l23j3j5l14l0.frgbld.&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=bbd09e646cd14d74&biw=1241 &bih=567
electronica-pic.blog spot.com/2010/07/interfaz-puerto-paralelo-lpt.html

http://www.todopic.com.ar/foros/index.php?topic=26052.0 http://social.msdn.microsoft.com/forums/es-ES/vcses/thread/ce07aa7e-5720-4ef1-821f6ef419a6ac02 http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/csharp/respuestas/2221533/controlar-puerto-paralelo-urgente http://perso.wanadoo.es/luis_ju/puerto/imagen/port01.gif http://www.codeproject.com http://www.lawebdelprogramador.com/

You might also like