PRINCIPAL  DOCUMENTOS  PROYECTOS  PRODUCTOS  LINKS  CONTACTO    *LO NUEVO*     

 

Estamos mudando uControl. La página que estas viendo en breve va a ser dada de baja, dado que ya fué migrada al nuevo sitio.

Te invitamos a que descubras el nuevo ucontrol, y que cambies los links desde tu pagina o tus favoritos. Perdon por las disculpas, y nos vemos en el nuevo ucontrol.

[Has click aqui para ir a la nueva página]

Sugerencias, preguntas o dudas? Escribe a arielpalazzesi @ gmail.com
                              Ultima actualización: 21/03/2007


 

Experimente con los
 puertos de su ordenador:

MONITOR del PUERTO PARALELO
 

 

No resulta muy complicado hacer que nuestra PC sea capaz de “percibir” el mundo real mediante el uso de los puertos serie o paralelo. Estos puertos, originalmente pensados para la comunicación con una impresora o un mouse, pueden ser utilizados para otros fines, con resultados muchas veces sorprendentes. En este documento (y en algunos otros que ire publicando) veremos la forma en que una computadora es capaz de obtener datos de su entorno, e interactuar con él. Aprenderemos el funcionamiento de cada uno de estos puertos desde el punto de vista del hardware y el software, para luego construir varios circuitos prácticos. Estudiaremos también que son los sensores y actuadores necesarios para nuestros proyectos.

 

INDICE:
> Sensores

> Actuadores
> El puerto paralelo del PC
> Monitor de puerto paralelo
> El software en VB6
> APÉNDICE: Lógica TTL
>
APÉNDICE: LED
>
APÉNDICE: Componentes a utilizar
> Descargar EXE y archivos VB necesarios para utilizar el Monitor de Puerto Paralelo.

 

 > Sensores

Por medio de sensores la computadora es capaz de conocer la situación del mundo exterior. ¿Cómo es esto? Supongamos que estamos mirando el pronóstico meteorológico y nos enteramos que:

- Es un día soleado
- Hace calor
- El aire es húmedo
- La Temperatura es de 25.3ºc
- La humedad relativa ambiente es del 45%.

Las primeras 3 respuestas se refieren a valores del tipo digital: sol o nubes, frío o calor, seco o húmedo. Es decir, “si” o “no”, dos valores posibles. Las dos ultimas son de tipo analógico: la temperatura puede ser de -10.25ºc, 12ºc o 38.5ºc, la humedad puede tener cualquier valor entre 0% y 100%.

Las señales digitales se interpretan en el PC utilizando voltajes cercanos a  0 V o a +5 V. Los primeros  se interpretan como un “0”  y los segundos como un “1” (ver apendice “Lógica TTL”). A una entrada digital se le puede adaptar un elemento de mando del estilo del interruptor de la figura 1 para establecer su valor. Cualquier dispositivo que se comporte de forma similar a éste es útil para el control de entradas digitales.

Dada la naturaleza de la propia computadora, esta forma de representar al mundo es la más natural, dado que todo su funcionamiento se basa en este esquema de “0” y “1”. El “percibir” los infinitos valores que puede tomar una temperatura, un peso, una presión es algo mas complicado, pero perfectamente posible. Muchas señales analógicas se pueden tratar como digitales con circuitos muy sencillos, teniendo en cuenta el cambio que experimenta el sensor utilizado. Por ejemplo, en el circuito de la figura 2 la LDR (un tipo especial de resistencia que varía su valor de acuerdo a la luz que recibe) puede variar entre 10 MΩ en oscuridad hasta 600 MΩ a plena luz.  

Puesto que la mayoría de los puertos del PC son digitales, las señales analógicas entregadas por este tipo de sensores requerirán la utilización de circuitos de conversión analógico-digital.

 
Mediante un interruptor podemos conocer un dato tipo “si/no” del exterior.



LDR: Un sensor analógico que no podemos
 leer sin digitalizarlo previamente.

  > Actuadores
Cuando queremos cambiar el entorno podemos hacerlo también de dos maneras: digital o analógicamente. Podemos encender la calefacción, subir una persiana o apagar la luz (digitales), o bien podemos aumentar el volumen de un televisor un 10% o regular el termostato de una estufa (analógicas).

Los puertos digitales del PC nos permiten dar órdenes digitales de forma directa o podemos codificar estas señales digitales mediante un conversor digital/analógico para obtener una salida analógica. Las salidas digitales no proporcionan mucha potencia; como mucho permiten iluminar un LED. Pero se pueden utilizar para excitar un relé o un transistor que controlen el actuador.
 




Para encender un LED desde el puerto paralelo es necesario limitar la corriente mediante una resistencia.

Con un circuito un poco mas elaborado es posible encender o apagar cualquier aparato que funcione con 220v.

 No se preocupen si todavía no comprenden estos esquemas, cuando llegue el momento los explicaremos paso a paso. Ahora empecemos a conocer a fondo los puertos de la PC.

 

 > El puerto paralelo
En 1981 IBM diseñó el puerto paralelo para manejar impresoras desde su gama de microcomputadores PC/XT/AT. Un conector estándar macho de 25 pines aparecía en la parte trasera de la PC con el solo propósito de servir de comunicación (interfaz) con la impresora. El sistema operativo DOS utilizado en esa época soportaba hasta tres puertos paralelos asignados como  LPT1, LPT2 y LPT3.

En cualquier PC actual podemos encontrar también este puerto, generalmente incluido directamente en el motherboard, y casi siempre desocupado, ya que hoy día las impresoras con conexión USB han reemplazado a las de interfaz paralela.

Desde el punto de vista del hardware, el puerto consiste en un conector hembra de 25 pines (DB25)  con doce salidas latch y cinco entradas, con ocho líneas de “masa” (o “tierra”). Estos latches funcionan de la siguiente manera: cuando escribimos un valor en la dirección del puerto, este permanece presente en los pines del conector hasta que escribamos otro, sin que debamos mantener nosotros de alguna manera estos valores ahí. Esto simplifica la programación y la construcción de nuestros circuitos.

Desde el punto de vista del software, el puerto paralelo consta de tres registros (datos, estado y control) de 8 bits cada uno, que ocupan tres direcciones de E/S. Cada puerto requiere tres direcciones de memoria consecutivas del espacio de E/S (entrada-salida) del procesador para seleccionar todas sus posibilidades.

Las direcciones base estándar para los puertos paralelos son 0378h (LPT1), 0278h (LPT2) y 03BCh (LPT3). El puerto paralelo estándar (SPP) consta, como se mencionó antes, de tres registros de 8 bits localizados en direcciones adyacentes del espacio de E/S del PC. Los registros se definen relativos a la dirección de E/S base (LPT_BASE) y son: 

LPT_BASE + 0: registro de DATOS

LPT_BASE + 1: registro de ESTADO

LPT_BASE + 2: registro de CONTROL

 

 

REGISTROS

Nombre habitual

DATOS

ESTADO

CONTROL

DIRECCIÓN
E/S

Puerto

378h

379h

37Ah

LPT1

Puerto

278h

279h

27Ah

LPT2

Puerto

3BCh

3BDh

3BEh

LPT3

Como dijimos antes, la función normal del puerto consiste en transferir datos a una impresora mediante 8 líneas de salida de datos, usando las señales restantes como control de la impresora. Sin embrago, puede ser usado como un puerto E/S de propósito general por cualquier dispositivo o aplicación que se ajuste a sus posibilidades de entrada/salida.

 

Función que cumple cada pin del conector del puerto paralelo.

 

La figura anterior nos muestra la función de cada “patita” (pin de ahora en adelante) del puerto paralelo. Las etiquetas indican la función de cada pin cuando tiene conectada una impresora. Las señales activas a nivel bajo aparecen con la barra de negación (por ejemplo, Strobe). Cuando se indica alto o bajo se refiere a la tensión en el pin del conector. Alto equivale a +5 V y bajo a 0 V en TTL. Aprendamos que función cumplen cada uno de estos pines, para luego ver como podemos aprovechar esto para construir una sencilla interfase:

 - 8 líneas (pines) son para salida de datos (bits de DATOS). Sus valores son únicamente modificables a través de software, y van del pin 2 (dato 0, D0) al pin 9 (dato 7, D7).

- 5 líneas son de entrada de datos (bits de ESTADO), únicamente modificables a través del hardware externo. Estos pines son: 11, 10, 12, 13 y 15, del más al menos significativo.

- 4 líneas son de control (bits de CONTROL), numerados del más significativo al menos: 17, 16, 14 y 1. Habitualmente son salidas, aunque se pueden utilizar también como entradas y, por tanto, se pueden modificar tanto por software como por hardware.

- Las líneas de la 18 a la 25 son la tierra.

Las 8 líneas de datos en un puerto paralelo moderno son bidireccionales, es decir que tanto podemos escribir un dato en el y leerlo desde nuestra interfaz (usarlo como salida de información) como leer en el los datos que la interfaz escriba en el puerto.

Debemos tener presente que la capacidad del puerto de entregar corriente por estos pines es muy limitada, y casi siempre deberemos utilizar un circuito que amplifique esta señal para poder hacer algo útil con ella. Sin embargo, la corriente entregada es suficiente como para por ejemplo encender un led (diodo emisor de luz, ver apéndice al final) que nos sirva como “piloto” para conocer el estado de cada pin. Este será nuestro primer circuito practico.

 

 > Monitor del puerto paralelo
Este sencillo circuito nos permitirá conocer el estado de cada uno de los pines de datos del puerto paralelo, indicando los que están en “1” con un led encendido, y los que están en “0” con un led apagado.

 

Circuito de nuestro monitor de puerto paralelo.

 

En el esquema vemos que cada uno de los pines de datos del puerto se encuentra conectado a una resistencia de 330 ohms, y esta al ánodo del led. El cátodo de cada led se conecta a masa (cualquiera de los pines del 18 al 25). La función que cumplen las resistencias es limitar la corriente que circule por cada led, ya que si los conectamos directamente al puerto circularía por ellos una corriente excesiva y los podríamos quemar.

Como se trata de un circuito muy simple, lo construiremos soldando directamente las resistencias y los leds a una ficha DB25, así nos evitamos el construir una plaqueta de circuito impreso.

Los componentes necesarios para este circuito los conseguimos en cualquier casa de electrónica, y su costo total difícilmente supere los 3 o 4 u$s. También necesitaremos un soldador de unos 20 o 30 Watts y algo de alambre de estaño con núcleo de resina. Es una buena idea tener a mano un alicate para cortar los terminales de los leds y las resistencias.

Primero soldamos uno de los terminales de las resistencias a cada uno de los pines 2 al 9 del conector, y luego el ánodo de cada led al otro extremo de las resistencias. También uniremos entre si todos los terminales correspondientes a los cátodos de los leds y el pin 18 del puerto.

 
Etapas en la construcción de nuestro monitor.

 En caso que debido a la posición del CPU sea imposible ver los LEDs conectados de esta manera, podemos comprar un cable de extensión para el puerto paralelo, o bien a un cable de impresora sacarle la ficha del lado de esta y soldar ahí los LEDs y resistencias. En este ultimo caso, hay que usar un teste para identificar a que pin corresponde cada cable, y tener cuidado de aislar bien todos los terminales para evitar que un cortocircuito termine con el puerto.

 

  > El software
Para controlar los LEDs del monitor podemos bajar de internet un programa ya hecho (hay muchísimos) o bien crear uno. Para ello usaremos Visual Basic (en este caso la versión 3, ya que corre sin problemas en casi cualquier computadora y versión de Windows). Necesitaremos una DLL llamada INPOUT32.DLL (o INPOUT16.DLL si usamos un Windows de 16 bits).

En Visual Basic comenzamos un nuevo proyecto, y creamos un modulo que llamaremos MODULE1.BAS con el siguiente contenido:

Declare Sub Out Lib "inpout16.Dll" Alias "Out16" (ByVal PortAddress As Integer, ByVal Value As Integer)
Declare Function Inp Lib "inpout16.Dll" Alias "Inp16" (ByVal PortAddress As Integer) As Integer

Importante: si usamos la DLL INPOUT32.DLL deberemos cambiar todos los “16” por “32” en el código anterior.

Luego, en el FORM1.FRM deberemos crear dos arrays de botones, con 8 elementos cada uno. El primero llamado ENC(n) y el segundo APA(n). Estos botones permitirán el encendido y apagado de los LEDS en forma individual. También necesitaremos un  ComboBox llamado PUERTO que nos permitirá elegir en que LPT tenemos conectado el monitor. El listado del código de este formulario es el siguiente:

 

Sub Form_Load ()
'Genera el contenido del combo Puertos.
Puerto.AddItem "&h378"
Puerto.AddItem "&h278"
Puerto.AddItem "&h3BC" 

'Selecciona el LPT1 por default.
Puerto.ListIndex = 0
End Sub

Sub Apa_Click (Index As Integer)
Dim X As Integer 

'Obtiene el valor presente en el puerto.
X = Inp(Val(Puerto)) 

'Ejecuta la rutina que pone en 0 el bit correspondiente.
Dato = BCF(X, Index) 

'Envía el dato al puerto.
Out Val(Puerto), Dato
End Sub

Sub Enc_Click (Index As Integer)
Dim X As Integer 

'Obtiene el valor presente en el puerto.
X = Inp(Val(Puerto)) 

'Ejecuta la rutina que pone en 1 el bit correspondiente.
Dato = BSF(X, Index) 

'Envía el dato al puerto.
Out Val(Puerto), Dato
End Sub

 


Aspecto del FORM1.FRM con todos los controles colocados, y un Label explicando que hace cada control.

 

 > APENDICE: Lógica TTL
Recibe este nombre de “Transistor to Transistor Logic”, y es uno de los procedimientos que existen para construir circuitos integrados. Esta lógica considera un “0” lógico a los valores de tensión entre 0 y 2.5 voltios, y un “1” lógico a cualquier voltaje mayor que 3.5 y menor a 5 voltios.
 


En este gráfico se puede ver con mayor claridad cada estado lógico y su nivel de tensión.

 

 > APENDICE: LED
Un LED no es mas que un diodo, del que se aprovecha el fotón que se emite al recombinarse un hueco con un electrón en su unión PN. El encapsulado transparente y el pequeño espejo situado bajo la juntura permiten aprovechar esta luz emitida como un indicador luminoso. Su consumo de corriente es muy bajo, lo que lo hace muy practico para nuestros proyectos.

 
Esquema y símbolo de un diodo LED.

 

 > APENDICE: Componentes a utilizar
1 conector DB25 macho
8 Resistencias de 330 ohm, 1/8 watt
8 Leds

 


www.ucontrol.com.ar | Desarrollo de sistemas de automatización y control | Pehuajó - Buenos Aires - Argentina
e-mail: arielpalazzesi@gmail.com