usando el puerto paralelo de una pc

37
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 versión del software de control para Windows 9x, NT, 2000 y XP Introducción: El puerto paralelo de una PC es ideal para ser usado como herramienta de control de motores, relés, LED's, etc. El mismo posee un bus de datos de 8 bits (Pin 2 a 9) y muchas señales de control, algunas de salida y otras de entrada que también pueden ser usadas fácilmente. 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 dirección hexadecimal del puerto LPT1 es igual a 0x378 (888 en decimal) y 0x278 (632 en decimal) para el LPT2. Esto se puede verificar fácilmente 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 dirección 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 descripción del puerto paralelo: El puerto paralelo de un PC posee un conector de salida del tipo DB25 hembra cuyo diagrama y señales utilizadas podemos ver en la siguiente figura:

Upload: augustrush2291

Post on 25-Jul-2015

429 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Usando El Puerto Paralelo de Una PC

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 versión del software de control para Windows 9x, NT, 2000 y XP

 

Introducción:

 El puerto paralelo de una PC es ideal para ser usado como herramienta de control de motores, relés, LED's, etc. El mismo posee un bus de datos de 8 bits (Pin 2 a 9) y muchas señales de control, algunas de salida y otras de entrada que también pueden ser usadas fácilmente.

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 dirección hexadecimal del puerto LPT1 es igual a 0x378 (888 en decimal) y 0x278 (632 en decimal) para el LPT2. Esto se puede verificar fácilmente 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 dirección 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 descripción del puerto paralelo:

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

 

Page 2: Usando El Puerto Paralelo de Una PC

 

Si deseamos escribir un dato en el bus de salida de datos (pin 2 a 9) solo debemos escribir el byte correspondiente en la dirección 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 deberán 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 dirección hexadecimal 0x379 (889 en decimal) si trabajamos con el LPT1 o bien leer la dirección 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 más gráfica:

Escritura: Salida de DatosEscritura en dirección 0x378 (LPT1) o 0x278 (LPT2)

DATO BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

DB25 Pin 9 Pin 8 Pin 7 Pin 6 Pin 5 Pin 4 Pin 3 Pin2

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

CN4 No usar HP 6 HP 5 HP 4 HP 3 HP 2 HP 1 HP 0

 

Lectura: Entrada de DatosLectura en dirección 0x379 (LPT1) o 0x279 (LPT2)

DATO BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

Page 3: Usando El Puerto Paralelo de Una PC

DB 25 No usar

Pin 10

Pin 12

Pin 13

Pin 15

No usar

No usar

No usar

CN6 No usar

Input 3

Input 2

Input 1

Input 0

No usar

No usar

No usar

 

 

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 tensión de 5v y solo se les puede exigir un mínimo 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 tensión máxima de 5v o de lo contrario el

chip resultará dañado. Esta tensión se obtiene desde VDD a través del regulador U1 (7805).

Las 7 salidas de potencia no son mas que la amplificación 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 máxima 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 teoría 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 tensión de entrada (VDD) a 5v (Vcc). La tensión VDD debe estar comprendida entre 9 y 12v.

La tensión de entrada VHH alimenta directamente al ULN2003 para obtener mayor voltaje en caso de querer manejar un relé o bien un pequeño motor. La tensión VHH debe estar comprendida entre 3 y 15v. VHH podrá conectarse directamente a VDD (y de esa forma usar solo un fuente de alimentación) 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 análoga podríamos conectar también un pequeño motor DC.

 

Page 4: Usando El Puerto Paralelo de Una PC

  

 

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í. También puede bajar el ejecutable (.exe)

directamente si así lo desea haciendo clickaquí.

El funcionamiento de este software es muy simple y básico. 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 , también se altera el mismo pin en la salida de potencia (solo pins 0 a 6, el 7 no tiene salida de potencia).

Mediante el análisis de este programa Basic se puede intentar hacer programas mas elaborados en lenguajes más modernos.

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

Aquí puedes bajar un programa realizado en VisualBasic (versión 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.

Page 5: Usando El Puerto Paralelo de Una PC

Para bajarlo a tu PC has click aquí. También puede bajar los fuentes haciendo click aquí.

En nuestra sección DOWNLOAD podrás 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.

 

Conclusión:

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 señales mediante equipos microprocesados.

Podemos por ejemplo conectar un pequeño 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 podría llegar a dañarse permanentemente.

 

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

Page 6: Usando El Puerto Paralelo de Una PC

DISPLAY 7 SEGMENTOS

Para controlar un display de 7 segmentos ocuparemos los 8 bits de salida del puerto.

Haremos una interfáse para proteger el puerto, esta se puede hacer con optoacopladores de 4n25.

Para este ejemplo yo utilizaré un Display de ánodo común, si alguien lo va a hacer con display de cátodo comun, habría que hacer un pequeño 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.

Page 7: Usando El Puerto Paralelo de Una PC

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 interfáse ya montada les será muy

Page 8: Usando El Puerto Paralelo de Una PC

ú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.

DescargasDiagrama+Board

Funcionamiento

El circuito anterior, no es la gran cosa, funciona así:

Consta de

Conector db25 Macho, solo sirve para conectar la interfáse al PC Resistencias 470, para limitar la corriente que llega al optoacoplador evitando dañar el puertoOptoacoplador 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 cátodo del segmento correspondiente a ese bit, permitiéndole llegar a tierra con lo cuál 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 cátodo común, el fototransistor también 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 señalar que este display, por no ser precisamente para mostrar letras, algunas se muestran en minúscula para distinguirlas de los números, 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 instrucción getche(), pero para ello hubo la necesidad de declarar una cadena de caracteres para cada símbolo a mostrar.

Código:

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 letraCódigo:

*letra=getch();

Ya guardado el símbolo qu ehemos presionado, se va a buscar cuál 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 

Page 9: Usando El Puerto Paralelo de Una PC

Código:

strcmp

Esta instrucción, regresa un valor de "0", si las 2 cadenas que estamos comparando son iguales, entonces, hacemos la comparación 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.Código:

opci=strcmp(letra, punto);

Ahora, lo anterior solo fue una comparación, 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.

Código:

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 número binario, y sería así = 10000000, eso lo onvertimos a decimal y es igual a 128, entonces lo que debemos sacar es un 128.

Código:

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 condición no se cumple, se brinca la línea 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 condición, para que al presionarlo, stop tome un valor de 1Código:

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

Y cuando ello ocurre, la condición del while principal ya no se cumple y se sale del ciclo terminando el programa.Código:

while(stop==0)

Y eso sería lo más relevante que creí necesitaba explicación.

El código completo es esteCódigo:

Page 10: Usando El Puerto Paralelo de Una PC

#include <conio.h>#include <graphics.h>#include <dos.h>#include <stdio.h>#include <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);

Page 11: Usando El Puerto Paralelo de Una PC

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);

/*N£meros*/ 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)

Page 12: Usando El Puerto Paralelo de Una PC

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 Direcci¢n de Puerto Paralelo"); while(contador<40) { printf("."); contador++; delay(30); } clrscr(); para=*puntero_a_direccion;

Page 13: Usando El Puerto Paralelo de Una PC

outportb(para, 0);}

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

<center>

</center>

DescargasSoftware En C

SOFTWARE EN VISUAL BASIC 2005

Para hacerlo en Visual Basic es más 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 botón

El programa funciona así.1.- Ingresamos un caracter en un Texbox2.- Presionamos un Botón3.- 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 código sería así.

Para hacer que al presionar el boton mueva lo del texbox hacia letra y después se vaya a realizar la función"Define" que como su nombre lo dice se encarga de definir que caracter se ha ingresado.

Código:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Page 14: Usando El Puerto Paralelo de Una PC

letra = TextBox1.Text decide() End Sub

Ahora, en la Función 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í sucesivamenteCódigo:

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 números.

Hay que agregar una opción para el caso de que no quisieramos mostra nada en el display, entonces utilizaremos un espacio en blanco " "

Y la instrucción sería si hay un espacio en blanco, saca un 0Código:

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

La funcíón Define () quedaría así:Código:

Private Sub decide()

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

Page 15: Usando El Puerto Paralelo de Una PC

If letra = "s" Then Out(&H378S, 109) If letra = "u" Then Out(&H378S, 62) If letra = "." Then Out(&H378S, 128)

End Sub

Y eso es todo   Más sencillo imposible 

El código completo quedaría así:Código:

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

Page 16: Usando El Puerto Paralelo de Una PC

If letra = "r" Then Out(&H378S, 80) If letra = "s" Then Out(&H378S, 109) If letra = "u" Then Out(&H378S, 62) If letra = "." Then Out(&H378S, 128)

End Sub

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 módulo para la .dllEl módulo es así, cambió solo un poco del que poníamos en Visual basic 6Código:

Option Strict OffOption Explicit OnModule 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

DescargasSoftware en Visual Basic

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

Page 17: Usando El Puerto Paralelo de Una PC

En el foro se han abierto varios temas similares, solicitando información 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, críticas 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 razón es que me gusta más esta versión 

Si quieren pueden seguir haciéndolos en vb6, solo hay que modificar un par de cosillas.

Además Visual Basic Puede Descargarse Gratuitamente

Visual Basic 2005 Express Edition

En esta versión se pueden abrir y convertir proyectos de Vb6

--------

3.- Hasta hace días solo sabía 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 demás Bits. 

Page 18: Usando El Puerto Paralelo de Una PC

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 dañe, 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 quisiéramos controlar más dispositivos podemos utilizar los demás 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, televisión.).

El moc, contiene en su interior un acoplamiento óptico entre un LED y un fotodiac, cuando ponemos a

1 lógico, el bit1 del puerto paralelo, llega corriente al Led interno del moc y fluye corriente a través 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 típico de disparo, actúa 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

Page 19: Usando El Puerto Paralelo de Una PC

dispara, la haber pulso, el led enciende y el fotodiac esta habilitado para hacer los disparos.

El triac es un dispositivo semiconductor, el cuál conduce corriente en ambos sentidos por tanto puede

conducir durante los 360° de una señal de CA.

Su conducción esta controlada por la compuerta, en la cuál 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, televisión.

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 cuál 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 sería solo si el aparato no lo incluye ya, se pondría

en serie con la carga.

Y eso sería todo en cuanto a hardware se refiere.

Software

SOFTWARE PARA C

En C sería de esta manera. 

Notas:

*Adjunto el link para descargar el compilado

*No lo explicaré para evitar enfadar, pero si alguien tiene dudas respecto al código, puede hacérmelas

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 librerías necesarias

*La función PARALELO pueden o no agregarla, yo la pongo para que el programa solito busque la

dirección del puerto casi siempre es la misma pero bueno  . Si lo quitan tendrán que declararla o

introducirla manualmente.

Código:

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

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

Page 20: Usando El Puerto Paralelo de Una PC

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("Aplicaci¢n Finalizada"); delay(1000); opc=3; } else { gotoxy(30,20); printf("Presiona una opci¢n v*lida"); delay(1000); } } } } outportb(para,0); }

paralelo() { clrscr(); busqueda: puntero_a_direccion=(unsigned int _far *)0x00000408; printf("Rastreando Direcci¢n de Puerto Paralelo"); while(contador<40)

Page 21: Usando El Puerto Paralelo de Una PC

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

Descargas

Software en C Solo Funciona Para Win9x Razón: En Xp deben desbloquearse los puertos

SOFTWARE PARA VISUAL BASIC

En Visual Basic es más sencillo, podemos solo agregar 2 botones y lo demás es cosa de presentación.

El comando es Out &dirección.dato

El código sería 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

Page 22: Usando El Puerto Paralelo de Una PC

alguien tiene dudas respecto al código, puede hacérmelas saber

Para el FormCódigo:

Private Sub Command1_Click()Out &H378, 0End Sub

Private Sub Command2_Click()Out &H378, 1End Sub

Además debemos agregar un Módulo par ala Dll

Código:

Public Declare Function Inp Lib "inpout32.dll" _Alias "Inp32" (ByVal PortAddress As Integer) As IntegerPublic 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 fácil, 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 numérica en la que pondremos la dirección del puerto en decimal =888 y un Out Port

Tal como en la imagen siguiente:

Page 23: Usando El Puerto Paralelo de Una PC

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 debíamos enviar un 1, para encender los demás debemos pensar en el puerto como un número 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 número.000=00000000001=00000001002=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.

Page 24: Usando El Puerto Paralelo de Una PC

Así que nos pasamos directo al Software.

SOFTWARE EN CEn C, puede ser de esta manera:La función paralelo, lo que hace es buscar la dirección del puerto y almacenarla.Si queremos que al salir del programa se apaguen todos los bits debemos mandar un 

Código:

outport(para,0);

De lo contrario al salir del programa se quedarán tal cuál los hayamos dejado.

La explicación del programa es un poc extensa, así que me la ahorraré, si alguien no lo entiende, me avisa y entonces lo explico.

Código:

#include <conio.h>#include <graphics.h>#include <dos.h>#include <stdio.h>#include <string.h>#include <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 n£mero del 0-7\nPara Salir Presiona *"); *letra=getch();

opci=strcmp(letra, n0); if(opci==0) arreglo[0]=arreglo[0]+1;

Page 25: Usando El Puerto Paralelo de Una PC

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);}

Page 26: Usando El Puerto Paralelo de Una PC

paralelo(){ clrscr(); busqueda: puntero_a_direccion=(unsigned int _far *)0x00000408; printf("Rastreando Direcci¢n 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.

DescargasSoftware en C

SOFTWARE EN VISUAL BASICLa ocasión anterior, el programa en visual fue más sencillo, pero en esta, la verdad es que me ha costado más por los arreglos que he hecho con los checkbox.

Page 27: Usando El Puerto Paralelo de Una PC

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 instrucción una vez y solo debemos indexarlos para hacer referencia a cada uno.

Para empezar, ocuparemos un módulo para la dll

Código:

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 código para hacer que revise los checkbox es así

Código:

Private Sub revisa()contador = 0dato = 0While 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)

Page 28: Usando El Puerto Paralelo de Una PC

revisaEnd Sub

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

DescargasSoftware Visual basic 

SOFTWARE EN LABVIEW

Como la ocasión anterior, en LabView la programación resultó más 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 añadiendo 8 checkbuttons y les agregamos un convertidor de Boleano a Número.

Después, 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 tendríamos (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 ´múltiple, le hacemos de 8 y listo  .

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

Page 29: Usando El Puerto Paralelo de Una PC

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

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

Page 30: Usando El Puerto Paralelo de Una PC

DescargasSoftware 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.

Resúmen DescargasSoftware 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 agradecería me avisen o si tienen el código para algún otro compilador también es bienvenido.

Page 31: Usando El Puerto Paralelo de Una PC

Programa y código fuente en VB6 que permite controlar el puerto paralelo ,

enviandole señales para activar dispositivos conectados a este.

Incluye pequeñas 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 económica que puedes

usar para probar el programa y  mandar señales 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

Page 32: Usando El Puerto Paralelo de Una PC

por centavos en cualquier casa de electrónica 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

algún 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 económico y te permitira experimentar con el puerto antes de

pasar a un circuito mayor que te permita controlar dispositivos

Page 33: Usando El Puerto Paralelo de Una PC

http://logix4u.net/component/content/article/14-parallel-port/15-a-tutorial-on-parallel-port-interfacing

http://logix4u.net/component/content/article/14-parallel-port/16-inpout32dll-for-windows-982000ntxp

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.1764

http://www.google.com.mx/search?sourceid=chrome&ie=UTF-8&q=prgramas+para+usar+el+puerto+paralelo#hl=es&sclient=psy-ab&q=como+programar+el+puerto+paralelo+en+c+sharp&oq=como+programar+el+puerto+paralelo+en+c+sharp&aq=f&aqi=q-w1&aql=&gs_l=serp.3..33i21.29l6360l2l6475l15l12l3l0l0l0l453l3914l2-3j3j5l14l0.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-821f-6ef419a6ac02

http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/c-sharp/respuestas/2221533/controlar-puerto-paralelo-urgente

http://perso.wanadoo.es/luis_ju/puerto/imagen/port01.gif

Page 34: Usando El Puerto Paralelo de Una PC

http://www.codeproject.com

http://www.lawebdelprogramador.com/