La siguiente tabla muestra la función de cada uno de los pines utilizados.
PIN | Descripción | Símbolo |
2 | Salida de datos 1 | DO 0 |
3 | Salida de datos 2 | DO 1 |
4 | Salida de datos 3 | DO 2 |
5 | Salida de datos 4 | DO 3 |
6 | Salida de datos 5 | DO 4 |
7 | Salida de datos 6 | DO 5 |
8 | Salida de datos 7 | DO 6 |
9 | Salida de datos 8 | DO 7 |
18 | Masa de datos | GND |
Para conectarlo al circuito de control, que explicaremos más adelante, utilizaremos un conector DB-9 macho, con un cable que se muestra en la siguiente imagen.
El cable a utilizar debe ser de por lo menos 9 hilos.
Existen cables para computación desde 9 hasta 25 hilos. El de 9 sería el ideal.
También están los cables para instalaciones telefónicas que tienen 4 pares (8 hilos) y un neutro.
Cualquiera de los dos sirve. En lo posible, utilizar el primero.
Salvo el conector del puerto paralelo, los demás conectores pueden cambiarse por cualquier tipo. Solo habrá que rediseñar los circuitos de control y de fuerza.
La siguiente tabla muestra la equivalencia entre los pines del DB-25 y del DB-9. Esta distribución es la que utilicé, pero puede alterarse modificando el diseño.
PIN DB-25 | PIN DB-9 | Descripción | Símbolo |
2 | 1 | Salida de datos 1 | DO 0 |
3 | 2 | Salida de datos 2 | DO 1 |
4 | 3 | Salida de datos 3 | DO 2 |
5 | 4 | Salida de datos 4 | DO 3 |
6 | 6 | Salida de datos 5 | DO 4 |
7 | 7 | Salida de datos 6 | DO 5 |
8 | 8 | Salida de datos 7 | DO 6 |
9 | 9 | Salida de datos 8 | DO 7 |
18 | 5 | Masa de datos | GND |
Cada pin del DB-25 debe conectarse al equivalente del DB-9 mediante uno de los cables del conductor utilizado. Anotar los colores para no confundirse.
El orden de los pines en los conectores es el siguiente:
Conector | Nombre | Contactos |
DB-9 hembra | 9 agujeros | |
DB-9 macho | 9 pines | |
DB-25 hembra | 25 agujeros | |
DB-25 macho | 25 pines |
Recuerden que deben tener cuidado al soldar los cables, tratando de que no queden los cables de datos tocándose entre si, y mucho menos tocando el cable de masa, ya que generaríamos un cortocircuito, llegando a quemar el puerto paralelo.
Programación en Visual Basic para la interfaz de usuario
Luego de tener preparado el cable de datos, pasaremos a crear una interfaz de usuario con Visual Basic.
Para ello, se debe crear un formulario que permita pulsar botones, y estos botones serán los encargados de llamar a programas hechos en C++, que controlarán el puerto.
Todavía no se por que, pero en las computadoras nuevas, con Windows XP, hasta que no se cierra el programa hecho en C++, el puerto no cambia de valor. Cosa que no sucede con computadoras viejas.
Una vez hecha la interfaz en Visual Basic, dentro de cada botón escribiremos el siguiente código
Shell "C:programaspuerto1.exe"
Esta función de Visual Basic permite llamar a programas externos. El path de sus programas dependerá de cómo los guardó. El ejemplo es en mi caso.
En la siguiente imagen se muestra como queda el código dentro del evento Click del botón "cmd_cero".
Mi sistema consta de tres botones, uno para encender una salida por vez, uno para generar un valor en binario, y otro para apagar todas las salidas.
Se pueden crear sistemas con muchas combinaciones. Solo habrá que agregar más botones y escribir más programas en C++.
Mi interfaz gráfica es la siguiente:
La interfaz gráfica depende del gusto de cada usuario. Mi ejemplo es bien sencillo, pero puede hacerse más vistoso, sin descuidar lo más importante, que sea eficiente.
Programación en C++ para controlar el LPT1
C++ permite crear programas ejecutables para entorno DOS.
La principal ventaja de este lenguaje es su economía de sintaxis y su potencia, ya que nos permite manejar directamente el hardware de la computadora.
Los valores enviados a los puertos serán controlados por medio de programas escritos en C++.
La dirección del puerto paralelo, en hexadecimal, se expresa de alguna de estas formas, dependiendo de la computadora:
&h378 &h278 &h3bc
Para crear el programa en C++, en el header deben incluir la librería <conio.h>.
La función para enviar un dato al puerto es:
Outport(puerto,valor);
Donde puerto es su dirección en hexadecimal y valor es un número entre 0 y 255.
En Windows XP es necesario generar esta función dos veces, para que el valor llegue a la salida.
Un ejemplo, enviando un 1 al puerto:
#include<conio.h>
void main()
{
int puerto=0x378;
outport(puerto,1);
outport(puerto,1);
}
En mi sistema hay tres programas en C++.
El primero solicita un número del 1 al 8, y dependiendo del dato ingresado, enciende el canal correspondiente.
El otro programa pide un valor entre 0 y 255, y envía la salida directamente al puerto.
El último, envía un 0, apagando todas las salidas.
Programación en PHP para control vía Intranet o Internet
Una vez que el software esté funcionando, podremos optar por controlar los dispositivos desde una computadora en red, o incluso desde Internet.
Para ello necesitaremos el servidor web Apache instalado en nuestra PC, que permitirá que nuestra computadora funcione como servidor HTML, y el intérprete de PHP, que traducirá el código PHP y lo enviará al browser del usuario en formato HTML.
Recomiendo que si no se posee conocimientos sobre servidores Apache y programación en PHP, saltee este tema y pase al siguiente.
Dentro del lenguaje PHP, hay una función que nos permite ejecutar un programa guardado en el servidor de una red:
exec("c:/programas/puerto3.exe");
Es una función muy parecida al lenguaje C++. De hecho, PHP tiene mucha similitud con este, lo que permite que una persona que domine C++, le resulte muy fácil aprender PHP. El ejemplo anterior es en mi sistema en particular.
Mi sistema incluye un formulario con un Combo Box donde selecciono que canal deseo activar, y un botón para dar la orden.
PHP es un intérprete que se ejecuta en el servidor de la red, lo cual permite correr programas que residan en este último. Esta característica es la que permite el control de procesos desde cualquier computadora en red, o desde Internet.
El circuito de control será el encargado de recibir las señales desde el puerto paralelo, y convertirlos en pulsos para comandar el circuito de fuerza.
Mi circuito se basa en el uso de dos integrados 4030, cada uno con cuatro compuertas XOR.
La compuerta XOR (OR eXclusivo) genera una salida High si alguna de sus entradas tiene un estado High, pero en el caso de que las dos estradas tengan simultáneamente un estado High, la salida irá a un estado Low. Lo mismo sucede si las dos entradas se encuentran en estado Low.
El circuito es el siguiente:
Componentes:
R1: 1Kohms 1/4W.
R2 a R9: 820ohms 1/4W.
IC1, IC2: CD4030 (Cuad XOR Gate).
IC3: LM7805.
D1 a D9: LED 5mm.
D10 a D17: 1N4148.
1 conector DB-9 hembra.
1 conector DB-9 macho.
C1: 220µF x 16V.
C2: 100µf x 16V.
1 jack para fuente de alimentación.
Varios (plaqueta, cloruro férrico, estaño, etc.).
Los datos ingresan por el conector DB-9 hembra del gabinete, y son aplicados a una de las entradas de cada XOR. La otra entrada se conecta a masa.
Si el estado del canal es High, se encenderá el LED correspondiente, indicando un 1. En caso contrario, indicará un 0.
Cada LED tiene asociado una resistencia de 820 ohms 1/4W para reducir la tensión aplicada a los mismos.
Un conector DB-9 macho permite enviar los niveles de salida de las XOR al circuito de fuerza, pasando cada salida por un diodo 1N4148, para evitar que ingresen tensiones al circuito de control.
La alimentación se hace un una fuente de 9 volts.
El circuito de fuerza está formado por 8 transistores BC548, que controlan 8 relés de 12 volts.
Los relés son los encargados de manejar la carga propiamente dicha.
El circuito es el siguiente.
Componentes:
T1: Transformador 12V 500mA.
D1 a D4: 1N4002.
D5 a D12: 1N4148.
TR1 a TR8: BC548.
RL1 a RL8: Relé 12V (ver texto).
X1 a X8: Tomacorriente.
IC1: LM7812.
C1:1000µF x 25V.
C2: 470µF x 16V.
2 Fichas macho 220V.
Varios (plaqueta, cloruro férrico, estaño, etc.).
Las señales de control ingresan por un conector DB-9 macho.
Cada transistor recibe el impulso del circuito de control en su base, permitiendo el paso de corriente entre colector y emisor. Esta corriente a su vez, excita la bobina del relé, haciendo que sus contactos se cierren, y se produzca el encendido de la carga.
El diodo asociado a cada transistor sirve para evitar los picos inversos de tensión generados por la bobina del relé, de modo de prevenir la posible quema del transistor.
El circuito es alimentado por una fuente de alimentación formada por un transformador, un puente rectificador, un filtro, un regulador de tensión y otro filtro.
Los relés serán los encargados de manejar la circulación de la corriente alterna que alimentará a las cargas.
Cada relé toma la fase de la red de 220V, pasa por la carga conectada a su tomacorriente y retorna al neutro de la red.
La limitación de la carga estará dada por los relés, los cuales deberán ser los adecuados para el trabajo que les vayamos a dar.
Como última recomendación, trate de aislar bien la parte de corriente alterna de la parte de corriente continua. Un golpe de alterna al circuito de control podría, en el mejor de los casos, quemar solo el puerto paralelo.
Autor:
Carlos A. Rodriguez
Webmaster de
San Vicente, provincia de Buenos Aires, Argentina
20 de junio de 2006
Trabajo enviado por:
Página anterior | Volver al principio del trabajo | Página siguiente |