Download Un circuito simple y un programa para mostrar las posibilidades de

Document related concepts

Relé de estado sólido wikipedia , lookup

Puerta NOT wikipedia , lookup

Regulador de tensión wikipedia , lookup

Análisis de circuitos wikipedia , lookup

Lógica diodo wikipedia , lookup

Transcript
Un circuito simple y un programa para mostrar las posibilidades de utilizar las salidas del
Puerto paralelo.
Copyright Tomi Engdahl 1996-2000
El Puerto paralelo de una PC puede ser un canal muy útil de E/S para conectar sus propios
circuitos a la PC. El puerto es muy sencillo de utilizar si usted primero conoce algunos trucos
básicos. Este documento trata de mostrar esos trucos de una manera de fácil comprensión.
ATENCION: El puerto paralelo puede dañarse muy fácilmente si Ud. comete errores en
los circuitos que le conecte. Si el puerto paralelo está integrado al motherboard (como en
muchas computadoras nuevas) reparar el puerto paralelo dañado puede ser muy caro (en
muchos casos, es más barato reemplazar el motherboard que reparar el puerto). Lo más
seguro es comprar una placa de E/S barata que tenga un puerto paralelo extra y usar éste
para sus experimentos. Si Ud. dañara el puerto paralelo en esta placa, reemplazarla es fácil
y barato.
LIMITACIÓN DE RESPONSABILIDAD: Se han tomado cuidados razonables para
producir esta información. Sin embargo, el autor no se hace responsable por cualquier
efecto que el uso de esta información tenga en su equipamiento o cualquier resultado del
uso de esta información. Es responsabilidad del usuario final determinar si es adecuado
para cualquier propósito particular. Los circuitos y el software mostrados aquí pueden
tener un uso no comercial sin consentimiento del autor.
¾ Cómo conectar circuitos al Puerto paralelo
El Puerto paralelo de una PC es un conector de 25 pines tipo D hembra en la parte posterior de la
computadora. Este se utiliza normalmente para conectar la computadora a una impresora, pero
actualmente están disponibles muchos otros tipos de hardware para ese puerto.
No siempre se utilizan los 25 pines. Normalmente, usted podrá simplemente usar sólo 8 pines de
salida (líneas de datos) y la señal de tierra. En la tabla siguiente se muestran tales pines. Esas
salidas son adecuadas para muchos propósitos.
pin funcion
2
D0
3
D1
4
D2
5
D3
6
D4
7
D5
8
D6
9
D7
Los pines 18,19,20,21,22,23,24 y 25 están todos conectados a tierra.
Los pines de datos son salidas de niveles TTL. Esto significa que tendrán idealmente 0V cuando
están en nivel lógico bajo (0) y +5V cuando están en nivel lógico alto (1). En la práctica, los
voltajes puede diferir del ideal cuando el circuito está bajo carga. La corriente de salida que el
puerto paralelo puede entregar está limitada a sólo algunos miliamperes.
¾ Circuito simple para controlar LEDs
Se puede hacer un circuito simple para manejar un pequeño led a través del puerto paralelo de la
PC. Los únicos componentes necesarios son un LED y una resistencia de 470 ohms.
Simplemente conecte el diodo en serie con la resistencia. La resistencia es necesaria para limitar
la corriente tomada del puerto paralelo a un valor que encienda leds comunes con una intensidad
aceptable y que sea un valor seguro (para no sobrecargar el integrado del puerto paralelo). En los
casos prácticos, la corriente de salida será de unos pocos miliamperes para el led, lo que causará
que un led común se encienda pero no llegue al máximo de brillo.
Luego, conecte el circuito al Puerto paralelo de manera que uno de los terminales vaya a un pin
de datos (el que vaya a usar para controlar ese led) y el otro vaya a cualquiera de los pines de
tierra. Asegúrese de conectar el circuito de manera que el polo positivo del LED (la patita más
larga) vaya al pin de datos. Si conecta el led de la manera contraria, no se encenderá. Puede
conectar un circuito a cada uno de los pines de datos del puerto paralelo. De esta forma, tendrá
ocho leds controlables por software.
2
El software de control es sencillo. Cuando Ud. mande un 1 al pin de datos donde el led está
conectado, ese led se encenderá. Cuando mande un 0 a ese mismo pin, el led dejará de estar
encendido.
¾ Programa de Control
El siguiente programa es un ejemplo de como controlar los pines de datos del Puerto paralelo
LPT1 desde un programa propio. Este ejemplo directamente controla los registros del puerto
paralelo, por lo que no funciona bajo algunos sistemas operativos multitarea que no permiten
hacer ese manejo. Trabaja bien bajo MSDOS. Puede mirar el código en Borland Pascal 7.0
(también se podría compilar con versiones anteriores) y luego descargar el programa compilar
LPTOUT.EXE
Program lpt1_output;
Uses Dos;
Var
addr:word;
data:byte;
e:integer;
Begin
addr:=MemW[$0040:$0008];
Val(ParamStr(1),data,e);
Port[addr]:=data;
End.
¾ Como usar el programa
LPTOUT.EXE es un programa muy simple de usar. El programa toma un parámetro, que es el
valor del dato a enviar al puerto paralelo. El valor debe ser un entero en formato decimal (por
ejemplo, 255). Se pueden usar números hexadecimales, pero deben estar precedidos por el signo
$ (por ejemplo, $FF). El programa no tiene ningún tipo de chequeo de errores para simplificarlo.
Si el número que ingresa no está en el formato correcto, el programa enviará algún valor extraño
al puerto
¾ Ejemplos para utilizar el programa
LPTOUT 0
Pone todos los pines a nivel bajo.
LPTOUT 255
Pone todos los pines a nivel alto.
LPTOUT 1
Pone el pin de datos D0 en nivel alto y todos los otros pines de datos en nivel bajo.
¾ Como calcular sus propios valores para mandar al programa.
Tiene que pensar que el valor que se le da el programa como un número binario. Cada bit el
número binario controla un bit de salida. La siguiente tabla describe la relación de esos bits, los
pines de salida del puerto paralelo y los valores de esos bits.
3
Pin
Bit
Valor
2
D0
1
3
D1
2
4
D2
4
5
D3
8
6
D4
16
7
D5
32
8
D6
64
9
D7
128
Por ejemplo, si quiere poner los pines 2 y 3 a nivel 1 lógico (el led prendido), entonces tendrá que enviar el valor
1+2=3. Si quiere poner a nivel 1 lógico los pines 3,5 y 6, entonces deberá enviar el valor 2+8+16=26. De esta
manera Ud. puede calcular el valor de cualquier combinación de bits que quiera enviar.
¾ Haciendo cambios al código fuente
Ud. puede cambiar muy fácilmente el número de puerto paralelo en el código fuente cambiando
la dirección de memoria desde donde el programa lee la dirección del puerto paralelo. Para más
información, verifique en la siguiente tabla.
Formato del segmento de datos de la BIOS en el segmento 40h:
Offset
08h
0Ah
0Ch
0Eh
Tamaño
Descripción
Palabra
Palabra
Palabra
Palabra
Dirección base de E/S del
Dirección base de E/S del
Dirección base de E/S del
[no en PS] Dirección base
1er Puerto
2do Puerto
3er Puerto
de E/S del
paralelo, 0 si no hay ninguno
paralelo, 0 si no hay ninguno
paralelo, 0 si no hay ninguno
1er Puerto paralelo, 0 si no hay ninguno
Por ejemplo, cambie la línea addr:=MemW[$0040:$0008]; en el código fuente a
addr:=MemW[$0040:$000A]; si quiere usar como salida LPT2.
¾ Una alternativa para el programa de control: Depurador de DOS (Debug)
El depurador de DOS es un editor de bytes que permite ver y modificar archivos a nivel de bytes.
Es una prestación de muchas versiones modernas de DOS (por ejemplo, MS–DOS versión 7). Si
bien el MS–Dos no es comúnmente usado hoy en día, aun puede se puede acceder a él desde
Windows 95, Windows 98 o Windows NT presionando Inicio –> Ejecutar y escribiendo
command (o CMD en Windows 2000 o NT). Puede intentar utilizar Debug bajo estos entornos
(depende del sistema que use).
Puede iniciar el depurador desde la línea de comandos de DOS (DOS real o una ventana de MS–
DOS) escribiendo DEBUG y presionando enter. Una vez que el depurador es invocado, aparece
en pantalla un signo menos (–), el símbolo de comando del Debug. Escriba el siguiente comando
para llevar los pines de salida del puerto paralelo a nivel alto
o 0378 ff
Y puede escribir el siguiente comando para llevar a todos los pines de salida a nivel bajo
nuevamente.
o 0378 00
En la línea de comando de la primera orden, “o” significa una salida a un Puerto de un byte. El
siguiente número “0378” es la dirección de E/S del puerto paralelo en formato hexadecimal
(cambie la dirección si su puerto está en otra dirección). El último número (“FF” o “00”) es el
byte enviado a los pines de datos del puerto paralelo en formato hexadecimal.
El depurador de DOS puede ser usado como una herramienta muy básica para experimentar con
el puerto paralelo de la PC.
4
¾ Usando otros lenguajes
Los siguientes son ejemplos cortos de cómo escribir a los puertos de E/S usando diferentes
lenguajes de programación. En los ejemplos, he usado la dirección de E/S 378h que es una de las
direcciones en donde el puerto paralelo puede estar. Los siguientes ejemplos son muy útiles bajo
DOS.
Assembler
MOV DX,0378H
MOV AL,n
OUT DX,AL
Donde n es el dato que se quiere enviar.
BASIC
OUT &H378, N
Donde N es el dato que se quiere enviar.
C
outp(0x378,n);
o
outportb(0x378,n);
Donde N es el dato que se quiere enviar. El comando de E/S del puerto varia de un compilador a
otro ya que no es parte de las librerías estandarizadas de C.
Aquí hay un ejemplo de código para el compilador de Borland C++ 3.1
#include <stdio.h>
#include <dos.h>
#include <conio.h>
/**********************************************************/
/*Este programa escribe en las salidas del Puerto paralelo*/
/**********************************************************/
void main (void)
{
clrscr();
/* Limpia la pantalla */
outportb(0x378,0xff); /* envía datos al Puerto paralelo */
getch();
/* espera por una tecla antes de terminar */
¾ Control del puerto paralelo en programas bajo Windows
Controlar directamente el puerto paralelo es posible bajo Windows 3.x y Windows 95, desde
aplicaciones de 16 bits y librerías dinámicas (DLL). Entonces puede usar el ejemplo anterior en
C en Windows 3.x y Windows 95 si hace que su programa sea una aplicación de 16 bits. Si
quiere controlar el puerto paralelo desde Visual Basic o Delphi, consulte las librerías en el sitio
Parallel Port Central en http://ww.lvr.com/parport.htm.
5
Controlar directamente el Puerto desde una aplicación no es posible bajo Windows NT, y para
habilitar el control del puerto sin restricciones, tendrá que escribir algún tipo de control de
dispositivo que haga eso. Puede encontrar esta clase de controlador en el sitio Parallel Port
Central.
¾ Control del puerto paralelo desde Linux
Linux permite el acceso a cualquier Puerto usando iopern syscal. Aquí hay algunas partes de
código para Linux para escribir 255 en el puerto de la impresora.
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<unistd.h>
<asm/io.h>
#define base 0x378 /* dirección de base del Puerto de impresora */
#define value 255 /* valor numérico a mandar al Puerto de la impresora */
main(int argc, char **argv)
{
if (ioperm(base,1,1))
fprintf(stderr, "No puedo encontrar el Puerto en %x\n", base), exit(1);
outb(value, base);
}
Grabe el código fuente al archive lpt_test.c y compílelo con el comando:
gcc -O lpt_test.c -o lpt_test
El usuario tiene que tener privilegios para acceder a los puertos para ejecutar el programa, o
usted debe ser el root para habilitar que se ejecuten estos programas sin problemas de acceso. Si
usted quiere hacer un programa que pueda ser ejecutado por cualquiera, primeramente debe
indicar que el propietario del programa es root (por ejemplo, hacer la compilación cuando usted
es el root), dar a los usuarios derechos para ejecutar el programa y luego indicar que el programa
siempre sea ejecutado con derechos de propietario (root) o con los derechos que tenga el usuario
que lo quiera ejecutar. Se puede indicar que el programa se ejecutado con drechos de propietario
usando el siguiente comando:
chmod +s lpt_test
Si usted quiere un programa más útil, puede descargar el código fuente del programa de control
del puerto paralelo de http://www.hut.fi/Misc/Electronics/circuits/lptout.c. Este programa
funciona de tal forma que usted puede indicar el dato a mandar al puerto paralelo como un
argumento de la línea de comandos (ya sea en decimal o en hexadecimal) del programa y este
enviará el valor al puerto paralelo. Se puede compilar el código fuente para el comando lptout
usando la siguiente línea de compilación:
gcc -O lptout.c -o lptout
Una vez que haya compilado el programa puede ejecutarlo fácilmente. Por ejemplo, ejecutando
/.lptout 0xFF va a poner a todos los pines de datos en 1 y ejecutando ./lptout 0x00 pone todos los
pines de datos en 0.
6
¾ Controlando algunos dispositivos electrónicos reales
La idea de la interface mostrada a continuación puede ser expandida para controlar dispositivos
electrónicos simplemente añadiendo un circuito buffer al puerto paralelo. La programación
puede ser hecha exactamente de la manera que se mostró en los ejemplos.
¾ Construyendo su propio circuito de control de relé.
El siguiente circuito es la sencilla interface que puede usar para controlar un relé desde el Puerto
paralelo:
El circuito puede manejar relés que tomen corrientes de hasta 100mA y operen a 24V o menos.
El circuito necesita una fuente externa que tenga la tensión adecuada para controlar el relé
(5...24V, dependerá del relé). El transistor realiza la transición de corriente y el diodo previene
picos que se produzcan en la bobina del relé que puedan dañar su computadora. (si deja de lado
el diodo, entonces el transistor y su computadora pueden dañarse).
Las bobinas (los solenoides y las bobinas de los relés) tienen una gran impedancia, cuando deja
de circular corriente, generan un gran pico de tensión. La mayoría de los diseños tienen un diodo
o un circuito de protección diseñado para bloquear que el pico de tensión “golpee” el resto del
circuito. Si el diodo deja de funcionar, entonces el pico de tensión puede arruinar el transistor
que maneja el relé o inclusive su placa de E/S después de un período de tiempo. El modo de
falla para el transistor que maneja la carga debería ser un corto circuito, lo que haría que el
terminal del solenoide quedara conectado a masa indefinidamente.
El circuito puede ser usado también para controlar pequeñas cargas como leds más grandes,
lámparas y pequeños motores de corriente continua. Tenga en cuenta que todos esos dispositivos
que planea controlar directamente desde el transistor deben consumir menos de
ATENCION: Cheque una y otra vez el circuito antes de conectarlo a su computadora. Usando el
tipo equivocado de componentes o componentes dañados puede causar que su puerto paralelo se
arruine. Errores en el armado de circuitos pueden resultar en que se dañe su puerto paralelo y
necesite comprar una nueva placa de E/S múltiples. El 1N4002 en paralelo con el relé es un
componente de protección esencial y no debe ser dejado de lado en ningún caso o puede ocurrir
un daño en el puerto a causa del alto voltaje inductivo de retorno de la bobina del relé (el relé
detiene ese pico cuando ocurre).
7
¾ Un nuevo diseño más seguro.
El circuito anterior funciona bien cuando el transistor es del tipo correcto y funciona
apropiadamente. Si por alguna razon, la base y el colector se tocan y ud. está manejando más de
+5V en el lado del relé, el circuito puede pasar esa tensión más alta al puerto paralelo y dañarlo.
El circuito siguiente utiliza dos diodos 1N4148 para proteger el puerto paralelo contra tensiones
superiores a +5V y también contra polaridades incorrectas (La fuente del circuito es
accidentalmente invertida)
Una idea para agregar mayor seguridad es reemplazar el diodo 1N4148 conectado a tierra por un
diodo zener de 5.1V. Este diodo protegerá al puerto paralelo de los picos de voltaje y también del
voltaje negativo.
8
¾ Un ejemplo de un mal circuito
Algunas personas consideran particularmente importante poner el relé después del transistor.
Además de no ser importante, es una práctica incorrecta para el buen funcionamiento del puerto
paralelo. Este tipo de fallas de diseño se han publicado en Internet en muchas ocasiones. El
siguiente circuito es un ejemplo de este tipo de falla de diseño (no lo construya):
NOTA: éste es un mal diseño. No lo construya ni lo utilice.
El problema de este circuito es que el voltaje que va al relé siempre está limitado a menos de
4.5V aún cuando se utiliza el valor de Vcc es más alto. El circuito funciona como un seguidor de
emisor, lo que hace que el voltaje del emisor siempre sea el voltaje de la base menos la VBE
(0.6..0.7V). Esto significa que con un tope 5.1V de tensión de control, se obtiene un máximo de
4.5V de salida sin importar la tensión de la fuente (Para cuando sea mayor de 5V y por debajo
de la tensión de ruptura del transistor)
Otro problema es que algunos casos este tipo de circuito puede empezar a oscilar si la resistencia
de la base está justo en el límite.
9
¾ Circuito con opto acoplador
Si quiere tener una muy buena protección del puerto paralelo quizás deba considerar usar un opto
acoplador siguiendo el siguiente circuito.
Típica distribución de pines de un opto acoplador. (4N25, CNY 17)
El opto acoplador está ahi para proteger el Puerto. Observe que no hay conexiones eléctricas
internas entre el led y el transistor. El circuito es alimentado con una fuente externa que no está
conectada a la computadora. Esto evita que cualquier corriente en el circuito externo pueda dañar
el puerto paralelo.
La entrada del opto acoplador es un led. R1 se usa para limitar la corriente cuando la salida desde
el puerto está activada. Esa resistencia de 1Kohm limita la corriente alrededor de 3mA que es
más que suficiente para manejar el transistor de salida.
Por la salida del opto acoplador, es como un transistor con el colector en la parte superior del
circuito y el emisor en la parte inferior. Cuando la salida es activada (por el ingreso de luz desde
el led interno en el opto acoplador), la corriente circula a través de la resistencia y por el
transistor, saturándolo. Esto permite que la corriente circule por el relé.
Cortando la entrada en el puerto paralelo, se corta la salida del opto acoplador, por lo que no
circulará corriente en el transistor y este dejara de conducir. Cuando el transistor está cortado no
circula corriente por el relé, por lo que se apaga. El diodo absorbe la descarga de la energía
contenida en la bobina, evitando que el relé alimente al circuito con un retorno no deseado.
10
El circuito puede ser usado para controlar cargas de alrededor de 100mA (depende de los
componentes y la tensión de operación utilizada). La fuente externa puede ser de entre 5 y 25V.
¾ Circuito de potencia con opto acoplador
Aquí hay una versión de potencia del circuito descrito anteriormente:
En este circuito T1 se usa para controlar la corriente de base de T2 que controla la corriente total.
Se puede optar por cualquier transistor de potencia que cumpla con los requerimientos de
corriente y tensión. Algunos alternativas son por ejemplo TIP41C (6A 100V) o el 2N3055 (15A
100V). Dependiendo del factor de amplificación propio del transistor T2, quizás no sea posible
usar toda la capacidad de corriente del colector para evitar el exceso de pérdidas por calor en ese
transistor.
El circuito es básicamente una modificación muy sencilla del circuito original con opto
acoplador con un solo transistor. La diferencia en este circuito es que T2 controla la corriente de
carga y T1 actua como una resistencia extra que garantiza que T2 con conduzca cuando no hay
una señal de alimentación en el opto acoplador (una pequeña corriente que se filtre del opto
acoplador no hará que T1 y T2 conduzcan)
11
Leyendo los pines de entrada en el puerto paralelo
El puerto paralelo de la PC tiene 5 entradas. Esas entradas pueden ser leídas de la dirección Base
E/S del puerto LPT +1.
El significado de los bits en el byte que se puede leer desde ese puerto de E/S es:
•
D0: estado no especificado
•
D1: estado no especificado
•
D2: estado no especificado
•
D3: estado del pin 15 (ERROR) invertido
•
D4: estado del pin 13 (SELECTED)
•
D5: estado del pin 12 (PAPER OUT)
•
D6: estado del pin 10 (ACK)
•
D7: estado del pin 11 (BUSY) inverted
Aquí algunos códigos para leer datos desde el Puerto LPT:
Assembler
MOV DX,0379H
IN AL,DX
Se toma el resultado desde el registro AL
BASIC
N = INP(&H379);
Donde N es el valor numérico leído.
C
in = inportb(0x379);
or
in = inp(0x379);
Donde N es el dato que se quiere leer. El comando de E/S del puerto varia de un compilador a
otro ya que no es parte de las librerías estandarizadas de C.
Traducción: Adrián Pelliza
28/6/2004
12