CLUB 35

Para intercambiar información con dispositivos exteriores, ya sea para manejar equipos o para adquisición de datos de di

Views 114 Downloads 3 File size 11MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Para intercambiar información con dispositivos exteriores, ya sea para manejar equipos o para adquisición de datos de diferentes sistemas, la PC utiliza los puertos de entrada y salida (E/S). Estos puertos se caracterizan por la dirección que tienen asignada en el mapa de memoria, y es posible la comunicación con los mismos enviando o recogiendo bytes a/en dicha dirección. Obviamente, la dirección de memoria en la que se ubican estos puertos puede depender tanto del sistema operativo como la versión del mismo y la misma debe ser conocida para que podamos comunicar a la PC con otros elementos. Para poder establecer una comunicación coherente, se deben emplear circuitos electrónicos y programas que los comanden. Las funciones de biblioteca que proporciona el lenguaje C para la manipulación de estos puertos son fuertemente dependientes del hardware y del sistema operativo y, por tanto, no demasiado estándar. Así, “los electrónicos” solemos preferir las funciones de acceso a los puertos hardware que proporciona Turbo C bajo entornos DOS. Al igual que en determinadas circunstancias es preciso comunicarse con dispositivos externos, también es necesario intercambiar información con el micro de la propia computadora. Ello se realiza con frecuencia leyendo y escribiendo valores en determinadas posiciones de la memoria de datos. Por ejemplo, podemos conocer el estado en el que se encuentra el teclado accediendo a la posición asignada en la memoria (segmento 0x40, offset 0x17, para los entendidos). En este tomo de colección nos centraremos en el hardware necesario para el manejo de puertos de forma sencilla, dejando para más adelante la explicación de los diferentes lenguajes de programación que los manejen. De más está decir que se describen ejemplos prácticos que requieren de programación y en esos casos brindamos el listado del programa para que el lector no tenga inconvenientes en armar sus propios proyectos y así aprender mientras practica. Dividimos el texto en dos capítulos, uno que describe el funcionamiento de los 4 puertos básicos de la computadora (paralelo, serie, USB e infrarrojo) y otro en el que mostramos ejemplos de cómo utilizar sobre todo el puerto paralelo por ser el “más elegido” por los electrónicos a la hora de realizar proyectos. Por ser el primer tomo de colección en el que abordamos este tema, no hemos incluído proyectos complejos tanto de manejo como de adquisición de datos, sin embargo, si Ud. está interesado, puede “bajar” de nuestra web proyectos completos con sus placas de circuito impreso y sus programas de gestión (placa TR Brian, Datalogger, etc.) con la clave “clubpuertos”, aclarando que en un futuro tomo de esta colección publicaremos diferentes proyectos que involucran a los puertos de las computadoras, obra en la que también describiremos otros dispositivos con los que la PC se comunica con otros dispositivos (bluetooth, Wi-Fi, firewire, etc.).

ISBN Nº: 978-987-1116-95-9 CDD 621.39

Director de la Colección Club SE Ing. Horacio D. Vallejo Jefe de Redacción Pablo M. Dodero Autores de esta edición: Ing. Ismael Cervantes de Anda. Docente de la Escuela de Computo (ESCOM) e Instituto Politécnico Nacional (IPN). México DF. Mauricio Pasti Club Saber Electrónica es una publicación de Saber Internacional SA de CV de México y Editorial Quark SRL de Argentina Editor Responsable en Argentina y México: Ing. Horacio D. Vallejo

Administración Argentina: Teresa C. Jara Administración México: Patricia Rivero Rivero Comercio Exterior Argentina: Hilda Jara Comercio Exterior México: Margarita Rivero Rivero Director Club Saber Electrónica: Luis Leguizamón Responsable de Atención al Lector: Alejandro A. Vallejo Coordinador Internacional José María Nieves Publicidad Argentina: 4301-8804 - México: 5839-5277 Staff Víctor Ramón Rivero Rivero

Olga Vargas Liliana Vallejo Mariela Vallejo Javier Isasmendi Ramón Miño Fernando Ducach Areas de Apoyo Teresa Ducach Disprof Fernando Flores Claudio Gorgoretti Paula Vidal Raúl Romero Alfredo A. Flores Internet: www.webelectronica.com.ar Web Manager: Luis Leguizamón

Club Saber Electrónica Nº 35. Fecha de publicación: Noviembre de 2007. Publicación mensual editada y publicada por Editorial Quark, Herrera 761 (1295) Capital Federal, Argentina (005411-43018804), en conjunto con Saber Internacional SA de CV, Av. Moctezuma Nº 2, Col. Sta. Agueda, Ecatepec de Morelos, México (005255-58395277), con Certificado de Licitud del título (en trámite). Distribución en México: REI SA de CV. Distribución en Argentina: Capital: Carlos Cancellaro e Hijos SH, Gutenberg 3258 - Cap. 4301-4942 - Interior: Distribuidora Bertrán S.A.C. Av. Vélez Sársfield 1950 - Cap. – Distribución en Uruguay: Rodesol SA Ciudadela 1416 – Montevideo, 901-1184 – La Editorial no se responsabiliza por el contenido de las notas firmadas. Todos los productos o marcas que se mencionan son a los efectos de prestar un servicio al lector, y no entrañan responsabilidad de nuestra parte. Está prohibida la reproducción total o parcial del material contenido en esta revista, así como la industrialización y/o comercialización de los aparatos o ideas que aparecen en los mencionados textos, bajo pena de sanciones legales, salvo mediante autorización por escrito de la Editorial. Revista Club Saber Electrónica, ISSN: 1668-6004

1

CAPITULO 1 DESCRIPCION DE PUERTOS . . . . . . . . . . . . . . . . . . . . .3 Puerto paralelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Modo compatible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 Modo nibble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 Modo byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 Modo EPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 Modo ECP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 Cómo se controla el puerto paralelo . . . . . . . . . . . . . . . . . . . .10 Definición de registros del ECP . . . . . . . . . . . . . . . . . . . . . . . .11 Estándares y aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . .11 Conectores y cables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 1) Conector A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 2) Conector B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 3) Conector C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 4) Cables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 Protocolos y Tiempos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 Modo de impresión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Modo estándar y bidireccional (SPP) . . . . . . . . . . . . . . . . . . . .17 Modo EPP1.7 y SPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Modo EPP1.9 y SPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Modo ECP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Modo ECP y EPP1.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Circuito de comando por puerto paralelo . . . . . . . . . . . . . . . . .17 La elección del puerto paralelo . . . . . . . . . . . . . . . . . . . . . . . .18 Haciendo un resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Cambiando la dirección del puerto paralelo . . . . . . . . . . . . . . .19 Construcción del circuito electrónico de comando . . . . . . . . . . .20 Puerto serie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22 Norma RS-232 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23 Transmisión de datos (TD) . . . . . . . . . . . . . . . . . . . . . . . . . . .24 Recepción de datos (RD) . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 Solicitud de envío (RTS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 Autorización de envío (CTS) . . . . . . . . . . . . . . . . . . . . . . . . . .24 Datos listos para enviar (DSR) . . . . . . . . . . . . . . . . . . . . . . . . .24 Tierra señalada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 Detector de acarreo (CD) . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 Datos listos para enviar (DTR) . . . . . . . . . . . . . . . . . . . . . . . . .24 Indicador de terminado (RI) . . . . . . . . . . . . . . . . . . . . . . . . . .24 Circuito probador de puerto serie . . . . . . . . . . . . . . . . . . . . . .25 Diagrama del probador . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 Interruptor a través del puerto serie . . . . . . . . . . . . . . . . . . . . .30 Puerto USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Electrónica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33 Normas y Estándares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 Cables y conectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34

2

Protocolos y tiempos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36 Paquete token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37 Paquete de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37 Paquete hadshake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38 Tipos de transferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 Formato de transacción de control . . . . . . . . . . . . . . . . . . . . . .39 Interrumpir transferencia (Interrupt) . . . . . . . . . . . . . . . . . . . . . .39 Transferencia isócrona (Isochronous) . . . . . . . . . . . . . . . . . . . .40 Transferencia en masa (Bulk) . . . . . . . . . . . . . . . . . . . . . . . . .40 Puerto infrarrojo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41 Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41 Normas y Estándares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41 Protocolo de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43 Capa física . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43 Secuencia de pulsos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44 Capa MAC de control al medio (MAC) . . . . . . . . . . . . . . . . . .45 Capa MAC de control al medio (MAC) . . . . . . . . . . . . . . . . . .45 Protocolo de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 Codificación del byte de control U . . . . . . . . . . . . . . . . . . . . .49 Codificación del byte de control S . . . . . . . . . . . . . . . . . . . . . .50 CAPITULO 2 MANEJO DE PUERTOS DE PC . . . . . . . . . . . . . . . . . . .51 Características generales y nociones principales . . . . . . . . . . . .51 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 La computadora como sistema de control . . . . . . . . . . . . . . . . .52 El puerto de la PC. Introducción . . . . . . . . . . . . . . . . . . . . . . .53 Descripción del conector físico . . . . . . . . . . . . . . . . . . . . . . . .54 Acceso al puerto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56 Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56 Protocolo del puerto de impresora . . . . . . . . . . . . . . . . . . . . . .58 Interrupciones con el puerto paralelo . . . . . . . . . . . . . . . . . . . .58 Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 Acceso básico al puerto paralelo . . . . . . . . . . . . . . . . . . . . . .60 Actividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 Interfaces básicos de E/S con el puerto paralelo . . . . . . . . . . . .65 Display de 7 segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68 Distinguiendo los sistemas operativos . . . . . . . . . . . . . . . . . . . .69 Los drivers, comunicando Hard&soft . . . . . . . . . . . . . . . . . . . .70 Soporte de programación . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Simple vs complicado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Niveles de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Adquisición de datos placa interna . . . . . . . . . . . . . . . . . . . . .71 Adquisidor externo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 E/S en DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 E/S directa con Windows . . . . . . . . . . . . . . . . . . . . . . . . . . .75 IO.DLL: un recurso más que útil . . . . . . . . . . . . . . . . . . . . . . . .75 Un ejemplo en visual basic . . . . . . . . . . . . . . . . . . . . . . . . . .75

C

uando IBM introdujo la PC como equipo hogareño, el puerto paralelo fue incluido como una alternativa al puerto serie para poder manejar periféricos a mayor velocidad... “para imprimir documentos era preciso ser rápido”. El puerto paralelo tenía la capacidad de transferir 8 bits de datos al mismo tiempo, en comparación con el serie que lo hace de uno en uno, de modo que al trabajar a la misma velocidad se envían “8 veces más datos por el puerto paralelo”, haciéndolo teóricamente más rápido. Al mismo tiempo que la tecnología avanzaba, el puerto paralelo se convirtió en la opción para conectar periféricos de alto desempeño como: impresoras, unidades de discos portátiles, adaptadores de red de tipo LAN y reproductores CD-ROM. En la actualidad existen diferentes puertos que manejan datos por medio

de otros protocolos de comunicaciones, y hasta podemos decir que tanto el puerto serie como el paralelo están destinados a desaparecer en algunos años sin embargo, a la fecha, el conocimiento del puerto paralelo sigue siendo una buena opción para los electrónicos que deseen comandar dispositivos por medio de una computadora. En este texto veremos con cierto detalle el funcionamiento del puerto paralelo, luego analizaremos el puerto serie, con menos profundidad hablaremos tanto del puerto USB como del puerto infrarrojo y dejaremos para otros tomos de la colección del Club Saber Electrónica el análisis de otros métodos de conexión a la PC como Fire Wire, Wi-Fi, Bluetooth, etc, por considerar que para los electrónicos es más fácil el manejo de datos por los denominados puertos tradicionales.

3

Puerto Paralelo Introducción El puerto paralelo, por suerte... ya no es lo que era... Con la inclusión de puertos (y en especial del paralelo) en las computadoras personales, los desarrolladores y usuarios enfrentaron problemas que pueden clasificarse en tres categorías: Al comienzo, a pesar de que el desempeño de la computadora se incrementó, prácticamente no hubo cambio alguno en la arquitectura o desempeño del puerto. La máxima taza de transferencia de datos con esta arquitectura (comunicación paralela), estaba alrededor de los 150 kbps y se necesitaba mucho software debido a que no existía una norma que regulara su uso y protocolos. Segundo, no existía un estándar para la interfaz eléctrica, lo que causaba muchos problemas cuando se

4

comenzó a trabajar en red con diferentes plataformas. Finalmente, la falta de un estándar de diseño, forzaba una limitación de alcance de apenas 2 metros de extremo a extremo. El puerto paralelo, implementado

Tabla 1 Dirección

Nombre

Lectura/ Escritura

Descripción

0378h 0379h 037Ah 037Bh-037Fh

Registro de datos Registro de estado Registro de control Varios

L/E L E

Puerto de datos para leer o escribir Contiene los bits de estado Envía las señales de control Su uso varía según la implementación del puerto

Asignación de Registros de la dirección base 0378h en un inicio en la PC, consiste de un conector con 17 líneas de señal y 8 líneas de tierra. Las líneas de señales se dividen en tres grupos: • Líneas de Control (4) • Líneas de Estado (5) • Líneas de Datos (8) Según el diseño original, las líneas de control son utilizadas para el control de la interfaz y señales de entrelazado de la PC a la impresora. Las líneas de estado son usadas para señales de entrelazado y como indicadores de error o estado del dispositivo conectado. Las líneas de datos se usan para enviar los datos de la PC a la impresora (sólo en esa dirección). Con la aparición de la norma IEEE 1284 en 1994, se definieron cinco diferentes modos de operación para un puerto paralelo, cada uno de ellos tiene características definidas de hardware, software, cables y protocolos, a pesar de que la norma buscaba la existencia de compatibilidad hacia modos posteriores y anteriores, cada modo de operación debe ser tratado por separado. Los cinco modos son: modo compatible o estándar (SPP), modo nibble, modo byte o PS/2, modo mejorado (EPP) y modo de capacidades extendidas (ECP). En el diseño tradicional de un puerto paralelo se habían considerado tres direcciones de puerto de entrada / salida, aunque los modos de transmisión EPP y ECP usan más. Para identificar el conjunto completo de direcciones de un puerto, se utiliza la dirección del primero (la dirección con el número menor), esta dirección es conocida como dirección base. Dos puertos no pueden ocupar la misma dirección base, pues ninguno de los dos funcionarían de manera correcta. El diseño original de IBM consideró la existencia de tres

5

puertos paralelos en un equipo, cada uno de ellos con una dirección base propia, eligiendo las direcciones 038Ch, 0378h y 0278h, como se muestra en la tabla de recursos de la dirección base 0378h (Observe la tabla 1). En cada uno de los 5 módulos existentes de operación de un puerto paralelo, el funcionamiento electrónico es completamente distinto. Debido a esto, es necesario considerarlos por separado, examinando de lo sencillo a lo complicado. Los cinco módulos de funcionamiento son entonces: 1) Modo compatible 2) Modo Nibble 3) Modo Byte 4) Modo EPP 5) Modo ECP 1) Modo compatible El primer diseño, el de IBM, consideraba al paralelo como un puerto de un solo sentido. La PC podía enviar información sin esperar una respuesta. Así, la PC envía y envía datos, si la impresora contara con velocidad ilimitada o un buffer interno ilimitado, no existirá problema alguno, pero debido a las limitaciones existentes, la impresora no es capaz de recibir todos los datos enviados tan rápido como son enviados. Se necesita de un modo que avise acerca de posible desborde de información, es decir, controlar el flujo de datos.

Hablando estrictamente, el modo compatible no es de un solo sentido, cada señal a través del puerto en el modo compatible tiene su propia función , la cual se especifica enseguida. • Líneas de datos. Las ocho líneas de datos acarrean los datos a través de los pines 2 (bit menos significativo) al 9 (bit más significativo).

6

• Strobe. La sola presencia de señales en las líneas de datos no mueve la información de la PC a la impresora, sin más información la impresora no puede saber si los datos representan un solo carácter o múltiples repeticiones del mismo carácter. Para asegurar una comunicación confiable, el sistema requiere de algo que le indique al periférico que el contenido de las líneas de datos representan información válida. Eso lo hace la línea de strobe. Esta línea da un pulso sólo después de que las señales en las líneas de datos han sido colocadas y así indica a la impresora que es un carácter válido el que debe leer y aceptar. La señal de strobe dura alrededor de medio microsegundo, suficiente para que la impresora lo reconozca. Las líneas de datos deben mantener su contenido constante durante este período. La señal de strobe es negativa. La línea tiene un voltaje positivo (+5V) hasta que la impresora envíe una señal de strobe, entonces la línea de strobe cambia a un voltaje cercano a 0V que debe durar el pulso de strobe. • Busy. Debido a que la impresora no puede competir con la velocidad a la que se envían los datos y utilizar la línea de strobe para indicar su validez, existe una línea que sirve para que la impresora indique a la PC que espere para enviar el siguiente carácter. La impresora enciende la línea busy tan pronto como detecta la señal de strobe, y mantiene la señal hasta que esté preparada para recibir el siguiente carácter. Esta señal puede durar una fracción de segundo o mantenerse indefinidamente mientras la impresora espera la corrección de algún error. • Acknowledge. La parte final del sistema de control de flujo del puerto paralelo es la línea acknowledge (acuse de recibo), la cual indica a la PC que todo ha salido bien con la impresión o transferencia al fugger del carácter. Esta señal también es negativa. Cuando la impresora envía la señal acknowledge, completa al ciclo de envío de un carácter. Típicamente esta señal dura alrededor de 8 microsegundos, lo que hace que el ciclo completo de envío de un carácter dure cerca de 10 microsegundos. • Select. En adición a la transferencia de datos a la impresora, el puerto paralelo permite a la impresora enviar tres señales a la PC para indicarle que está preparada, dispuesta y es capaz de hacer su trabajo. La señal más esencial de éstas es la de select, la cual indica a la PC que la impresora está en línea, es decir, está encendida y lista para recibir datos. Si esta señal no está presente, la PC no se molestará en hacer el traba-

jo restante. Debido a TABLA 2 que un dispositivo se Señal Primer Paquete Segundo Paquete puede representar con NFault Bit menos significativo Bit de datos 5 la presencia de voltaje, Xflag Bit de datos 2 Bit de datos 6 esta señal es positiva AckDataReq Bit de datos 3 Bit de datos 7 (normalmente +5VCD). PtrBusy Bit de datos 4 Bit más significativo Bajo la norma IEEE Paquetes transmitidos durante la transferencia inversa 1284, esta línea debe permanecer encendida jo las especificaciones del IEEE 1284, la línea es llade manera continua. mada nAutoFeed. Manteniendo esta señal en un esta• Paper Empty. Uno de los problemas más codo bajo, la PC ordena a la impresora recorrer un renmunes es la falta de papel. Para advertir a la PC acerglón como lo hace una máquina de escribir, manteca de esto, existe la línea de Paper Empty (falta de paniendo esta línea en estado alto provoca que la cabepel). Las especificaciones del IEEE llaman a esta línea za de impresión regrese a la izquierda de la hoja sin Perror (paper error) pero sin modificar su función. que el papel se recorra un renglón. A pesar de la exis• Fault. La tercer señal de estado impresora–PC tencia de esta línea muchas impresoras la ignoran y es la línea fault. Esta es una señal que avisa de cualusan su propio método de corrimiento de carro. quier error que pueda tener la impresora, falta de tinta, atasco de papel, etc. Durante la operación, esta línea se mantiene en un valor alto y se coloca en bajo 2) Modo Nibble cuando existe algo que advertir. Debido a que ésta es una señal que actúa con un voltaje bajo la especificaLos primeros puertos paralelos usaban circuitos ción IEEE 1284 la nombra nFault. unidireccionales en las líneas de datos, pues no se • Initialize Printer. Adicionalmente a las tres seveía la necesidad de recibir información desde la imñales que la impresora envía a la PC para advertir de presora y no había razón para agregar complicaciociertas condiciones, existen tres señales de control que nes con circuitos y buffers bidireccionales. De cualla PC usa para controlar la impresora sin necesidad quier forma, todo puerto cuenta con cinco líneas de de enviar datos de control. La primera de ellas es initransmisión de la impresora a la PC (nAck, Busy, PEtialize printer (inicializa impresora). Esta señal indica rror, Select y nFault) de las cuales se pueden utilizar al a la impresora olvidar las posibles configuraciones de menos cuatro para llevar datos hacia la PC dejando impresión que le fueron indicadas por las aplicaciones de lado el modo normal de operación. Desde luego la durante impresiones anteriores y así asumir desde cevelocidad disminuye a la mitad al enviar cuatro bits a ro la configuración indicada por la aplicación en uso la vez. Esta es la base del modo nibble. de la impresora. Durante la operación normal la señal está en un estado constante de voltaje alto, una interrupción de este voltaje provocará que la impresora reinicie sus valores. Debido a que es una señal negativa la norma IEEE 1284 la nombra nInit. • Select Input. Esta señal permite cambiar el estado de la impresora para colocarla en línea o fuera de línea. La especificación IEEE 1284 llama a esta línea nSelectin. Cuando está activa, en un estado bajo, fuerza a la impresora a estar en línea. No todas las impresoras acatan este comando debido a que alguEl modo nibble necesita que la PC tome control exnas no pueden cambiar su estado por sí solas. plícito de la operación del puerto. El puerto simple• Auto Feed XT. Para dar flexibilidad a los famente monitorea todas las señales y entrega los datos bricantes de impresoras, el diseño de puerto paralelo a la PC, mientras ésta determina si considera las señade IBM incluye esta señal para permitir a la PC controles de estado del puerto como datos de entrada. Por lar el regreso del carro de la cabeza de impresión. Ba-

7

supuesto que el dispositivo al otro extremo del cable debe saber que se está trabajando en modo nibble. Una vez que se ha decidido trabajar en modo nibble, las líneas operarán en dos fases comportándose de manera diferente en cada uno de ellos. Estas son la fase de reposo inverso (reverse idle) y la fase de transferencia inversa de datos (reverse data transfer). En la fase de reposo inverso, la línea PtrClk opera como una señal de aviso desde el periférico. Al activarse esta señal, se le indica a la PC ejecutar una interrupción pues el periférico tiene datos listos para ser enviados. La PC confirma esta señal colocando la línea HostBusy en estado bajo. Esto coloca al sistema en la fase de transferencia completa de un byte de datos (ver tabla 2). Cuando el periférico está preparado para el envío de datos y la PC coloca en bajo, la línea JostBusy comienza otra transferencia. Si la línea HostBusy se coloca en estado bajo y el periférico no tienen datos preparados para enviar, la transmisión retoma la fase de reposo inverso. Durante la fase de transferencia inversa, los datos son señalizados en dos paquetes, transmitiendo primero los bits menos significativos (observe la tabla 2). Debido a que los datos se transfieren en dos paquetes, la velocidad de envío se reduce a la mitad en el mejor de los casos. La única ventaja del modo nibble es su independencia de la norma IEEE 1284, lo que hace que cualquier equipo pueda trabajar en este modo; la velocidad es el punto negativo de este modo, si desea trabajar de manera bidireccional, el modo nibble debe ser la última opción (vea la tabla 2).

3) Modo Byte Este modo requiere de hardware especial, pues está diseñado para trabajar con líneas de datos que cuenten con buffers bidireccionales. El diseño básico de este modo fue ideado por IBM cuando introdujo su línea de computadoras PS/2. Antes de la existencia de la norma IEEE 1284, este puerto era conocido como PS/2 o puerto paralelo bidireccional. Al igual que el modo nibble, un periférico trabajando en modo byte usa la línea PrtClk para indicar una interrupción en la PC, lo que significa que el dispositivo está preparado para enviar datos. Cuando la PC recibe esta señal, verifica la señal HostClk para leer los datos. La PC coloca en alto la línea HostBusy para in-

8

dicar la transmisión exitosa del byte de datos. Este ciclo puede repetirse una y otra vez.

En este modo, la velocidad de transmisión hacia ambas direcciones es la misma, las limitaciones existentes dependen de las características del hardware y de las referencias en la norma IEEE 1284, potencialmente el diseño puede requerir cerca de cuatro microsegundos para la transferencia de cada byte (244 kbytes/s) pero la realidad muestra un envío de 100,000 bytes por segundo.

4) Modo EPP La mayor innovación de este modo fue la mejora en el desempeño lograda, gracias al diseño que aceleraba la velocidad con la que la PC podía empaquetar los datos en el puerto. El diseño EPP (Enhance Parallel Port, Puerto Paralelo Mejorado) modificó el hardware del puerto de manera que en lugar de usar registros de longitud byte, se utilizaban registros de palabras de 32 bits de longitud. Entonces el puerto podría manejar todas las conversiones necesarias para reempaquetar los datos en una transferencia de cuatro bytes de longitud. Al incrementarse la velocidad, también se incrementaron las especificaciones de cableado. Las cuales no están incluidas en la norma IEEE 1284, por lo que no garantiza que el puerto transmita utilizando las capacidades del diseño. Las especificaciones de la norma IEEE 1284 para el modo consideran sólo seis líneas, adicionales a las ocho de datos, para efectos de control. Tres líneas más son reservadas para uso individual de los fabricantes pero no están definidas en la norma. Un ciclo en este modo desarrolla una de cuatro operaciones: escritura de datos o lectura de datos. La dirección corresponde

a un registro del periférico, a la cual va dirigida la operación de los datos, permitiendo que diferentes bytes de datos sigan una misma dirección.

• nWrite. Los datos pueden viajar en ambos sentidos en una conexión EPP. Esta línea indica si el contenido de las líneas de datos está siendo enviado desde la PC (estado bajo) o desde el periférico hacia la PC (estado alto). • NDStrobe. Durante la transmisión de datos esta línea es usada de manera inversa (activa en 0) para indicar cuando los bits en las líneas de datos son válidos y correctos. A pesar de ser similar en funcionamiento a la línea strobe en el modo estándar, se ha movido a un pin distinto. • NAStrobe. Esta línea es usada para identificar la validez de la dirección en el bus de la interfaz. • NWait. Para responder que un periférico ha recibido de manera adecuada, la transferencia desactiva esta línea (colocándola en estado alto). El mantener esta línea en estado alto, indica a la PC esperar. Colocando la señal en estado bajo, indica que el periférico está preparado para recibir otra transferencia. • Intr. Para indicar a la PC que el periférico conectado necesita de servicio, se envía una señal por esta línea. La transición de estado entre bajo y alto indica una petición de interrupción del proceso. • NInt. Esta línea sirve como salida del modo mejorado, cuando la línea está activada, con un valor bajo, fuerza al sistema a cambiar del modo EPP al modo de compatibilidad.

5) Modo ECP Al utilizar el modo ECP (Extended Capabilities Port, Puerto de Capacidades Extendidas), la norma

IEEE 1284 define siete señales para control del flujo de datos a través de las líneas de datos. En este modo de transmisión, se definen dos protocolos de transferencia de datos, una para la transmisión hacia delante (de la PC al periférico) y la transferencia en reversa (del periférico a la PC), y la transición entre ellos. La transferencia utiliza un esquema de cableado de ciclo cerrado, lo que garantiza que todos los bytes llegarán a su destino inclusive cuando exista una desconexión temporal.

Debido a que todos los puertos paralelos comienzan a funcionar con el modo compatible, la PC y el periférico deben negociar primero, el cambio hacia el modo ECP, la conexión entra en reposo de la fase de transmisión hacia delante. • HostClk. Para transmitir la información a través de las líneas de datos, la PC comienza en un estado de reposo de la transmisión hacia delante y coloca los datos apropiados en las líneas de datos. Para indicarle al periférico que los valores son válidos en esas líneas y que deben ser transmitidos, se activa la línea Hostclock colocándola en un estado alto. • PeriphAck. La transferencia actual no se lleva a cabo hasta que el periférico mande una señal de verificación con la señal PeriphAck, colocándola en un estado alto. En respuesta a esta señal, la PV cambia el estado de la línea HostClk a un cero lógico. Entonces el periférico sabe que debe leer los datos en las líneas de datos. Una vez finalizada la lectura de los datos, el periférico cambia la señal PeriphAck a un estado bajo. Esto completa la transferencia de datos. • NPeriphRequest. Cuando un periférico necesita enviar datos a la PC, hace una petición colocando esta línea en un estado bajo. La petición es más una sugerencia que un comando, debido a que la PC es la única que puede iniciar o invertir el flujo de datos. • NReverseRequest. Para permitirle al periférico el envío de datos, la PC activa la línea nReverseRequest, colocándola en un estado bajo. Esta señal indica al periférico que la PC permitirá la transferencia.

9

TABLA 3 Nombre Data EcpAFifo

Dirección (hex) Base Base

Modo PC, PS/2 ECP

DSE SCR CFifo EcpDFifo TFifo Cnfga CnfgB Ecr

Base + 1 Base + 2 Base + 400 Base + 400 Base + 400 Base + 400 Base + 401 Base + 402

Todos Todos EPP ECP Prueba Configuración Configuración Todos

• nAckReverse. Para afirmar que la señal nReverseRequest ha sido recibida y que se está preparando para una transmisión en sentido inverso (del periférico a la PC), el periférico coloca la línea nAckReverse en un estado bajo, luego el periférico puede enviar datos y comandos a través de las 8 líneas de datos y de la línea PeriphAck. • PeriphClk. Para comenzar la transmisión inversa, el periférico coloca los datos en las líneas de datos y después envía una señal a la PC a través de la línea PeriphClk, colocándola en un estado bajo, indicando que los datos están listos para transferirse. • HostAck. La PC responde a la señal PeriphClk colocando en un estado alto la línea HostAck. El periférico entonces, responde colocando en estado alto la línea PeriphClk. Cuando la PC ha recibido los datos, responde colocando la línea HostAck en un estado bajo. Eso completa la transferencia y coloca la interfaz en un estado de reposo de la fase de transmisión en reversa. • Líneas de datos. A pesar de que este modo utiliza las mismas ocho líneas para la transmisión de datos que los demás modos de transmisión, las complementa con una señal adicional que indica si la información en las líneas es un dato o un comando. La señal utilizada cambia según el sentido de la transmisión. Cuando se transmiten datos de la PC al periférico, se utiliza la línea HostAck para especificar si son comandos o datos; cuando la información fluye del periférico a la PC se utiliza la línea PeriphAck para lo mismo.

Cómo se Controla el Puerto Paralelo En lo que respecta al control, cada puerto paralelo cuenta con sus propios controladores, existentes en el firmware del equipo, lo que ayuda al procesador a

10

Función Registro de datos Buffer PEPS (dirección) ECP Registro de estado Registro de control Buffer PEPS (datos) EPP Buffer PEPS (datos) ECP Prueba PEPS Registro A de configuración Registro B de configuración Registro de control extendido

identificar los sucesos en cada puerto. Las características de control también cambian según el tipo de puerto o modo de operación. En el caso de un buen puerto paralelo tradicional, los registros de la dirección base sirven para almacenar los datos, por lo que es llamado registro de datos. Siempre que el procesador escribe un conjunto de valores en el registro base del puerto, son retenidos hasta que el procesador envíe valores nuevos al puerto. El registro siguiente (dirección base + 1) se utiliza para monitorear qué hace la impresora. Es llamado registro de estado, los cinco bits más significativos de este registro son los que almacenan mensajes de la impresora a la PC. Los restantes tres bits no tienen función reservada en el puerto paralelo original. Para enviar comandos a la impresora, se usa el tercer registro (dirección base + 2). Es llamado registro de control y entrega comandos a través de los cinco bits menos significativos. El EPP fue concebido como una combinación de los puertos PS/2 y estándar. Al igual que esos diseños, la transferencia requería de tres registros, pero añadió cinco registros nuevos; éstos ocuparon las siguientes cinco direcciones de puerto. El primero de los cinco registros es llamado registro EPP, provee un canal directo a través del cual la PC puede especificar direcciones de dispositivos conectados con una conexión EPP. Los siguientes cuatro puertos del sistema EPP conforman los registros de datos EPP, los cuales proveen un canal de 32 bits para enviar datos al buffer de datos EPP. La circuitería del EPP toma los datos del buffer, los descompone en cuatro bytes separados y los envía por las líneas de datos EPP en secuencia. Al sustituir por cuatro puertos al único usado en el puerto estándar, se realiza una conversión a nivel de hardware, retirándole al sistema la responsabilidad del formato de datos. En adición, la PV puede escribir en los cuatro registros de

manera simultánea cuando la PC cuenta con un bus de 32 bits. Para cambiar del puerto estándar al puerto bidireccional para las operaciones requeridas por el EPP, sólo se agregan algunos valores en los bits no utilizados del registro de control. Al colocar el bit más significativo (bit 7) en un estado alto, se activa el modo de operación EPP. Al estar en un estado bajo este bit, ser fuerza al puerto a trabajar en modo estándar. El bit siguiente (bit6) activa la operación bidireccional cuando se coloca en un estado alto. Al igual que en otras variaciones del diseño básico del puerto, la PC controla un puerto ECP a través de un conjunto de registros. Para mantener la compatibilidad hacia atrás con otros productos, el diseño ECP comienza con el mismo trío de registros básicos. De cualquier manera. Se redefinen los datos en cada uno de los modos de operación. El diseño ECP complementa los tres registros básicos con un conjunto de registros que se encuentran desplazados a la dirección de puerto 0400h de la dirección base. El modo ECP usa registros adicionales para monitorear y controlar otros aspectos de la transferencia de datos. La tabla 3 muestra los registros usados, sus mnemónicos y los modos en los cuales funcionan. Al igual que en otros diseños mejorados del puerto, el ECP se comporta igual que un puerto estándar en su modo predeterminado. Los programas pueden escribir bytes a los registros de datos para enviarlos por las líneas de datos en la conexión paralela (vea la tabla 3).

la norma con la matrícula del mismo nombre, la “Norma del método de señalización para una interfaz con puerto paralelo bidireccional para computadoras personales”, fue aprobada en su última versión en marzo de 1994. La norma IEEE 1284 marca un parteaguas en el diseño del puerto paralelo y su nomenclatura. Define todos los aspectos de la conexión paralela, desde la interfaz del software en la PC, hasta el control electrónico de la impresora. Esta norma provocó la división de los dispositivos a usar con el puerto paralelo en dos categorías: Los dispositivos compatibles con IEEE 1284, que puede considerarse tecnología vieja y que trabajará con la nueva interfaz, y los dispositivos sometidos al IEEE 1284, tecnología nueva, que entienden y usan la nueva norma. Antes de la norma IEEE 1284, un puerto paralelo podía ser ubicado en 1 de 4 categorías: estándar (SPP), bidireccional (PS/2), mejorado (EPP) o de capacidades extendidas (ECP). La norma redefine los tipos clasificándolos según su modo de transferencia. Se puede considerar un SPP como un puerto de modo de transferencia nibble (nibble mode). Un puerto PS/2 usa un modo de transferencia llamado byte (byte mode). Los puertos EPP y ECP utilizan el modo de transferencia del mismo nombre. Además de la IEEE 1284, los modos EPP y ECP se definen en normas por separado. Ambos definen sus características físicas y eléctricas en la primera norma y las otras describen la forma en que operan los puertos y cómo se unen a las aplicaciones.

Definición de Registros del ECP Conectores y Cables Estándares y Aplicaciones En 1991, fabricantes de impresoras como Lexmark, IBM y Texas Instrument, se reunieron para comenzar una discusión acerca del desarrollo de nuevas normas para el control inteligente de impresoras en una red, formando así la alianza de Impresión en Red (NPA). La NPA definió un conjunto de parámetros que, cuando fueron implementados en las impresoras y servidores, permitían el completo control de las aplicaciones de la impresora y sus trabajos. Pero el usual puerto paralelo de una PC no tuvo la capacidad requerida para lo especificado en este estándar. Así la NPA envió una propuesta a la IEEE para la creación de un comité que desarrollara una nueva norma para un puerto paralelo bidireccional de alta velocidad para una PC. Este comité se convirtió en el IEEE 1284 creando

Existen distintos tipos de conectores para un puerto paralelo, el más conocido es el que se encuentra en

11

TABLA 5 - RELACION DE PINES SEGUN EL MODO DE OPERACION Pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Modo Compat. nStrobe Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 nAck Busy Perror Select nAutoFeed nFault nInit nSelectIn Tierra Pin 1 Tierra pin 2 Y 3 Tierra pin 4 Y 5 Tierra pin 6 Y 7 Tierra pin 8 Y 9 Tierra pin 11 Y 15 Tierra pin 10, 12 y 13 Tierra pin 14,16 y 17

Modo Nibble HostClk Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 PtrClk PtrBusy AckDataReq Xflag Hostbusy nDavidAvail nInit 1284Active

Modo Byte HosstClk Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 PtrClk PtrBusy AckDataReq Xflag Hostbusy nDataAvail nInit 1284Active

TABLA 4 - RELACION DE PINES SEGUN LA PC ORIGINAL DE IBM PIN 1 2-9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

12

FUNCION Strobe Data bit 0-Data bit 7 Acknowledge Busy Paper end Select Auto feed Error Initialize printer Select input Strobe input Tierra de pines de datos 1 y 2 Tierra de pines de datos 3 y 4 Tierra de pines de datos 5 y 6 Tierra de pines de datos 7 y 8 Tierra de pines 11 y 15 Tierra de pines 12, 13 y 10 Tierra de pines 14, 17 y 16

Dato 0-Dato 7 Acuse de recibo Ocupado Falta de papel Selector Auto regreso Error Inicializa impresora Selector de entrada

Modo EPP nWrite AD1 AD2 AD3 AD4 AD5 AD6 AD7 AD8 Intr nWait Usuario 1 Usuario 3 nDstrb Usuario 2 nInit nAStrb

Modo ECP HostClk Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 PeriphClk PeriphAck nAckReverse Xflag HostAck nPeriphReq nReverseReq 1284 Active

la parte trasera de la computadora, un conector tipo “D” de 25 pines. En la impresora encontramos otro que también es conocido, el conector Centronics, de 36 pines. En un esfuerzo para estandarizar, la norma IEEE 1284 denominó a estos conectores como 1284-A y 1284-B respectivamente. Además introduce uno nuevo, el 1284-C, similar al Centronics pero de la mitad del tamaño. Los conectores y cables relacionados con el puerto paralelo son: 1) 2) 3) 4)

Conector A Conector B Conector C Cables

1) Conector A El conector A (ver figura 1) es el más conocido, debido a que fue el primero en usarse, incluso antes de la norma 1284. En el chasis de la PC se puede encontrar la clavija hembra. Este conector es tipo D y cuenta con 25 pines. El conector mide aproximadamente 5 cm. De largo y 0,8 cm. De ancho. De los 25 contactos del conector, 17 son asignados a señales de transferencia de datos y control. Los 8 restantes se utilizan para señales de tierra. La tabla 4, relación de pines, muestra las funciones asignadas a cada uno según la PC original de IBM.

Figura 1

Bajo la norma IEEE 1284, la definición de cada señal en cada pin depende del modo de operación del puerto. Esto sin que el cableado físico se modifique. Bajo la norma 1284, la definición de cada señal en cada pin depende del modo de operación del puerto. Esto sin que el cableado físico se modifique. La asignación de señales a los pines se muestran en las tablas 4 y 5.

TABLA 6 - ASIGNACION DE SEÑALES Pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2) Conector B

31 Este conector es el que se encuentra en las 32 impresoras y es un legado del diseño del Centro33 34 nics. Contiene 36 pines, colocados dos columnas 35 de 18 a cada lado. En el jack de la impresora, el pin 1 se encuentra en la parte superior dere36 cha y los contactos están numerados de manera consecutiva de derecha a izquierda. El pin 19 aparece en la parte inferior derecha y, de nuevo, la numeración sigue de derecha a izquierda. La asignación de señales en este conector ha pasado a través de tres etapas. La primera fue establecida por Centronics para sus impresoras, la cual ahora es obsoleta pero sirvió como referencia para las siguientes. En 1981, IBM alteró este diseño redefiniendo algunas conexiones. Finalmente en 1994, IEEE publicó su asignación estándar (ver ta-

Centronics Strobe Dato 0 Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Acknowledge Busy No papel Selector Tierra Oscilador ext. Tierra Tierra de chasis +5 VCD Tierra de strobe Tierra de dato 0 Tierra de dato 1 Tierra de dato 2 Tierra de dato 3 Tierra de dato 4 Tierra de dato 5 Tierra de dato 6 Tierra de dato 7 Tierra de acknow Tierra de busy Tierra de entrada principal Entrada principal Error Detector de luz Línea de Conteo Retorno de línea de conteo Reservado

IBM Strobe Dato 0 Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Acknowledge Busy No papel Selector Auto alimentación Sin conexión Tierra Sin conexión Sin conexión Tierra de strobe Tierra de dato 0 Tierra de dato 1 Tierra de dato 2 Tierra de dato 3 Tierra de dato 4 Tierra de dato 5 Tierra de dato 6 Tierra de dato 7 Tierra del pin 12, 13 y 10 Tierra del pin 11 y 32 Tierra del pin 14, 36 y 31 Inicializa impresora Error Sin conexión Sin conexión Sin conexión Selector de entrada

bla 6), la cual, al igual que con el conector A, varía con el modo de operación. El diseño de Centronics incluye señales únicas que no se encuentran en diseños posteriores. La línea de conteo provee un contacto aislado cada vez que la impresora avanza el papel una línea. La señal de detección de luz provoca un indicador cuando la lámpara interna de la impresora para detectar la presencia de papel está funcionando. La señal de oscilador ex-

13

terno provee una señal de reloj para dispositivos externos, generalmente en los rangos de 100KHz a 200KHz. La señal de entrada principal funciona igual que la señal de inicio, inicializa la impresora vaciando el buffer interno. Al igual que el conector A, la norma IEEE 1284 en la definición de señales para el conector B cambia con el modo de operación del puerto (ver la tabla 6 y 7).

3) Conector C Debido a la confusión existente por los dos conec-

tores que existían, se decidió crear un tercer conector, el IEEE 1248-C. Todos los dispositivos que cumplían con el IEEE 1284 nivel 2, deberían usar este conector. Una vez que todos usaran el IEEE 1284 nivel 2, se olvidarían de problemas de compatibilidad y adaptadores. Este nuevo conector resolvía problemas de espacio, puesto que mide 4,4 cm de largo por 0,94 cm de ancho. El conector C es similar al B en cuanto a su forma y distribución de los pines (vea la siguiente figura).

TABLA 7 - ASIGNACION DE SEÑALES SEGUN EL MODO DE TRANSMISION Pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

14

Modo Compatible Nstrobe Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 nAck Busy Perror Select nAutoFeed No definido Tierra Lógica Tierra a chasis 1 lógico de periférico Tierra pin 1 Tierra pin 2 Tierra pin 3 Tierra pin 4 Tierra pin 5 Tierra pin 6 Tierra pin 7 Tierra pin 8 Tierra pin 9 Tierra pin 10, 12 y 13 Tierra pin 11 Y 32 Tierra pin 14, 31 y 36 nInit nError No definido No definido No definido NSelectIn

Modo Nibble HostClk Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 PtrClk PtrBusy AckDataReq Xflag HostBusy

Modo Byte HostClk Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 PtrClk PtrBusy AckDataReq Xflag HostBusy

Modo EPP nWrite AD1 AD2 AD3 AD4 AD5 AD6 AD7 AD8 Intr nWait Usuario 1 Usuario 3 NDStrb

Modo ECP HostClk Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 PeriphClk PeriphAck nAckReverse Xflag HostAck

nInit nError

nInit nDataAvail

nInt Usuario 2

nReverseReq nPeriphReq

1284 Activo

1284 Activo

nAstrb

1284 Activa

4) Cables

Cada señal en el conector C se relaciona con un pin (ver tabla 8) y al igual que en los otros conectores, la asignación de señales depende del modo de operación bajo la norma IEEE 1284.

La naturaleza de las señales del puerto paralelo es su peor enemigo, las señales interactúan entre ellas mismas y los otros alambres del cable. Mientras la señal viaje más lejos, la degradación de la señal será mayor. Por esta razón, la longitud máxima recomendada para un cable es de 3 metros (10 pies). Esto no significa que un cable más largo falle inevitablemente,

TABLA 8 - ASIGNACI0N DE SEÑALES SEGUN EL MODO DE TRANSMISION Pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Modo Compat. Busy Select nAck nFault Perror Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 nInit nStrobe nselectIn nAutoFeed 1 lógico del equipo Tierra pin 1 Tierra pin 2 Tierra pin 3 Tierra pin 4 Tierra pin 5 Tierra pin 6 Tierra pin 7 Tierra pin 8 Tierra pin 9 Tierra pin 10 Tierra pin 11 Tierra pin 12 Tierra pin 13 Tierra pin 14 Tierra pin 15 Tierra pin 16 Tierra pin 17 1 lógico del periférico

Modo Nibble PtrBusy Xflag PtrClk nDataAvail AckDataReq Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 nInit HostClk 1284 Activo HostBusy

Modo Byte PtrBusy Xflag PtrClk nDataAvail AckDataReq Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 nInit HostClk 1284 Activo HostBusy

Modo EPP nWait Usuario 3 Intr Usuario 2 Usuario 1 AD1 AD2 AD3 AD4 AD5 AD6 AD7 AD8 nInit nWrite nAstrb nDstrb

Modo ECP PeriphAck Xflag PeriphClk nPeriphReq nAckReverse Dato 1 Dato 2 Dato 3 Dato 4 Dato 5 Dato 6 Dato 7 Dato 8 nReverseReq HostClk 1284 Activo HostAck

nInit nError

nInit nDataAvail

nInit Usuario 2

nReverseReq nPeriphReq

1284 Activo

1284activo

nAstr

1284 Active

15

Figura 2

ben estar presentes. La diferencia entre los cables viejos de impresora y aquellos que cumplen con la norma IEEE 1284 es substancial. A pesar de que se puede conectar cualquiera de los dos cables, los dispositivos que explotan los límites de alta velocidad de los modos EPP y ECP, no funcionarán adecuadamente con cables que no cumplan con las características especificadas.

Protocolos y Tiempos pero en ciertas circunstancias algunos cables no son confiables cuando se usan en distancias largas. La longitud con la que se puede trabajar de manera eficiente depende de la calidad y estado de la electrónica de la computadora y la impresora o periférico, así como de la estructura y características de los alambres en el cable. Dependiendo de la sensibilidad de la PC o impresora pueden surgir anomalías en la comunicación tales como ruido, interferencias o desgaste digital. Sin embargo, algunas impresoras y PCs podrían trabajar con cables de longitud de 15 metros (50 pies) que era el estándar usado con impresoras de puerto serie. El modo de alta velocidad de los modernos puertos paralelos hace aún más importante el uso de un cable adecuado. Cuando el puerto paralelo opera en modo EPP o ECP, la calidad del cable se vuelve crítica incluso en distancias cortas. La velocidad de señalización a través de una de estas interfaces puede llegar a estar en el rango de los megahertz. Consecuentemente, en la norma IEEE 1284 se especifica a detalle un cable para operar con altas velocidades. La figura 2 muestra la estructura del cable. A pesar de que la norma para el cable paralelo especifica que el cable debe tener doble blindaje para prevenir interferencias. Cada alambre debe estar trenzado con su respectiva tierra de retorno. A pesar de que varios conectores no proveen pines individuales para cada tierra, los alambres de tierra de-

16

Al igual que cualquier interfaz, el puerto paralelo puede alcanzar una velocidad máxima, ésta, es afectada por diversas variables como las limitaciones del conjunto de cables que se utilizan, la velocidad del circuito del puerto, la velocidad a la que escribe el procesador en los registros, la disponibilidad del dispositivo en el otro extremo, etc. Los tiempos de las señales del puerto son lentas, esto para adaptarse a la variedad de dispositivos existentes, debido a que no existían normas antes de la IEEE 1284, los fabricantes tenían que utilizar pérdida de tiempo para asegurarse del buen funcionamiento de la comunicación con su dispositivo; con estas pérdidas para compatibilidad, la velocidad de transmisión por carácter era de 10 microsegundos, colocando una taza de transferencia de 1000.000 bytes por segundo. Operando con el tiempo más estrecho que permite la IEEE 1284, un puerto paralelo convencional puede completar la transferencia completa de un carácter en 4 microsegundos, colocando la taza de transferencia en 250.000 bytes por segundo. Agregando lo mejor de los componentes en ambos extremos del cable y utilizando una PC y un periférico rápido, se pueden esperar velocidades de 80 a 90Kb/s. Las especificaciones del EPP permiten que un ciclo se desarrolle en medio microsegundo, lo que aumenta la taza de transferencia a 2MB/s, aunque en el mundo real y trabajando en condiciones óptimas, la transmisión de los EPP y ECP se acercan a la mitad de esto, transmitiendo cerca de 800kB/s. Esto no significa que sea el tope de la tecnología, se espera que en el futuro, con ayuda del estrechamiento de los tiempos de transmisión, llegando a 100 nanosegundos, se alcancen velocidades de 8 MB/s. Un modo efectivo de aumentar la velocidad de transferencia es usando alguna técnica de compresión; de hecho, ésta es parte del estándar ECP. Como una

opción ECP permite TABLA 9 - TABLA COMPARATIVA ENTRE LOS MODOS DE OPERACION comprimir los datos a ser enviados por la inModo de operación Velocidad máxima Transmisión terfaz. SPP 150Kbps Unidireccional El circuito del puerNibble 75Kbps Bidireccional to realiza la compresión y descompresión Byte 244Kbps Bidireccional por sí solo, haciéndolo EPP 800KB/s Bidireccional invisible para la PV y ECP 1.6MB/s Bidireccional para el software, el efecto en la conexión Paralelo Mejorado) y SPP. En este modo de operación es la misma que si se elevara la velocidad pero sin los se tendrá acceso a los registros SPP (Datos, Estado y problemas eléctricos. Control) y a los registros EPP. El diseño ECP usa una técnica de compresión llaAl utilizar este modo, es posible invertir la direcmada Codificación de Ejecución Longitud (Run Length ción del puerto utilizando el bit 5 del registro de conEncoding) o RLE. El funcionamiento básico trabaja con trol. EPP 1.7 es una de las primeras versiones del EPP, las largas repeticiones de un patrón, en el caso del la cual no considera el bit de tiempo transcurrido (timeECP este patrón es a nivel byte. Cuando el mismo byout) te es repetido en una secuencia de datos, el sistema lo traslada en dos bytes, el primero contiene el byte oriModo EPP1.9 y SPP ginal y el segundo un multiplicador. Este sistema de Este modo funciona de manera similar al anterior compresión podría ser contraproducente pues en el sólo que utiliza la versión 1.9 del EPP la cual ya perpeor de los casos produciría un radio de compresión mite el uso del bit time-out. de 1:2. En el mejor de los casos, la compresión RLE puede ofrecer un radio de 64 a 1, pero en general se Modo ECP ha visto que el radio es de 2 a 1 reduciendo el tiemAl utilizar este modo se puede utilizar todo el conpo a la mitad. junto de registros ECP y sus características. Cuando se La forma de trabajar de un puerto puede ser defiseleccione éste, el modo EPP no estará disponible. nida desde el BIOS del equipo. Hoy en día, la mayoría de los puertos paralelos son multimodo y los modos Modo ECP y EPP1.9 típicos disponibles en un equipo son: En este modo se tendrán las mismas características que en el anterior, pero contando con la versión 1.9 del EPP. Modo de Impresión La tabla 9 es una comparativa entre los modos de funcionamiento de un puerto paralelo en relación a la Usualmente llamado modo normal o default. Es el velocidad máxima de funcionamiento. modo básico y corresponde al SPP (Puerto Paralelo Estándar) en dirección hacia delante solamente. En este caso, las características de bidirección no están presentes por lo que el bit 5 del registro de control no se utiliza. Modo Estándar y Bidireccional (SPP) Permiten la transmisión bidireccional, utilizando el bit 5 del registro de control se pueden leer valores desde el dispositivo en las líneas de datos. Modo EPP1.7 y SPP Es una combinación de los modos EPP 1.7 (Puerto

CIRCUITO DE COMANDO POR PUERTO PARALELO

A continuación daremos un simple diseño electrónico para que pueda conectar al puerto paralelo de su computadora, y pueda saber el estado lógico de dicho puerto. Un circuito muy simple y de gran utilidad con apenas una compuerta inversora, un led y una resisten-

17

cia. Con esta información, se pretende quitar el mito de que utilizar una PC para conectarle dispositivos electrónicos (cualquiera sea su naturaleza), está exclusivamente reservado para “sabios y expertos”, por lo que se demostrará que “jugar” con una computadora es una actividad muy divertida. Los autores de este proyecto son: Ing. Guadalupe Ramírez [email protected] Ing. José Alberto Tapia Guzmá[email protected] Ing. Ismael Cervantes de [email protected]

La Elección del Puerto Paralelo La importancia del puerto paralelo radica en el hecho de que es un canal de comunicación, por medio del cual se puede intercambiar información entre una computadora y el entorno que la rodea. Tal como vimos, la creación del puerto paralelo se atribuye a la imperiosa necesidad de controlar una impresora, esto es, enviarle datos que representan caracteres, y éstos se impriman, además de mover el rodillo para subir o bajar la hoja, y por último saber si la impresora tiene hojas o no, o simplemente si está lista para recibir un documento. De acuerdo a esto último, podemos aprovechar las características que se emplean en el control de una impresora, para manejar el puerto paralelo conforme a ciertas necesidades específicas, y tener la certeza de controlar cualquier otro dispositivo electrónico. Haciendo un Resumen Haciendo historia, podemos decir que en 1981 IBM introdujo la Computadora Personal (PC), en la cual estaba incluido el puerto serie, pero debido a su bajo rendimiento, posteriormente también se le agregó a la PC el puerto paralelo como una alternativa al puerto serie. La ventaja principal radica en que el puerto paralelo tiene la capacidad de transmitir 8 bits de datos a la vez, en vez de uno por uno como lo hace el puerto serie. Desde su creación, el puerto paralelo ha sufrido varias modificaciones para hacerlo más veloz y eficiente, como ejemplo mencionaremos lo siguiente. El puerto paralelo original era unidireccional, esto quiere decir que el intercambio de información se realizaba en un solo sentido (de la PC hacia fuera). Con el surgimiento de las impresoras multifuncionales (impresoras con funciones de escáner), fue necesario contar con un

18

medio de comunicación que realizara el intercambio de información en ambos sentidos, razón por la cual se creó el puerto bidireccional. Recuerde que, en la actualidad, se conocen cuatro versiones del puerto paralelo: • Puerto paralelo estándar (Standart Parallel Port SPP) • Puerto Paralelo PS/2 (bidireccional) • Enhanced Parallel Port (EPP) • Extended Capability Port (ECP) En lo que a los electrónicos respecta, las características principales del puerto paralelo están definidas mediante la norma IEEE-1284, en la cual se establecen tanto las dimensiones de los conectores empleados, así como la distribución de sus terminales (pines o patitas) hasta los niveles eléctricos óptimos para su funcionamiento. El puerto paralelo está constituido por tres conjuntos de cables (buses) por medio de los cuales se transmite la información, estos buses son llamados, bus de datos, bus de control, bus de estatus. El bus de datos contiene un grupo de 8 líneas y simultáneamente cada una de ellas envía un bit de información, que en conjunto forman un dato o carácter que es el que finalmente se imprime. En la actualidad, el bus de datos del puerto paralelo es bidireccional, esto quiere decir que tanto podemos transmitir datos hacia el exterior de la computadora, así como recibir datos de circuitos electrónicos externos a la computadora. El bus de control es unidireccional y se compone de 4 líneas por medio de las cuales podemos transmitir información hacia el exterior de la PC, principalmente por este medio se envía la información que requiere la impresora para su funcionamiento básico, por ejemplo; jalar la hoja de papel, colocar el cabezal de impresión, etc. El bus de estatus se compone de 5 líneas y es usado para envío de mensajes de indicadores de estado desde el dispositivo al exterior de la PC. Para direccionar los buses que integran el puerto paralelo se requiere del conocimiento de la ubicación de la dirección que se le asignó a éste en la PC. Comúnmente se asigna la dirección 378h, que corresponde al bus de datos y que a la vez identifica al puerto paralelo, por lo tanto se trata de la dirección base del puerto. Para accesar tanto al bus de estatus como al de control se realiza lo siguiente: Bus de datos Dirección Base Bus de status Dirección Base +1 Bus de control Dirección Base +2

Figura 3

Figura 4

Cambiando la Direccción del Puerto Paralelo En caso de que la dirección base del puerto para-

lelo de su computadora no sea la 378h, usted puede encontrarla fácilmente siguiendo las indicaciones siguientes: Para Windows 95, 98, Milenium y XP haga click con el mouse en el botón “inicio” del escritorio, después elija la opción configuración y por último panel de control (vea la figura 4). Enseguida elija el ícono “SISTEMA” y en la nueva ventana presione la pestaña “ADMINISTRADOR DE DISPOSITIVOS”, tal como se muestra en la figura 5.

Dirección de puerto paralelo

Figura 5

19

Figura 7

Figura 6

Ahora nos vamos a la opción “PUERTOS” elegimos “PRINTER PORT LPT1” y damos click en el botón “PROPIEDADES” . En la nueva ventana presionamos la pestaña “RECURSOS” y de esta manera podemos ver la dirección del puerto que en este caso es la 378, tal como muestra la figura 4. Para quienes no conocen, la dirección 378 es una posición de memoria y está expresada en código hexadecimal. El puerto paralelo incluye 8 líneas de tierra que tienen la finalidad de colocar a un mismo potencial eléctrico los puntos de referencia de señal de los dispositivos que se interconectan, de modo que puedan compartir una tierra común, por otra parte también actúan Tabla 10

20

como blindajes de las líneas más importantes. Cada bus del puerto paralelo es accesado mediante una dirección, de acuerdo a la tabla 10 en la que se indica la relación existente entre las líneas físicas del conector y los buses. En la figura 6 vemos un conector DB25 macho y en la figura 7 un conector DB25 hembra Vemos en esas figuras cómo se encuentran distribuidas las terminales de manera física en el conector macho y hembra, de acuerdo a la tabla anterior.

Construcción del Circuito Electrónico de Comando Para poner en práctica lo antes mencionado comenzaremos por lo más sencillo, y para ello realizaremos un experimento en el cual manipularemos el intercambio de información de la PC hacia un circuito electrónico exterior y viceversa. Podemos confirmar las propiedades eléctricas del puerto paralelo, a través del uso de instrucciones simples en MS-DOS y mediante el empleo de un indicador luminoso en la terminal correspondiente del puerto paralelo, observaremos que éste se enciende o se apaga dependiendo de los datos que estemos mandándole. El indicador luminoso puede ser un led, pero si lo conectamos de manera directa, se puede dañar seriamente al puerto paralelo por lo cual necesitamos utilizar una interfaz, cuya función será proteger al puerto paralelo de la potencia que demanda el encendido del led. La forma más simple de implementar una interfaz es mediante la utilización de una compuerta lógica que trabaje bajo las normas TTL, la misión de esta compuerta será suministrar al led la corriente

Figura 8 que necesita para operar y que no sea el propio puerto paralelo el que lo haga. El circuito básico que se propone para trabajar con una sola línea del bus de datos del puerto paralelo, es el que se muestra en la figura 8. De este circuito se observa que se tiene una compuerta NAND cuyas terminales de entrada están conectadas de manera común, por lo que se comportará como una compuerta inversora que recibirá el estado lógico proveniente de la computadora y de acuerdo a la operación de la compuerta el dato a la salida que será visualizado en el led, cuya respuesta se encontrará invertida conforme al dato original; es decir si la compuerta recibe un estado lógico alto “1” el led permanecerá apagado, en caso contrario si recibe un estado lógico bajo “0” el led se encenderá. Es importante observar que el punto de referencia (TIERRA o GND) de circuito exterior se debe conectar de forma común a una de las terminales contempladas como GND en el conector del puerto paralelo, si esto no se hace nunca se transmitirán los datos. En la figura 9 podemos observar cómo está armado el circuito en un experimentador digital. Para enviar los estados lógicos de la PC al exterior, utilizaremos bajo el ambiente de MS-DOS las instrucciones

que permiten el acceso o salida de datos. Recomendamos seguir las indicaciones de las siguientes imágenes, para que se tenga el conocimiento de cómo se establece lo anteriormente mencionado. Para empezar a enviar datos a través del puerto paralelo, entraremos a MS-DOS que lo encontraremos si hacemos click en los botones de acuerdo al siguiente orden “ INICIO –PROGRAMAS – MS-DOS (figura 10). Esta secuencia puede ser diferente según el sistema operativo que Ud. tenga. Suponemos que Ud. posee conocimientos mínimos de manejo de Windows, si no los tiene recomendamos que lea el texto “La electrónica de las Computadoras 2005” de Editorial Quark. Una vez dentro de MS-DOS (figura 11), tecleamos “DEBUG” (que es el comando utilizado para trabajar con el puerto paralelo) y presionamos enter. Ahora, para empezar a enviar instrucciones a través del puerto utilizamos el comando “OUPUT” simbolizado por la letra “o” seguido de la dirección del bus de datos en Figura 10

Figura 9

21

Figura 11 este caso “378” y por último, la cantidad expresada en código hexadecimal. Se tiene que considerar que son dos bytes, es decir si queremos enviar la cantidad “00” la manera correcta de hacerlo es “ o 378 00” seguido de la tecla enter. En el caso de que necesitemos saber qué información está leyendo el puerto en alguna de las terminales de entrada, utilizaremos el comando ”INPUT” simbolizado por la letra “i” , para ello introducimos la instrucción “i” seguida de la dirección, que en este caso es 378 (i 378) y tecleamos enter, y lo que aparecerá en pantalla será la cantidad lógica que está recibiendo el puerto paralelo.

Para salir del “DEBUG” tecleamos “QUIT” y después enter. Y eso es todo... Pero... ¿cómo comando un dispositivo? Si ha leído atentamente este capítulo y posee algún conocimiento sobre MSDOS, no tendrá problemas en realizar el comando de dispositivos por medio de sentencias muy sencillas. Si no posee estos conocimientos, le recomendamos que baje un pequeño manual que amplía esta entrega de nuestra web con la clave: “puerto05”. ****************

Puerto Serie Introducción La comunicación serie se establece cuando un dato se transmite bit por bit, para verlo más claro hay que entender primero que las computadoras manejan la información por bytes, es decir un grupo de bits (8, 16, 32), estos bits son representados con ceros lógicos y unos lógicos, ya explicaremos por que ceros y unos, por ejem-

22

plo 00110011 es un byte de ocho bits o un dato de ocho bits. Ahora bien, para lograr la comunicación serie un byte se transmite bit por bit, un cero o un uno, por medio de un canal, generalmente un alambre de cobre. Los bits que son transmitidos lo hacen cada determinado tiempo hasta formar un byte (figura 1). Hay que tener en cuenta que los datos en una comunicación serie pueden ser transmitidos de tres distintas maneras:

• Modo Simplex en el que la transmisión de datos es en un solo sentido, solo se envían datos del emisor al receptor. • Modo Half Duplex en el que la transmisión de datos se realiza en ambos sentidos, se envían datos del emisor a receptor y viceversa, pero no al mismo tiempo. • Modo Full Duplex donde la transmisión de datos se realiza en ambos sentidos al mismo tiempo, se envían datos tanto como se reciben por dos líneas diferentes. Hay que recordar que las computadoras manejan bytes para trabajar, por lo que debe de haber un medio por el cual se comunican los datos.

Norma RS-232

Figura 1

aunque existen variantes de esta norma la más general es la llamada RS-232c. Esta norma define un sistema en el cual dos dispositivos están interconectados por un cable, del cual existen dos variantes de terminales, DB9 y DB25. En las figuras 2 y 3, observamos las características de estas fichas.. Aún cuando la documentación original del estándar no especifica un conector en especial, la mayoría de las computadoras comenzaron a utilizan el conector DB-9 (fig. 3) dado que 9 son los conectores que se requieren para la comunicación asíncrona (hablaremos de esto más adelante). En la tabla 11 se da la correspondencia de las 9 terminales en el DB-9 y el DB-25 y enseguida se da una breve explicación de la función.

Ya hemos visto en forma breve cómo se realiza una comunicación serie, pero lo que se quiere es mandar un dato a la computadora, y recordemos que las computadoras, y en sí los dispositivos que se conectan a ella, manejan los datos en forma de bytes, por lo que debe de haber un medio para diferenciar cuándo se van a trabajar los datos en forma de bytes y cuándo en forma de bits. Es aquí cuando, por fin, hace aparición el puerto serie, que es el encargado de establecer si se recibe información que hay que trabajarla por bytes o si se envía información que hay que trabajar por bits. Figura 3 Este puerto se localiza en la mayoría de las computadoras y es conocido como COM, claro que hay más de un puerto serie por lo que generalmente se encontrará COM1, COM2 (el primero casi TABLA 11 siempre dedicado al DB25 DB9 Abreviación mouse y el otro libre Terminal 2 Terminal 3 TD aunque esto puede ser Terminal 3 Terminal 2 RD Terminal 4 Terminal 7 RTS modificado a volunTerminal 5 Terminal 8 CTS tad), aunque pueden Terminal 6 Terminal 6 DSR ser más. Terminal 7 Terminal 5 SG Hay que saber que Terminal 8 Terminal 1 CD existe una norma que Terminal 20 Terminal 4 DTR se utiliza para el maneTerminal 22 Terminal 9 RI jo del puerto serie y

Figura 2

Nombre Completo Transmisión de Datos Recepción de Datos Solicitud de envío Autorización de envío Datos listos para enviar Tierra señalada Detector de Acarreo Datos listos para enviar Indicador de Terminado

23

Transmisión de datos (TD). Esta línea es utilizada para transmitir datos desde el DTE (Data Terminal Equipment – Equipo Terminal de Datos) al DCE (Data Carrier Equipment – Equipo Transmisor de Datos). Es mantenida en estado de 1 lógico cuando nada se transmite. La terminal comenzará a transmitir cuando un 1 lógico esté presente en las siguientes líneas: • Autorización de envío. • Terminal de datos lista. • Datos listos para enviar. • Detector de Acarreo. Recepción de datos (RD). Utilizada para recibir datos desde el DCE al DTE. La terminal comenzará a transmitir cuando un 1 lógico esté presente en las siguientes líneas: • Autorización de envío. • Terminal de datos lista. • Datos listos para enviar. • Detector de Acarreo. El estándar especifica que los niveles de salida son -5 a -15 volt para el 1 lógico y +5 a +15 volt para el 0 lógico, mientras que los niveles de entrada son -3 a 15 volt para un 1 lógico y +3 a +15 volt para un 0 lógico. Esto asegura que los bits puedan ser leídos correctamente aún con grandes distancias entre la DTE y la DCE, especificados como 16.5 metros o 50 pies, aún cuando estas señales soportan mayores distancias dependiendo de la calidad del cableado y el blindaje. Solicitud de envío (RTS). En esta línea el DTE envía una señal cuando está listo para recibir datos del DCE. El DCE revisa esta línea para conocer el estado del DTE y saber si puede enviar datos. Autorización de envío (CTS). Aquí el DCE envía una señal cuando está listo para recibir datos del DTE. Datos listos para enviar (DSR). Cuando se está en 1 lógico indica al DTE que el DCE está listo para enviar datos. Tierra señalada. Esta es la tierra lógica que es utilizada como punto de referencia por todas las señales recibidas y transmitidas. Esta señal es indispensable y debe de estar presente para todas las comunicaciones.

24

Detector de Acarreo (CD). En esta línea el DCE indica al DTE que ha establecido una línea portadora (una conexión) con un dispositivo remoto. Datos listos para enviar (DTR). Cuando esta línea está en estado de 1 lógico se puede comenzar a enviar y recibir datos. Cuando esta línea está en nivel de 0 lógico, el DCE terminará la comunicación. Indicador de Terminado (RI). Esta línea es utilizada, comúnmente, por el software de comunicaciones cuando el dispositivo no está en modo de auto responder para indicarle que un dispositivo remoto está llamando. Esta señal es optativa cuando no se utiliza software que contestará la llamada automáticamente. Antes de empezar con el diseño de un probador para establecer una comunicación con el puerto serie, hay que mencionar que un bit faltante en la terminal de recepción puede provocar que todos los bits siguientes sean cambiados o recorridos, resultando en datos incorrectos al convertirlos de regreso a una señal paralela (es decir utilizando los ocho bits al mismo tiempo). Por lo tanto, para conseguir una comunicación serie confiable se deben prevenir estos errores de bit que pueden emerger en formas distintas. Existen dos métodos para corregir errores de bit en comunicaciones seriees: la comunicación síncrona y la comunicación asíncrona. El método usado por las computadoras, es el de la comunicación asíncrona. La comunicación asíncrona consiste en introducir un bit de inicio que indica el comienzo de una transmisión de un dato. La posición de cada bit puede ser determinada cronometrando los bits a intervalos regulares, tomemos en cuenta que los dos sistemas (transmisor y receptor) pueden no estar sincronizados por una señal de reloj, es decir que en este método las terminales de la comunicación no están sincronizadas por una línea de señal, por eso es importante que ambos sistemas estén configurados a la misma velocidad de transmisión. Cuando el dispositivo receptor de la comunicación recibe el bit de inicio, comienza un temporizador de corto tiempo, y ya que los datos son una pequeña cantidad de bits es difícil que el reloj salga de sincronía. Comúnmente en las computadoras se usan datos

de 7 a 8 bits que representan símbolos o leFigura tras (caracteres). Estos caracteres son interpretados como código ASCII (Código Estándar Americano para el Intercambio de Información, por sus siglas en inglés) para acomodar todas las letras mayúsculas y minúsculas del alfabeto, dando un total de 256 caracteres de 8 bits, aunque algunas computadoras aún usan el código ASCII con 127 caracteres de 7 bits utilizando el octavo como bit de paridad, esto lo explicaremos enseguida. Por convención, el bit menos significativo de la palabra es enviado primero y el más significativo al final. Cuando se establece una comunicación, el dispositivo transmisor codifica cada dato transmitido agregándole un bit de inicio al principio y 1 o 2 bits al final. En algunas ocasiones se agrega un bit de paridad entre el último bit del dato y el primer bit de paro, esto es utilizado como verificación de integridad de datos. Pueden ser utilizados 5 tipos diferentes de bits de paridad, los cuales son los siguientes: • Bit marcador de paridad (siempre es un 1 lógico). • Bit de paridad de espacio (siempre es un 0 lógico). • Bit de paridad par es puesto en 1 lógico, si cuando al contar el número de bits en la palabra el resultado es par. • Bit de paridad non es puesto en 1 lógico, si cuando al contar el número de bits en la palabra, el resultado es non. • Dato sin bit de paridad, ó sin paridad, es cuando se elimina el bit de paridad del dato. Según se conforme el marco de datos es la forma como se da referencia al marco mismo. Con marco nos referimos a un carácter transmitido, es decir el conjunto de bits que conforman a dicho carácter. Por ejemplo: Un dato de 8 bits, con paridad Non y 1 bit de paro es conocido como 8N1 (ver figura 4).

4

Otro factor importante de toda señal serie asíncrona es la velocidad de comunicación, que es la velocidad a la que los datos son transmitidos. Las velocidades a las que se envía la información comienzan en los 50 bps (bits por segundo) y casi de manera estándar, se van duplicando hasta los 384 000 bps.

CIRCUITO PROBADOR DE PUERTO SERIE Ahora sabemos cómo se realiza una comunicación serie, es decir la forma de mandar información en forma seriada de un dispositivo a otro. También sabemos lo esencial de la norma que se usa para establecer una comunicación serie, y cómo se aplica en el puerto serie. Sin embargo, nuestro propósito es llevar la teoría a la práctica y lo más sencillo con lo que podemos empezar, es creando un circuito que nos muestre cómo se realiza la comunicación serie; mandando información a la computadora por medio del puerto serie. Obviamente será cualquier información, en nuestro caso ceros y unos lógicos solamente. Usaremos el modo simplex (sólo enviaremos datos en forma serie), para esto armaremos el circuito que se ve en la figura 5.

Diagrama del Probador A continuación explicaremos las partes que conforman nuestro probador del puerto serie. Antes que nada recordemos que la comunicación serie en una computadora se realiza de manera asíncrona, por lo que debemos hacer que la información que vamos a transmitir viaje a la misma “velocidad” que se maneja en la computadora, ésta puede variar

25

pero la más comercial es 9600 bits/seg. ¿Pero y qué son 9600 bits/seg?, pues es la cantidad de bits que se envían en un segundo, en nuestro caso se envían 9600 bits en un segundo, o lo que es igual, enviaremos un bit en 104.16µs donde µs significa micro segundos (0.00010416 segundos). La forma de lograr enviar 9600 bits en un segundo es utilizando el temporizador 555, que es, por así decirlo, el pionero de los temporizadores a la hora de establecer modos síncronos o asíncronos en un circuito. El temporizador 555 no es más que un circuito integrado con ocho pines (terminales o “patitas”, pero nosotros los denominaremos pines) como se muestra en la figura 6. Para enviar bits de manera constante utilizaremos la configuración de modo astable (figura 7) en el 555. Las resistencias R1 y R2, y el capacitor C2 son los elementos de los que dependerá el 555 para lograr una frecuencia que trabaje a 9600Hz, esto es que por cada segundo que pasa se trabaja con 9600 periodos (T) con un tiempo de 104.16µseg cada uno, éste es el tiempo que necesitamos para poder transmitir un bit en la comunicación serie que vamos a establecer. Usaremos las siguientes fórmulas para proponer los valores de R1, R2 y C2: t1= 0.693(R1 + R2) C2

Figura 5

26

t2= 0.693(R2 C2) En donde: t1= 0.60T con T= 1/f= 104.16 mseg. C2= 0.01µF (micro farads) o 10pf (pico farads) Aclaremos que t1 y t2 son los tiempos

Figura 7

Figura 6

en el que se forma un período T para generar una señal parecida a la representación de la figura 8. En donde t1 va desde un nivel bajo de voltaje a uno alto, y t2 va de un nivel alto de voltaje a uno bajo, y así periódicamente. Haciendo las operaciones y los despejes necesarios nos quedan los siguientes valores.

Figura 8

R1= 3006.25Ω R2= 6012.59Ω Estos valores los aproximaremos a un valor de resistencia que sea comercial, en nuestro caso usamos una de 2.2kΩ para R1 y otra de 5.6kΩ para R2. C2 es un capacitor cerámico de 100pF. En la figura 7 podemos ver que también hay un led conectado al pin 3, éste es opcional y lo usamos para verificar el correcto funcionamiento del temporizador 555, para esto debe usarse una frecuencia de 1Hz lográndolo con solo cambiar C2 por un capacitor de 100µF; no olvide colocar una resistencia antes del led para que éste no se dañe. Ya tenemos la frecuencia necesaria para trabajar, ahora lo que buscamos es enviar la información bit por bit, para esto usaremos el circuito integrado 74LS165N, en cual cuando entran ocho bits al mismo tiempo se irán desplazando a la salida de dicho circuito uno por uno. El circuito 165 se puede observar en la figura 9. Del pin 11 al pin 14 y del pin 3 al pin 6 (de P0 a P7) entrarán los ocho bits que conformarán un byte de dato, esto sucede al mismo tiempo al estilo de una comunicación en paralelo (8 bits al mismo tiempo). Después en el pin 9 (Q7) la información saldrá bit por bit, empezando desde el bit menos significativo (el primero contando de derecha a izquierda). La señal que genera el 555 entra en el pin 15 (CP2). En el diagrama de la figura 10 mostramos la forma de conectar este circuito, recuerde que la señal del 555 sale del pin 3 e irá conectada al pin 15 del 165. Para introducir un dato de ocho bits al circuito 165 utilizaremos un dip switch (en el diagrama está en color rojo) de ocho terminales con el cual controlaremos el dato enviado, estará en la posición ON para enviar un 1 lógico y del número que le corresponde para un 0 lógico. El pin 2 estará conectado a tierra y el pin 10 a Vcc. Analizando el diagrama notamos que el pin 7 no va conectado, simplemente no lo

Figura 9

Figura 10

27

Figura 11

usaremos, y ahora bien lo que resalta es el pin 1 que va conectado a Vcc por medio de R13, y a un botón pulsador (o un switch) que se dirige a tierra. La función de este pin es la de verificar si se ha de registrar un corrimiento de bits o no, si permanece en 1 lógico no habrá un 1 lógico en la salida, pero si esto cambia a un cero lógico las entradas P0 a P7 admitirán los bits que se propongan en el dip switch. Este 0 lógico se logrará presionando el botón pulsador, al soltarlo saldrán los bits del dato por el pin 9. Sólo hace falta tener un bit de inicio y otro de paro, como ya sabemos el bit de inicio debe ser un 0 lógico y el de paro un 1 lógico, si usamos las propiedades del circuito 165 podemos generar estos bits. Pues bueno, como siempre hay un 1 lógico en esta entrada sencillamente es éste el que utilizaremos como bit de paro. Para introducir un bit de inicio que indique el comienzo del dato, sólo tendremos que presionar el botón, pero será necesario utilizar algunas compuertas lógicas para poder conservar la integridad del

Figura 12

28

dato. En la figura 11 se muestra cómo serán conectadas estas compuertas al botón. En el diagrama se muestra una compuerta AND (74LS08N), una compuerta OR (74LS32N) y una compuerta NOT (74LS04N) para generar un bit de inicio sin alterar la salida del dato 165. Podemos ver que utilizamos un led para verificar el correcto funcionamiento de nuestro circuito, recordemos que para que sea visible el 555 debe de generar una señal de 1Hz. Lo que sucede es que mientras el botón no sea presionado habrá un 1 lógico y la salida del 165 será también 1 lógico (esto se muestra en la figura 7 con color rojo). Mientras tanto, si el botón es presionado habrá un cero lógico que indicará el inicio de una transmisión (esto se representa de color azul en la figura 11) y cuando soltemos el botón iniciará el corrimiento de bits en el 165. Si prestamos atención, las compuertas logran que lo primero que haya en la salida de datos, (que se da a la salida de la compuerta AND) sea el bit de inicio. Después de soltar el botón, saldrán los bits del dato enviado, que también pasarán por las compuertas, sin sufrir alteración alguna. Como ya hemos visto para establecer una comunicación serie se debe hacer uso del protocolo RS-232 pero el circuito 165 usa tecnología TTL (lógica transistor-transistor), esto quiere decir que las normas usadas para este tipo de tecnologías son diferentes al estándar RS-232, es decir llevar los niveles lógicos a los que son usados en el puerto serie. Por eso haremos uso de un último circuito integrado, el más importante, el MAX 232 (figura 12), conectado como se muestra en la figura 13. Observe que hay pines sin usar, en realidad de setos sólo necesitaremos el pin 13 y el 14 para conectarlos al puerto serie de la computadora, y no olvidemos conectar el pin 16 a Vcc y el 15 a tierra. Los capacitores C4 a C6 son de 1µF y son utiliza-

dos para alcanzar los voltajes necesarios para trabajar con la norma RS-232. Los datos que saldrán de la compuerta AND entrarán al MAX 232 por el pin 11 o el pin 10, nosotros usamos el pin 11, el pin 9 y 12 son salidas de datos a circuitos TTL o CMOS (Lógica Metal-Oxido-Semiconductor con transistores complementarios), éstas no las usaremos, pues recordemos que sólo enviaremos datos, no los recibiremos. En la figura 14 se muestra un conector DB-9 con las conexiones correspondientes que debemos hacerle al extremo que irá conectado al MAX 232, el otro lado lo conectaremos al puerto serie. Vemos que la terminal 1, 6 y 4 están conectadas entre sí; así como la terminal 8 y 7, esto es para simular que hay un módem conectado y tener lista la terminal que recibirá los datos. La terminal 2 va al pin 14 del MAX 232 y la terminal 3 al pin 13. Recordemos que el protocolo RS-232 indica que la terminal 2 del DB-9 se utiliza para recibir datos; y aunque no enviaremos datos conectemos también la terminal 3, que es la encargada de hacerlo, solo para familiarizarse con la conexión de las terminales. Por último veamos que la terminal 5 va a tierra. Lo único que falta es enviar un dato a la computadora; aunque nosotros le proporcionaremos en un futuro un pequeño programa para poder visualizar los datos que envíen a su computadora. Sería bueno que, mientras tanto, usaran la hyperterminal que hay en windows o usar el programa puertocom.exe, el cual puede bajar gratuitamente en nuestra página web:

Figura 13

Figura 14

www.webelectronica.com.ar Debe digitar la clave puerto. Sería recomendable añadir que primero se arme todo el circuito y al final se coloque el circuito integrado MAX-232 para evitar dañarlo, y si por ejemplo el circuito es armado en un protoboard se recomienda colocar un capacitor cerámico de 10pF para eliminar señales “parásitas” que afecten a la señal del 555. En la figura 15 se muestra la interpretación de los circuitos integrados de las compuertas lógicas.

Figura 15

**************

29

Interruptor a Través del Puerto Serie Proponemos el diseño de un pequeño interruptor para conectar y desconectar una computadora o servidor a través de su puerto serie. Se puede emplear para apagar la máquina cuando sea necesario. Son muchas las aplicaciones que pueden encontrarse en Internet sobre aplicaciones del puerto serie de una computadora. Si bien hemos dado algunas definiciones sobre el manejo del puerto, creemos necesario dar un montaje de un circuito sencillo que hemos adaptado del “Botón de apagado con led de control a través de un puerto serie” publicado en la página: http://www.linuxfocus.org/Castellano/January2001/article186.shtml. Tal como dice el autor del proyecto original, normalmente, un servidor no necesita teclado, monitor o ratón. Necesita un buen sistema operativo, como Windows Server o Linux y una tarjeta de red. Los periféricos externos, como el mouse, no se precisan. Con Linux corriendo en la máquina, la administración remota es la mejor y más conveniente solución. Cuando compre un equipo conviene verificar siempre que en el BIOS exista la opción para que compruebe la existencia de teclado al iniciar el arranque. Una PC sin teclado ni monitor es la máquina perfecta para un servidor web, una puerta de enlace de ADSL, un sistema de seguridad, etc. No es necesario que sea una máquina especialmente potente. Un viejo

Tabla 12

30

Pentium II de 133 MHz con suficiente RAM puede fácilmente servir a cientos de aplicaciones. Es conveniente no tener un teclado conectado, porque el servidor es sólo un pequeño gabinete que cabe en cualquier parte y en ese caso sería conveniente de un interruptor para apagar apropiadamente la máquina, sin necesidad de tener que autentificar y ejecutar el comando de apagado. Como no se puede desconectar el equipo directamente de la corriente eléctrica porque podrían perderse datos, el interruptor que proponemos es una buena alternativa. Construiremos un pequeño aparato con 2 LEDs y un pulsador. Un LED de color verde indicará cuándo el pulsador estará activado y un LED amarillo de parpadeo lento indicará que el servidor está funcionando o que aún se encuentra en proceso de apagado. Para apagar el servidor será necesario presionar el botón durante 3 segundos. Cuando presiones el botón, la luz verde se apagará, indicando que el apagado se encuentra en progreso. Se estará ejecutando el comando "/sbin/shutdown -t2 -h now". El LED amarillo continúa parpadeando mientras el servidor se está apagando. Cuando el LED amarillo deje de parpadear, se debería esperar 10 segundos antes de desconectar la máquina. El LED se apagará cuando todos los procesos estén cerrados y los discos estén desmontados. Si el servidor soporta el apagado automático, entonces uno no se debe preocupar por los 10 segundos. Únicamente espera a que las luces se desconeten por sí solas. Las interfaces seriees disponen de un número de pines que puedes controlar mediante llamadas al sistema ioctl. Por lo tanto no es necesario modificar nada para controlar un LED conectado a un puerto serie o para leer el estado de un interruptor. El puerto serie tiene suficiente energía para controlar los 2 LEDs de bajo consumo. Utilizaremos los pines RTS y DTR para conectar los LEDS y la línea de detección de carrera será empleada para leer

el estado del botón. En la tabla 12 se brinda un detalle de las funciones de cada pin del conector DB9 del puerto serie o serie. En la figura 16 se muestra el circuito eléctrico del interruptor. El programa es un pequeño “engendro “propuesto por Guido Socher. El programa es un pequeño “engendro” que puede ser descargado de nuestra web, con la clave “inteser” que lo llevará a la página del autor. Utiliza las funciones ioctl (fd, TIOCMSET,...) y ioctl (fd, TIOCMGET, ...) para leer y escribir en el puerto serie. En el sitio se incluye un creador de archivos e instrucciones están incluídas. Para construir este interruptor de apagado automático con LEDS son necesarias las siguientes partes. * 1 LED verde de bajo consumo (Un LED normal funcionaría pero sería demasiado brillante) * 1 LED amarillo de bajo consumo * 2 resistencias de 1kΩ * 1 resistencia 6.8K Ohm * 1 pulsador normal cerrado (marcado con la leyenda interruptor en el circuito) * 1 conector serie hembra RS232 (conector DB9)

Figura 16

con cable * 1 capacitor de 10nF El montaje no reviste grandes problemas y antes de probarlo deberá descargar el programa que gestiona su uso e instalarlo en la máquina donde será usado. ***************

Puerto USB Introducción Diseñado para reemplazar a los dos puertos tradicionales, serie y paralelo, el puerto USB (Universal serie Bus) se creó pensando en la eliminación de los problemas de cableado, espacio y confusión de conectores. El diseño permite a un sólo puerto manejar hasta 127 dispositivos conectados en él, en adición se construyó el llamado soporte Plug-and-Play (P&P) con lo que cada conexión podría ser configurada de manera automática, incluso conectando el dispositivo en caliente (cuando el equipo está prendido y reconocido de inmediato sin tener que reiniciar la computadora). El diseño incluye una función opcional

de alimentación del dispositivo desde la computadora, a través del cable de conexión. El diseño USB divide el hardware en dos clases, hubs y funciones. Un hub USB provee conectores en los cuales se pueden conectar funciones. Una función USB es un dispositivo que se puede conectar a la computadora y hace algo (escáner, impresora, webcam, teclado, mouse, etc.). Más que un puerto punto a punto el USB es un bus que permite la conexión de múltiples periféricos a un solo conector, los cuales comparten el mismo canal de señales. La información es transmitida por el bus en forma de paquetes, los cuales son recibidos por cada función conecta-

31

da al puerto. Para que una función acepte el paquete que le corresponde, se utiliza un esquema de direccionamiento. Comúnmente una computadora comercial cuenta con dos puertos USB, cada uno de ellos es capaz de manejar hasta 127 funciones, limitado solamente por el número de direcciones. Para conectar varios dispositivos a un solo puerto se utiliza un hub, el cual ofrece múltiples conectores para conectar una función en cada uno de ellos o incluso otro hub. Esto crea un sistema jerárquico o de árbol, como se muestra en la figura. Esta jerarquía de conexiones for-

32

ma una topología de estrella, la cual permite monitorear la energía de los dispositivos conectados e incluso apagar alguno si existe una condición de sobrecorriente sin afectar a los demás dispositivos conectados. USB soporta la tecnología Plug-&-Play con carga y descarga dinámica de controladores. Al momento en que se conecta cualquier dispositivo (función) al bus, el host (computadora) lo detectará, interrogará y cargará los controladores necesarios, en este caso no hay que preocuparse de IRQ's, dirección de puertos o reiniciar el equipo. De la misma forma, cualquier dispositivo puede ser desconectado en cualquier instante, el host detectará su ausencia y no lo considerará más. La detección automática del controlador adecuado es llevado a cabo usando una combinación de PID/VID (Identificador de Producto / Identificador de Vendedor). El VID es proveído por el foro de implementaciones USB. Otra organización provee un extra VID para actividades no lucrativas. Como parte del proceso P&P, el controlador USB busca los dispositivos conectados al puerto cada vez que la computadora es encendida, interrogando a cada dispositivo para identificar qué es y asignándole una dirección de puerto, la cual formará parte de la dirección de cada paquete enviado. Otro de los beneficios del USB es la alimentación de energía a los dispositivos a través del cable de conexión, lo cual permite evitar, en algunos casos, la existencia de un cable que va del dispositivo a la corriente eléctrica; sin embargo, para esto hay que tomar en cuenta ciertas condiciones. La versión 1.1 soporta dos velocidades, velocidad baja (low-speed) de 1.5 Mbits/s y velocidad completa (fullspeed) de 12 Mbits/s. La versión 2.0 considera una tercera velocidad, velocidad alta (high-speed) de 480 Mbits/s la cual fue desarrollada para competir con el puerto FireWire. En una conexión las tres velocidades existentes son so-

cundarias de energía, ejemplo de estas funciones pueden ser unidades de CD-ROM externas. Una de las limitaciones de este puerto podría ser la longitud de los cables, la cual permite una longitud máxima de 5 metros, lo cual podría resolverse utilizando hubs en forma de cascada, ya que éstos regeneran las señales recibidas. Gracias a esta posibilidad, los límites en la distancia se hacen de 126 hubs más 1 función por 5 metros, cada uno, resultando una distancia total de 635 metros.

Electrónica

portadas a la vez. En la tabla se muestra una comparación entre las velocidades del puerto USB y las de los puerto serie y paralelo. Con respecto a la alimentación de energía a través del cable, existen tres clases de funciones USB: · Funciones con poca energía alimentadas por bus · Funciones con alta energía alimentadas por bus · Funciones auto alimentadas Las primeras, obtienen toda su energía del cable (VBus) y no pueden obtener más de una carga, definida como 100mA. Estas funciones están diseñadas para trabajar con un voltaje mínimo de 4.4V y máximo de 5.25V, ejemplo de estas funciones son algunas cámaras digitales pequeñas. Las segundas, igualmente toman toda su energía del VBus y no pueden tomar más de una carga hasta que se hayan configurado, entonces pueden tomar un máximo de 5 cargas (500mA); estas unidades deben poder ser detectadas con voltajes mínimos de 4.4V y cuando operan con cargas máximas, se especifica que trabajen con voltaje mínimo de 4.75V y máximo de 5.25V. Los límites de voltaje son considerados en el conector de la función. Las funciones auto alimentadas, pueden tomar sólo una carga del VBus y obtener el resto de su energía de una fuente externa. En este caso la única carga obtenida del host es suficiente para que el dispositivo sea detectado y enumerado sin fuentes se-

En lo que respecta a la electrónica, cada puerto en la computadora cuenta como un host. El circuito de cada puerto controla de manera integral el sistema USB, el cual es llamado controlador de bus. Cada sistema USB tiene uno y sólo uno de estos controladores de bus. La transmisión en el esquema USB se hace en forma diferencial, utilizando un par de cables. La transmisión es hecha utilizando un protocolo NRZI (No retorno a 0 invertido) e inserción de bits (bit stuffed) para asegurar una adecuada transmisión. En dispositivos de velocidad baja (low-speed) y completa (full-speed), un diferencial de '1' es transmitido colocando un voltaje mayor a 2.8V en la línea D+ y un voltaje menor a 0.3V en la línea D- ambos con un resistor entre 14.75 K a 28.80K colocado a tierra. Mientras tanto, un diferencial de '0' se logra colocando un vol-

33

actividad del bus se detendrá. Para mantenerse conectado a un hub o host suspendido, cualquier dispositivo debe tener la energía necesaria para mantener activo su resistor de identificación de velocidad durante el estado de suspensión. El USB envía paquetes del tipo SOF o envíos periódicos para evitar que un estado de ocio caiga en un estado de suspensión.

Normas y Estándares

taje mayor a 2.8V en la línea D- y un voltaje menor de 0.3V en la línea D+ con los mismos resistores (ver tabla). El receptor define un diferencial de '1' como D+ 200mV mayor que D- y un diferencial de '0 ' como D+ 200mV menor que D-. La polaridad de las señales es invertida dependiendo de la velocidad del bus. Es por eso que los términos de estado 'J' y 'K' son usados para dar un significado a los niveles lógicos. En velocidad baja, un estado 'J' es un diferencial de '0'. En velocidad alta (high-speed), un estado 'J' es diferencial de '1'. Del lado de las funciones, existe un resistor llamado pull-up (ver diagrama) el cual permite identificar la velocidad para la que están diseñadas. Este resistor tiene un valor nominal de 1.5 K y está conectado a un voltaje de 3.3V a 3.6V desde la línea D+ en el caso de dispositivos full-speed y desde la línea D- para los dispositivos low-speed (ver diagrama). En el caso de dispositivos que trabajan con high-speed, se utiliza el diseño full-speed, pues es con esta velocidad que se conecta y una vez lograda la identificación, el dispositivo trabajará a velocidad alta (high-speed). Un dispositivo USB estará suspendido, cuando no haya actividad en el bus, por un periódo mayor a 3ms. Entonces el dispositivo tendrá otros 7ms para suspenderse y no utilizar más que la designada corriente de suspensión (500A) del bus, 10ms después la

34

El diseño del USB es el resultado del interés de Compaq, Digital, IBM, Intel, Microsoft, NEC y Northern Telecom, de contar con una mejor interfaz que las existentes. Así en 1995 comenzaron su trabajo, un año después, la interfaz ya estaba a la venta. A pesar de que el puerto no había tenido gran popularidad, el trabajo sobre el diseño siguió creciendo, surgiendo en 1999 el estándar USB 2.0. Desde el principio de la historia de este puerto se ha logrado una mejora de 12 mbits/s (velocidad inicial) a 240 mbits/s (velocidad en 2002). El sistema definido en versiones recientes es siempre compatible hacia atrás, además, los dispositivos siempre negocian trabajar a la mayor velocidad posible para ellos. Los conectores han permanecido sin cambios desde el inicio.

Cables y Conectores En un principio, el diseño del USB consideraba cuatro tipos de conectores, dos para el chasis de la computadora o dispositivo y dos para el cable. A cada par se le cono-

ce como conector A o conector B. El conector ubicado en un hub o computadora, es del tipo A; mientras que los dispositivos cuentan con un conector tipo B, los conectores son totalmente distintos y fueron diseñados así para que no existiera confusión al momento de conectarlos. Posteriormente surgió un nuevo tipo de conector, el conector “Mini B”, el cual cuenta con similares características que el conector B pero es más pequeño (ver figura). En este nuevo diseño de conector se agregó un pin, el cual sirve de identificación aunque no está conectado al otro extremo del cable (en el conector A). Debido a que el conector del dispositivo es completamente diferente al conector del hub o la computadora, existe un solo tipo de cable, con un tipo de conector a cada extremo del mismo. No existen cables cruzados ni adaptadores en el esquema USB. Físicamente el cable USB cuenta con 4 cables. Dos conducen datos y los otros dos sirven para proveer una corriente directa de 5V con retorno a tierra hacia el dispositivo. Los dos cables de datos son un par trenzado, mientras que los dos restantes pueden o no estar trenzados. Los datos que son transmitidos se transmiten bajo un

esquema de señal digital diferencial, esto es, el voltaje en ambos cables es el mismo pero su polaridad es inversa, así al hacer la diferencia cancela el ruido existente. Debido a las características de una transmisión USB, es necesario considerar ciertos parámetros para que las señales no se vean afectadas. Los cables deben contar con ciertas características físicas que deben ser controladas cuidadosamente. Debido a que transporta energía hacia el dispositivo, se deben cuidar la resistencia de los alambres, su calibre y longitud. La resistencia es proporcional al calibre del alambre, por lo cual mientras más largo sea el cable, menor debe ser el calibre de los alambres. En el caso de la longitud máxima especificada, 5 metros, se requieren alambres de calibre 20 AWG. Los alambres (cables) dentro de un cable USB cuentan con un código de colores que especifica de manera sencilla su uso y posición en el conector (ver tabla). Los alambres para señales de datos son de color verde y blanco, mientras que los alambres para energía son rojo para el positivo y negro para la tierra. Normalmente no se pueden conectar dos computadoras utilizando un cable USB, debido a que ambos puertos tratarán de controlar la transmisión ocasionando con-

35

Tabla 1

flictos en la transmisión. Esto se evita gracias al diseño del cable, pero en ocasiones podría encontrarse un cable con conectores del tipo A en ambos extremos, esto está prohibido pero existe una excepción, el llamado LapLink o cable púrpura el cual cuenta con un circuito a mitad del cable, el cual se encarga de permitir el control de la conexión a un solo equipo en los extremos, pero para realizar esto se requiere de software adicional.

Protocolos y Tiempos Para asegurar la transmisión correcta de información el esquema USB utiliza el protocolo de señalización NRZI (no retorno a cero invertido) e inserción de bits (bit stuffed), lo cual insertará un 0 lógico después de una serie de seis 1's lógicos. Los bits en el bus de comunicaciones son movidos e interpretados en un orden little-endian, es decir, primero se envía el bit menos significativo y al último el más significativo. Durante la comunicación entre el host y cualquier función, se establecen lazos entre éstos, así mismo en

36

cada función pueden existir varias entradas o destinos para los datos de un lazo, éstos son llamados puntos finales (endpoint). Un endpoint es una porción identificable de manera única en una función. Cada dispositivo está compuesto por una serie de endpoints independientes. Así como cada dispositivo tiene una dirección única asignada por el sistema en el momento en que se conecta, cada endpoint tiene dirección, determinada por el dispositivo en el momento mismo de su diseño, para el flujo de datos. Cada endpoint formará una conexión que soportará el flujo de datos hacia cualquier dirección. Todo dispositivo USB requiere la implementación de un endpoint cero, el cual es utilizado para iniciar el dispositivo. En el esquema de comunicación, gracias a la identificación de endpoints, existen los llamados tubos (pipe) que son una asociación entre un endpoint en un dispositivo y el software en el host. Un pipe representa la capacidad de mover datos entre el host, por medio de un buffer de memoria, y un endpoint en un dispositivo. Existen dos modos de comunicación mutuamente exclusivos: de flujo (stream), sin una estructura definida, y por mensaje (message), con una estructura definida. El esquema USB define un frame como una base de 1ms en un bus full-speed o low-speed y un microframe como una base de 25s en high-speed. En un (micro) frame pueden llevarse a cabo varias transacciones. Cada tipo de transferencia define que transacciones son permitidas en un (micro)frame para un endpoint. El esquema USB cuenta con diferentes tipos de transferencia de los cuales se selecciona el que mejor se adapte a los requerimientos de comunicación entre el software del host y el dispositivo involucrado. El esquema USB utiliza un protocolo basado en paquetes. Todo el intercambio de mensajes requiere de tres paquetes, comenzando por un paquete token, el cual contiene la dirección de la función buscada y la naturaleza del intercambio. Un paquete de datos (data) contiene la información. El intercambio de información termina con un paquete handshake, el cual confirmará el arribo correcto de la información. Existe un cuarto tipo de paquete, llamado especial, el cual se encarga de manejar funciones adicionales. Todo los paquetes comienzan con los mismos dos componentes, un campo de sincronización (sync) y uno de identificación (PID), ambos de un byte de longitud.

El byte PID incluye cuatro bits que identifican el tipo de paquete que se envía y otros cuatro que confirman los primeros, complementándolos. Los dos bits más significativos especifican uno de los cuatro tipos de paquetes y los dos menos significativos subdividen la categoría del paquete. Esto permite que existan hasta 16 diferentes definiciones de paquetes (ver tabla 1).

Paquete Token Solamente el host es quien envía paquetes token, cada token está compuesto de cinco campos formando un total de 4 bytes como se muestra en la figura 1. En el caso de tokens de tipo IN, SETUP y OUT, los siete bits que siguen al PID representan un campo de dirección (address) la cual identifica al dispositivo o función al cual se dirige la comunicación, la dirección cero está reservada. Cuatro bits adicionales llevan el número del endpoint de la función. Todos los paquetes token cuentan con cinco bits que sirven para el manejo de errores Figura 1 y que utilizan el método de redundancia cíclica (cyclic redundance check, CRC). Esto permite verificar la integridad de los campos address y endpoint. El token especial PING tiene la misma estructura que los paquetes anteriores definiendo una transacción handshake de la función al host, en este caso el campo PID identifica que endpoint envía el handshake. Para el tipo de tokens que definen el inicio de un paquete (SOF) y que son enviados cada 1ms, el campo PID es seguido de un campo de 11 bits el cual indica el número del frame como se ilustra en la figura 2. Los tokens SOF son recibidos por todos los dispositivos conectados, incluso hubs y no causan ninguna reacFigura 5 ción de respuesta o acuse por lo que la entrega a cada uno de los dispositivos conectados no es garantizada. En el caso de dispositivos de velocidad baja o

completa (full/low-speed) los paquetes SOF son recibidos cada frame (ver figura 3) mientras que dispositivos de alta velocidad (high-speed) identifican estos paquetes cada 8 microframes (ver figura 4).

Paquete de Datos La información como tal es enviada a través de estos paquetes. Al igual que todos los paquetes en el esquema USB comienzan con los campos sync y PID. Enseguida va una secuencia de bits que representa información y que puede tener una longitud de 0 hasta 1024 bytes. Para dispositivos low-speed el número máximo de bytes de datos es 8, para los full-speed es de 1023 y para los high-speed la carga máxima es de 1024bytes, siempre utilizando un número entero de bytes. Enseguida de los datos se utilizan dos bytes de CRC para verificar solamente el dato (ver figura 5). En este tipo de paquetes el PID puede ser de cuatro tipos:

Figura 2

Figura 3

Figura 4

37

Data0, Data1, Data2 y MData. Dato0 y Data1 sirven como sistema de verificación de errores entre el emisor y el receptor. El emisor cambia entre Data0 y Data1 para indicar que ha recibido un acuse válido del receptor del paquete data precedente. Los otros dos tipos de PID son usados de manera similar, en el caso de secuencias de igual duración de alta velocidad se utilizan los cuatro tipos y en transacciones split se utilizan los tipos Mdata, Dato0 y Data1. Figura 6

Paquete Handshake Estos paquetes son de dos bytes de longitud, y sólo contienen el campo sync y PID (ver figura 6). Estos paquetes son generados para reportar el estado de una transacción y pueden regresar valores indicando una recepción exitosa, comandos de aceptación o rechazo, flujo de control y condiciones de parada. Existen cuatro tipos de paquetes handshake y uno especial: Figura 7

Figura 8

Figura 9

38

· ACK.- Indica que el paquete de datos fue recibido sin errores de CRC o inserción de bits. Un ACK es aplicable sólo en transacciones donde son transmitidos datos y donde un acuse de recibo es esperado. Un ACK puede ser regresado por el host en transacciones IN y por una función en transacciones OUT, SETUP o PING. · NAK.- Indica que la función fue incapaz de aceptar el dato del host (IN) o que la función no tiene datos para transmitirle (OUT). NAK sólo puede ser transmitida por las funciones en la fase de datos de una transacción IN o en la fase de acuse de transacciones OUT o PING. El host nunca puede generar un NAK. Un NAK es usado en el control de flujo para indicar que una función está temporalmente no disponible para transmitir o recibir datos, sin la intervención del host. · STALL.- Es regresado por una función en respuesta a un token IN o después de la fase de datos en una transacción OUT o en respuesta de una transacción PING. Este tipo de handshake indica que la función no es capaz de transmitir o recibir datos, o que una petición de pipe no es soportada. El estado de la función después de una STALL no está definido. · NYET.- Este es un paquete de sólo high-speed y es enviado en dos circunstancias. Es regresado por un endpoint high-speed como parte del protocolo PING. También puede ser enviado por un hub en respuesta a una transacción SPLIT cuando una transacción full/lowspeed no haya sido completada aún o cuando el hub sea incapaz de manejar la transacción. · ERR.- es un paquete sólo de high-speed que es regresado para permitir a un hub high-speed reportar un error en un bus full/low-speed. Este tipo de paquete sólo es regresado por un hub high-speed como parte del protocolo de una transacción SPLIT. La funciones en recepción y transmisión deben regresar un

handshake, basado en un orden de precedencia detallado en las tablas mostradas en las figuras 7, 8 y 9. No todos los handshake son permitidos, esto depende del tipo de transacción y de si ésta es generado por la función o por el host. Respuesta de una función a una transacción IN, Respuesta del host a una transacción IN, Respuesta de una función a una transacción OUT, Respuesta de una función a una transacción SETUP. El SETUP define un tipo especial de transacción de datos del host a la función, que permite al host inicializar la sincronización de un endpoint acorde a la del host. Una vez aceptado un token SETUP, una función nunca responderá sino que deberá aceptar los datos que le siguen.

Tipos de Transferencia Las especificaciones USB definen cuatro tipos de endpoints o transferencias, el uso de cualquiera de ellos es elección y responsabilidad del software. Cada tipo de transferencia determina características del flujo de comunicación incluyendo formato de los datos, dirección de la comunicación, acceso al bus, latencia (tiempo de espera), secuencias de datos requeridas y manejo de errores. Los cuatro tipos de transferencia son: · Control de Transferencia (Control). Esta es típicamente utilizada para operaciones de comando y estado. Son esenciales en la enumeración de las funciones. La longitud de los paquetes de datos es de 8 bytes en low-speed, 8, 16, 32 o 64 en full-speed y de 64 en high-speed. La transferencia de control tiene un mínimo de dos etapas: SETUP y STATUS (figura 10). Una transferencia puede contener, opcionalmente, una etapa DATA entre las dos primeras. Durante la etapa SETUP la transacción es usada para transmitir información para el control del endpoint de la función. La transacción SETUP es similar en formato a una transacción OUT pero con un diferente PID. La función que recibe un SETUP debe respon-

der con un ACK, Figura 10 si el dato es corrompido lo descarta y no genera handshake. La etapa DATA, si existe, consta de una o más transferencias IN o OUT y sigue el mismo protocolo que la transmisión bulk. Todas las transacciones en esta etapa deben ser hacia el mismo sentido, la cantidad de datos a enviar y su dirección son especificadas en la etapa SETUP. La etapa STATUS del control de transferencia es la última en la secuencia. Esta sigue el mismo protocolo que la transmisión bulk. La etapa STATUS operando en dispositivos de alta velocidad también incluyen el protocolo PING.

Formato de Transacción de Control · Interrumpir transferencia (Interrupt). Este tipo de transferencia garantiza latencia, utiliza pipe

Figura 11

39

de tipo stream unidireccionales y usa detección de errores con reintento en el siguiente período (Figura 11). La máxima carga de datos en dispositivos low-speed es de 8 bytes, en full-speed de 64 y de 1024 en high-speed. Formato de transferencia de interrupción.

cendentes (figura 12). La máxima carga de datos en esta transferencia es de 1023 bytes para dispositivos fullspeed y de más de 1024 bytes para high-speed. En dispositivos low-speed no se puede utilizar este tipo de transferencia. Formato de transferencia Isocrona.

· Transferencia isócrona (Isochronous). Esta transferencia ocurre continua y periódicamente. Típicamente contienen información sensible al tiempo, como audio y video. Si existe un retraso o pérdida en datos, se puede esperar una pequeña variación en el resultado final. En esta forma de transferencia no existe sincronía alguna, de cualquier forma la falta de datos o los errores existentes deben ser casi imperceptibles e intras-

• Transferencia en masa (Bulk). Esta puede ser usada para largas cantidades de datos. Esta transferencia posee una corrección de errores por medio de un campo CRC de 16 bits para la carga de datos y cuenta con un mecanismo de detección y retransmisión que asegura que los datos son transmitidos y recibidos sin error. Este tipo de trasferencia es soportado sólo por dispositivos full-speed y high-speed. Para endpoints full-speed, la carga de datos en un solo paquete es de 8, 16, 32 o 64 bytes. Para endpoints high-speed la carga de datos en un paquete es de más de 512 bytes. Si la carga es menor a estas capacidades no hay que rellenarlo con ceros, la transferencia se considera completa cuando se ha transferido la cantidad exacta de datos solicitados. La transferencia bulk utiliza una transacción de tres fases consistente de token, data y handshake (figura 13). Bajo cierto control de flujo y condiciones de parada, la fase de datos (data) puede ser reemplazada por un handshake convirtiéndose en una transacción de dos fases sin datos transmitidos. Los paquetes PING y NYET deben ser usados sólo para dispositivos de alta velocidad. Formato de transacción bulk. ***************

Figura 12

Figura 13

40

Puerto Infrarrojo Arquitectura El puerto infrarrojo, llamado usualmente IrDA (Infrared Developers Association, debido al grupo de desarrollo que lo creó), tiene dos usos que se pueden diferenciar. En el primero, un equipo recibe comandos desde algún dispositivo (teclado, ratón, joystick) y el otro se usa para transmitir datos de un equipo a otro. El IrDA se basa en un esquema de transmisión inalámbrico, por medio Figura 1 - Esquema de dispositivos a conectar con IrDA. de un haz de luz infrarroja la cual es invisible al colo de acceso al enlace (LAP) para después negociar ojo humano. Esta luz se encuentra en un rango de lony modificar la velocidad de la transmisión. gitud de onda de 700 a 1,000 Angströms (1 Angström [Å] = 1-10 m) mientras que la luz visible está en un rango de 400 a 700 Å. Las especificaciones del IrNormas y Estándares DA dictan que las señales utilizadas para un puerto de este tipo deben estar en el rango de 850 a 900 Å. En 1993 se estableció la Asociación de DesarroEl puerto IrDA es capaz de trabajar a varias velollos Infrarrojos (IrDA) para crear y dar soporte a norcidades desde 2400bps hasta 4mbps, pero todos esmas de hardware y software creadas para comunicatán obligados a trabajar a una velocidad básica de ciones vía luz infrarroja. El objetivo de la asociación 9600 bps. Todas estas velocidades utilizan el esquees crear normas de interconexión serie de datos de bama de modulación RZI (Retorno a Cero Invertido). Sin jo costo y alto poder que soporte un modelo punto a importar el rango de velocidades que implementa un punto adaptable a un amplio rango de aplicaciones y sistema, primero se establece una comunicación de endispositivos. lace a una velocidad de 9600bps utilizando el proto-

Figura 2 - Transmisión inalámbrica.

Figura 3 - Adaptador USB - IrDA 3.

41

Figura 4 - Adaptador USB - IrDA 2. Figura 8 - Lector IrDA interno.

Figura 5 - Adaptador USB externo.

En junio de 1994 la asociación aprobó su primer norma. Las especificaciones originales, conocidas ahora como IrDA v1.0, esencialmente le dan a la norma RS-232 una contraparte óptica con la misma estructura de datos y límites de velocidad. En agosto de 1995, se tomó el segundo paso y aprovechando extensiones de alta velocidad se logró una comunicación inalámbrica que alcanzó una taza de 4Mbps. En las figuras 6 y 7 vemos los respectivos logos de estas normas.

Figura 6 Logotipo Ir.

Figura 7 Certificado Ir.

42

Figura 9 - PDA inalámbrico.

Figura 10 - Mouse infrarrojo.

Protocolo de Control La tecnología de control IrDA es una arquitectura de control y comando para comunicaciones infrarrojas, que permite a periféricos inalámbricos interactuar con diferentes tipos de host, como lo vemos en las figuras 9, 10 y 11. Esta tecnología fué diseñada bajo el nombre de IrBus y está definida en tres protocolos, uno para cada una de las capas lógicas usadas y éstas son: • Capa Física • Capa de Acceso al Medio (MAC) • Capa de Control de Enlace Lógico (LLC)

Capa física Esta capa define las características físicas y esquema de modulación de las señales infrarrojas. El diagrama de bloques de la implementación de hardware para los sistemas de control IrDA se muestra en la figura 12. Las señales en la etapa 1 son un flujo de bits los cuales se convierten en señales eléctricas moduladas en la etapa 2 y por último se transforman

Figura 11 - Impresora IrDA.

en señales ópticas en la etapa 3. El sistema de control del IrDA opera con una velocidad de transmisión de 75 kbps. Los datos transmitidos son codificados con un esquema de Modulación de Secuencia de 16 Pulsos (16 PSM). el cual es capaz de reducir la interferencia entre un sistema IrDA y un sistema de control remoto. Los datos codificados son colocados sobre una portadora de 1.5MHz para poder ser transmitidos. En el esquema 16 PSM un tiempo definido como “tiempo símbolo” (Dt) es dividido en 8 segmentos del mismo tamaño los cuales definen un “chip” de los cuales se utilizan sólo dos o cuatro de estos para colocar pulsos. La información es transmitida de acuerdo al

Figura 12 - Interfaz infrarroja.

43

muestran en la tabla 1. En el caso mencionado de que la velocidad de transmisión es de 75kbps, el tiempo símbolo Dt y el tiempo chip Ct son obtenidos mediante las siguientes fórmulas: Dt = 4 / 75000 Dt = 53.33 s Ct = Dt / 8 Ct = 6.67 s

Tabla 1 - Conjunto de bits (DBS) asociado con su símbolo. patrón de pulsos especificado. Utilizando este esquema, cuatro bits de información pueden ser transmitidos dentro de un solo tiempo símbolo. Cada conjunto único de cuatro bits corresponde a uno de los 16 valores de símbolos y es definido como un Conjunto de Bits de Datos (DBS). Los DBS’s asociados con los símbolos se

Figura 13 - Formato del paquete IrDA de control.

44

El formato del paquete utilizado durante la etapa de la capa física puede ser de dos tipos: paquetes cortos y paquetes largos, cada paquete contiene seis campos (figura 13): Control de ganancia automática (AGC), preámbulo (PRE), Bandera de inicio (STA: STS o STL), frame MAC, CRC (8 o 16) y Bandera de parada (STO); y son similares a excepción de la carga de datos que pueden llevar. La secuencia de pulsos para cada campo del paquete se muestra en la tabla 2. Los bits son transmitidos comenzando con el bit más significativo, pasando de izquierda a derecha.

Secuencia de Pulsos Para los paquetes cortos, se usa una bandera de inicio STS y un campo CRC8. Para paquetes largos se usa una bandera de inicio STL y un campo CRC16. El campo AGC es usado para controlar la ganancia del receptor infrarrojo. El campo PRE es usado para lograr una sincronización de chips, es decir, sincronizar los relojes. El campo STA es usado para la sincronización de símbolos y para indicar si el paquete es corto o largo. El campo STO se usa para indicar el final del paquete.

El proceso de creación de un paquete de transmisión de datos se ejemplifica a continuación: suponga que se desea transmitir el dato 0x1B. cada byte [D7D0] original en los datos que se incluye en el frame MAC o el campo CRC, es dividido en dos DBS, [D7D4] y [D3-D0]. Los DBS´s son codificados entonces con el esquema 16PSM.

Después de haberse codificado, los bytes se transmitirán enviando primero el DBS menos significativo y enseguida el DBS más significativo.

Los campos AGC, PRE y STA son adheridos al encabezado del conjunto de bits resultante de la codificación 16PSM, y el campo STO se agrega al final de esto.

Para diferenciar la transmisión de un “1” lógico y un “0” lógico, el transmisor infrarrojo enviará una señal equivalente a la portadora para representar un “1” lógico y no enviará señal alguna para representar un “0” lógico.

Capa MAC de Control al Medio (MAC) El sistema de control IrDA consiste de host y periféricos entre los cuales se lleva a cabo una comunicación, para lo cual cada uno de los dispositivos o sistemas que participan en ésta, debe tener algo que lo identifique ante los demás. Para esto, un host cuenta con una dirección de 8 bits (HADD) y un identificador de 16 bits (HostID) que lo identifican. La dirección del host puede ser definida por el fabricante o determinada du-

Tabla 2 - Secuencia de pulsos por paquete. rante el arranque del sistema. Un periférico es identificado por un identificador físico de 32 bits (PFID). El host y periféricos intercambian información de identificadores y direcciones (HADD/HostID y PFID) como parte de un proceso llamado enumeración. Una dirección lógica de 4 bits es asignada por el host a cada periférico (PADD) para identificarlo de manera única durante una comunicación activa. Esto es parte de un proceso llamado vinculación (biniding) el cual es ejecutado cuando un periférico enumerado intenta establecer comunicación con el host. Los números de identificación (HostID y PFID) son utilizados únicamente durante la etapa inicial de una comunicación para identificación entre dispositivos, una vez hecho esto sólo se utilizarán las direcciones (HADD y PADD). La capa de control de acceso al medio (MAC) utiliza frames para el manejo de datos, existen dos tipos de frames según la cantidad máxima de datos que puede contener. Existen frames cortos que soportan una carga de datos de hasta 9 bytes y frames largos que pueden llevar una carga de datos de hasta 97 bytes. El tipo de frame MAC influye directamente sobre el tipo de bandera de inicio (STA: STS o STL) del paquete usado en la capa física. Cualquier host y perifé-

Tabla 3 - Uso de frames cortos y largos.

45

rico puede trabajar utilizando frames cortos. El uso de Figura 14 - Estructura paquetes del frame MAC. cortos y largos está restringido según el modo de operación de host y la etapa de la comunicación. El uso de frames largos y cortos por parte del host y periféricos se resume en la tabla 3. El frame MAC está compuesto por los campos de dirección de host (HA), dirección de periférico (PA), control MAC (MAC_Cnrl) y la carga de datos MAC. Quedando estructurado como se muestra en la figura 14. En el caso de la dirección del host, la dirección “0x0” es una dirección especial, todo host debe ser capaz de recibir un frame con esta dirección para entrar en un estado de alerta y comenzar el procedimiento de enumeración. Los cuatro bits de la dirección del periférico representan la dirección asignada por el host durante el proceso de vinculación, esta dirección no es permanente y puede cambiar durante cada proceso de vinculación. Esta es necesaria para establecer una comunicación activa con el periférico. El host debe ser capaz de mantener un mapeo entre la dirección del peri-

Tabla 4 - Contenido de los bits de control.

46

férico y su identificador físico de 32 bits. las direcciones “0x0” y “0xF” están reservadas para los procesos de vinculación y enumeración respectivamente. El contenido de los bits de control MAC varía según la dirección del frame. El significado de cada bit es resumido en la tabla 4. Un host puede encontrarse en uno de tres diferentes modos. Primero, el modo dormido (Modo-0) es el modo inicial para un host. Cuando se encuentra en este modo, no se hace ninguna consulta a los periféricos. Si un host recibe, estando en este modo, un frame de petición de consulta de cualquier periférico, el host pasará al Modo-1 y comenzará a consultar a los periféricos. En este caso se debe llevar a cabo una vinculación para asociar a los periféricos con el host antes de comenzar la comunicación. El segundo modo, es el modo normal (Modo-1), en el cual se soporta a los periféricos con sus requerimientos de latencia. Un host en este modo implementa un esquema de consulta dinámica donde puede consultar cada periférico vinculado con un rango de consulta de latencia crítica (CL) o de latencia no crítica (NCL). Si un host no recibe un frame de algún periférico después de cierto tiempo (5s + 69ms para periféricos NCL o 30s + 69 ms para periféricos CL) pasará al Modo-0. Si el host se activa en un modo de comunicación serie infrarroja (IrDA SIR) pasará al Modo-2. El tercer modo de operación de un host es el de coexistencia (Modo-2). En el cual se pueden manejar comunicaciones del host con uno o más periféricos al mismo tiempo que comunicaciones del host con otro host (IrDA SIR) para intercambio de información. En este modo es imposible trabajar con ambos tipos de señales al mismo tiempo, debido a que son transmitidas con las mismas características, por lo cual se debe compartir el tiempo de operación entre los dos protocolos. Una vez finalizada la utilización del IrDA SIR el host regresará al Modo-1.

Capa LLC La capa de control de enlace lógico (LLC) provee recursos para una comunicación de datos confiable desde y hacia la capa MAC. La capa LLC provee los recursos usados por los dispositivos de control IrDA, habilitando confiabilidad a través del uso del protocolo controlador de frames. La capa LLC sólo especifica los métodos de acuse de recibo, por esto, además de esta capa cada una de las capas inferiores necesita un campo de control de errores CRC para complementar la detección de errores. Dentro de las funciones Tabla 5 - Codificación de los bits D3 y D0 del campo de control LLC. de esta capa se encuentran dos bits más reservados. La estructura y codificación el envío de comandos, la recepción de peticiones y el de este byte se muestra en la figura 16 y en las tablas envío y recepción de datos. Los procesos al nivel de 5 y 6. esta capa no son utilizados durante los procedimientos de enumeración y vinculación. La capa LLC utiliza un protocolo similar al utilizado en las comunicaciones del puerto USB. La estructuProtocolos de Datos ra del frame LLC (figura 15) consiste de sólo dos partes: un byte de control y la carga de datos que puede Para transmitir datos a través de un medio óptico ser de hasta 8 bytes para frames cortos y de hasta 96 la Infrared Data Association creó su propio protocolo, para frames larel cual es llamada Link Access Protocol (LAP), el cual gos. describe la composición de los paquetes de datos El campo de transmitidos a través de este sistema. El IrLAP está bacontrol utilizado sado en las normas de transmisión asíncrona de datos consiste de dos establecida en el RS-232C. bits que identifican el tipo de punto final (endpoint) a utilizar, 4 bits que definen el tipo de paTabla 6 - Codificación del quete (token, da- Endpoint del campo de control LLC. tos, handshake) y Figura 15 - Estructura del frame LLC.

Figura 16 - Estructura del campo de control LLC.

47

Al utilizar el IrLAP se distinguen el equipo o estación primaria y el equipo o estación secundaria. La estación primaria es el dispositivo encargado de tomar el control del enlace de transferencia. Incluso cuando una transmisión involucra más de dos dispositivos, el control siempre proviene de la estación primaria. Una estación secundaria, entonces, corresponde al equipo que solo envía datos hacia la estación primaria. En cualquier conexión IrLAP debe haber sólo una estación primaria. La elección de la estación primaria dentro de una conexión es negociado al inicio del enlace, una vez hecho esto el equipo permanecerá como estación primaria hasta que termine el enlace. Un enlace comienza cuando un dispositivo comienza a buscar la conexión con otro. El primer equipo puede solicitar directamente el enlace a un dispositivo identificado o puede permanecer buscando otro con el cual negociarlo. Para iniciar la conexión se envía una solicitud a una velocidad de 9,600 bps. Esta solicitud incluye la dirección del dispositivo inicial, la velocidad a la cual propone transmitir y otros parámetros. El dispositi-

vo que responde toma el papel de estación secundaria y responde con información de identificación que incluye su dirección y las velocidades a las que es capaz de transmitir. Posteriormente los dos equipos cambian a una velocidad mutuamente compatible y la estación primaria toma el control del enlace para iniciar la transferencia de datos. Un canal de enlace de datos puede encontrarse en uno de dos estados. El primero es el estado de conexión, el cual se dá cuando dos o más nodos han establecido una conexión e intercambian frames de información y/o control. El segundo es el estado de contención donde no existe conexión. Las estaciones en un IrLAP pueden estar en uno de dos modos: el modo de respuesta normal (NRM) que corresponde al estado de conexión y el modo de desconexión normal, que corresponde al estado de contención. Todas las transmisiones de datos y control se efectúan a través de frames. Cada frame es precedido y sucedido por campos que forman la capa envolvente. Estos campos definen el inicio y el final del frame, así como un método de detección de errores. El formato de este frame varía según la velocidad de transmisión como se muestra en la figura 17. Cada frame IrLAP contiene un campo que es la carga de datos, la cual se compone como se muestra en la figura 18. El campo de dirección se usa de la siguiente forma. Si la estación primaria transmite el frame, la dirección indica cual estación recibe. Si la estación secundaria envía, la dirección indica cual estación transmite. Además en el bit 7 indica si es un frame de comando con un “1” lógico o un frame de respuesta con un “0” lógico. Las direcciones 0x00 y 0xFF están reservadas para usarse como dirección de conexión nula y como dirección global respectivamente. El campo de información es opcional; además, los frames supervisores no lo Figura 17 - Formatos del paquete según la velocidad de contienen. La información intercambiada se transmisión. encuentran en este campo y aunque no tiene una longitud definida, debe contener sólo un número entero de bytes. El campo de control determina la función del frame; puede ser de tres diferentes formaFigura 18 - Formato de la carga de datos IrLAP. tos: no-numerado (U), supervisor (S) o infor-

48

mación (I). Esto le da nombre al frame. Los frames U son utilizados para funciones tales como establecer y desconectar un enlace de datos, reportar errores de procedimiento o transferencia de datos. Los frames de comandos y respuestas que tienen un campo de control con este formato, son usados para la administración del enlace de datos, incluyendo descubrimiento, activación e inicialización de estaciones secundarias, control del modo de respuesta de la estación secundaria y reporte de errores del proceso. El campo de control con el formato U tiene los bits 0 y 1 colocados en “1” lógico; para representar los diferentes comandos necesitados, el campo se forma como lo muestra la figura 19.

Codificación del byte de control U SNRM (Set Normal Response Mode).- Este comando es usado para establecer o restablecer una conexión. Una vez recibida una respuesta UA, una conexión es establecida o restablecida. Cuando una conexión es establecida, la estación que envía el comando SNRM entra en NRM como estación primaria, la estación que responde con UA entra en NRM como estación secundaria. El campo de dirección de un frame SNRM usado para establecer una conexión es colocado con el valor 0xFF; cuando se pretende restablecer la conexión el campo de dirección contiene la dirección de la conexión. Cuando un frame SNRM es usado para establecer una conexión el campo de información contiene la di-

Figura 19 - Estructura del campo de control U.

Figura 20 - Estructura del campo de control S.

Figura 21 - Estructura del campo de control 1.

rección de dispositivo de la fuente y del destino, la dirección de la nueva conexión y algunos parámetros de negociación. DISC (Disconnect).- Este comando indica la finalización de una conexión y coloca a la estación secundaria en NDM. Esta estación secundaria confirma la desconexión enviando una respuesta UA. En este caso no se envía un campo de información. UI (Unnumbered Information).- Estos frames pueden ser utilizados dentro y fuera de una conexión. Cuando se usan fuera de una conexión, deben contener como dirección de conexión la dirección “1111111” y e bit C/R en “1”. Cuando se usan dentro de una conexión contendrán la dirección de la conexión. Este tipo de frames contiene solamente bytes de datos en el campo información. XID (Exchange Station Identification).- Este frame puede ser utilizado como comando o como respuesta y es utilizado para descubrir dispositivos o resolver conflictos de dirección. La principal diferencia entre el frame de comando y el de respuesta es el bit C/R el cual se coloca en “1” cuando el frame es de comando y en “0” cuando es de respuesta. TEST.- Un comando TEST puede ser enviado a una estación en NDM o a una estación secundaria conectada para solicitar una respuesta TEST. Si el campo de información se incluye con el comando, es regresado en la respuesta; si la estación secundaria tiene espacio insuficiente en el buffer para el campo de información, se envía una respuesta TEST sin campo de información. RNRM (Request Normal Response Mode).Esta respuesta es usada solamente por una estación secundaria para solicitar el restablecimiento de la conexión identificada en el campo de dirección por la estación primaria. Esta respuesta espera un frame SNRM como respuesta. UA (Unnumered Acknowledgment).- Este es el frame esperado como respuesta afirmativa a los comandos SNRM y DISC. FRMR (Frame Reject).- Este frame es usado por una estación secundaria conectada para reportar la existencia de problemas que no pueden ser corregidos por medio de retransmisión. Una vez que la estación primaria recibe este tipo de frame debe ser capaz de seleccionar una acción correctiva apropiada. DM (Disconnected Mode).- Este frame es usado por una estación para indicar que se encuentra en un estado de desconexión (NDM). Fuera de una cone-

49

xión el campo de dirección contiene la dirección “1111111” y de manera opcional las direcciones fuente y destino. Dentro de una conexión, el campo de dirección contiene la dirección de la actual conexión y no existe el campo de información. RD (Request Disconnect).- Este frame es enviado por una estación secundaria para indicar que desea ser colocada en NDM. En este caso, el campo de dirección contiene la dirección de la conexión y el campo de información no es requerido. Los frames con un campo de control con formato S asisten en la transferencia de la información a pesar de que no llevan información. Son utilizados como acuse de recibo, establecer condiciones de “en-uso” y “preparado” y para reportar errores de secuencia de frames. Una estación primaria tenga o no información a ser transmitida, puede utilizar frames con formato S para consultar estaciones secundarias; una estación secundaria puede utilizar un frame con formato S para responder a una petición como confirmación. El formato y codificación de un frame de este tipo se muestra en la figura 20. Codificacion del byte de control S RR (Receive Ready).- Es enviado por una estación primaria o secundaria y confirma la recepción del frame numerado Nr — 1, además de indicar que la estación que envía esta respuesta está preparada para recibir el frame de información Nr. RNR (Receive Not Ready).- Es enviado por una estación primaria o secundaria para indicar una condición temporal de “ocupado” debido a espacio insuficiente en el buffer o características internas. Para restablecer la transmisión es enviado un frame RR. Además indica la recepción correcta del frame Nr — 1.

Figura 22 - Puerto infrarrojo en Lap Top.

50

REJ (Reject).- Este comando o respuesta puede ser transmitido para solicitar una retransmisión de frames numerados de información comenzando en el frame Nr. Esta condición termina cuando el frame requerido ha sido recibido correctamente. SREJ (Selective Reject).- Esta respuesta o comando es enviado para solicitar la retransmisión de un frame específico de información especificado por el contador Nr. Esta condición es finalizada cuando el frame requerido ha sido recibido de manera correcta. Los frames con formato I son los utilizados para transmitir la información como tal en el campo información. El frame contiene los contadores Ns que asegura que estos frames han sido recibidos en el orden apropiado; y el contador Nr que confirma la aceptación de los frames recibidos. El campo de información de un frame 1 debe contener un número entero de bytes. La estructura de un frame 1 se muestra en la figura 21. El bit P/F utilizado en el bit 4 de los frames con formato U, S e I, es usado para controlar la alternativa de acceso de dos vías durante el modo de conexión (NRM). Cuando un frame es enviado desde la estación primaria, el bit es de consulta (P) y es usado para solicitar la respuesta de una estación secundaria. Cuando el frame es enviado desde una estación secundaria el bit simboliza final (F) y es usado para indicar el frame final transmitido como resultado de un comando de consulta. La estación secundaria no está autorizada a transmitir hasta recibir un frame de comando, con el bit P colocado en “1” la estación secundaria colocará el bit F en “1” cuando envíe el último frame de una transmisión de respuesta, lo que regresa el permiso de transmisión a la estación primaria. Por último, las figuras 22, 23 y 24 muestran diferentes disposiciones del puerto infrarrojo.

Figura 23 - Adaptador USB - IrDA.

*****************

Figura 24 - Lector Infrarrojo interno.

E

l ciudadano industrializado, “muy cambiante en este último tiempo”, se ha visto en la necesidad de asumir, en escasos 30 años, el significado de un buen número de nuevos conceptos marcados por su alto contenido tecnológico. De ellos, sin duda, el más relevante ha sido la computadora. Ésta está introducida hoy en día, en su versión personal en multitud de hogares, y el hombre medio va conociendo en creciente proporción, además de su existencia, su modo de uso y buena parte de sus posibilidades. Pero dejando de lado esta verdadera revolución social, existen otros conceptos procedentes del desarrollo tecnológico que han superado las barreras impuestas por las industrias y centros de investigación, incorporándose en cierta medida al lenguaje coloquial. Es llamativo como entre éstas, se destaca el concepto de robot. Pero el robot industrial, que se conoce y emplea

en nuestros días, no surge como consecuencia de la tendencia o afición de reproducir a imagen y semejanza a los seres vivientes, sino de la necesidad. Fue la escasez la que dio origen a la agricultura, el pastoreo, la caza, la pesca, etc. Luego, la necesidad provocó la primera revolución industrial con el descubrimiento de la máquina de vapor de Watt y, actualmente, la necesidad ha cubierto de computadoras la faz de la Tierra. Inmersos en la era de la informatización, la imperiosa necesidad de aumentar la productividad y mejorar la calidad de los productos, ha hecho insuficiente la automatización industrial rígida, dominante en las primeras décadas del siglo XX. En este capítulo veremos algunos conceptos de control y cómo realizarlos mediante el uso de los puertos de una computadora empleando ejemplos prácticos que podrá utilizar para diferentes aplicaciones.

51

Introducción Se llama mecanización a la incorporación de máquinas en la realización de determinadas tareas. Así, se habla de la mecanización del campo, cuando a las tareas agrícolas se han incorporado máquinas por todos conocidas como el tractor, el arado o la cosechadora. También se habla del mecanizado de piezas en un taller, cuando para su fabricación se utilizan máquinas como tornos o fresadoras, es decir, cuando se abandona la fabricación manual y se sustituye por procesos mecanizados que permiten mejores acabados y mayor rapidez en la confección de elementos. Un paso más allá es la automatización, considerada como la supresión parcial o total de la intervención de las personas en la realización de tareas productivas, como las tareas agrícolas, industriales o administrativas. Los autómatas son un caso muy conocido de control, ya tradicional, que se ha venido aplicando a aquella clase de máquinas en las que una fuente de energía acciona un mecanismo, que permite imitar los movimientos de los seres animados. Se conocen autómatas que fueron construidos por los griegos en el templo de Dédalo; sin embargo, uno de los casos más difundidos es el del Pato de Vaucanson (Grenoble 1709-París 1782) construido en 1738, que era un pato artificial capaz de batir las alas, zambullirse, nadar, tragar grano e incluso expeler una sustancia parecida al excremento. Otro caso de autómatas célebres aunque más próximo a nuestro tiempo es el del jugador de ajedrez de Torres Quevedo, construido en 1912, capaz de jugar finales de partida (rey contra rey y torre). Pero debe ponerse de manifiesto que los autómatas siempre repiten el mismo modelo de actuación, no son reprogramables y tampoco son capaces de variar sus acciones en función del entorno o la situación. El control numérico es la supervisión y regulación de determinadas tareas mecánicas de precisión, realizadas por una máquina herramienta. El control de estas tareas se realiza de forma automática para evitar, de este modo, que el control se lleve a cabo por un operario que, en ocasiones, podría verse sometido a ciertos riesgos en un proceso donde es imposible erradicar los errores humanos. De esta forma, se ajusta al máximo la precisión en la confección de piezas estandarizadas y se libera al operario de su control, mejorando la calidad y la cantidad del trabajo realizado. Un ejemplo de control automático es el control de la velocidad de giro de un taladro o la velocidad y control de avance de un torno o fresadora. Otro sistema de control au-

52

tomático es el servocontrol. Consiste en controlar, de forma automática, las acciones de una máquina en función de unos parámetros definidos y sus variaciones. Por ejemplo, el servocontrol se puede utilizar para controlar la velocidad de giro de un torno, de forma que se mantenga fija dentro de unos límites. Otro ejemplo de servocontrol podría ser el del freno de algunos vehículos en los que la fuerza transmitida a las ruedas es proporcional a la fuerza aplicada por el conductor sobre el pedal del freno; de esta función se encarga un mecanismo servocontrolado que se llama servofreno. La robotización es también una automatización de procesos sin la intervención humana, pero en este caso se da un paso más; hay desplazamiento de cargas, manipulación de objetos y un fuerte componente de realimentación. Es decir, este tipo de automatización permite la manipulación automática y programable de acciones y objetos. La realimentación es un proceso imprescindible en la robotización, ya que dota a un proceso de capacidad para captar información que, una vez procesada por la máquina, permite modificar su comportamiento (sus acciones). Una máquina que posea la capacidad de realimentación, es capaz de modificar sus respuestas en función de las variaciones de su entorno. Centrando el análisis en las diferencias que existen entre automatización y robotización, puede decirse que una máquina automatizada (autómata) responde siempre de igual manera ante sucesos de idéntica naturaleza. Mientras que por el contrario un robot, es decir, una máquina robotizada, se caracteriza porque puede manejar objetos y, lo más interesante, es un dispositivo multifuncional y reprogramable. Una máquina robotizada es capaz de hacer trabajos totalmente diferentes y adaptarse al medio, ya que puede tomar decisiones en función de las condiciones exteriores. La totalidad de los procesos de mejora y control de la producción pueden sintetizarse en tres fundamentales: Procesos de mecanización, procesos de automatización y procesos de robotización. Las principales características de cada uno de estos tres grupos se exponen en el cuadro de la figura 1.

La Computadora Como Sistema de Control La aparición del computador en la década de los 40, acelera vertiginosamente el desarrollo de autómatas y robots. La cuestión es: ¿podemos hacer servir lal PC como un autómata o un robot?. Para poder respon-

der es preciso verificar si se cumplen las siguientes condiciones: ¿Podemos conectarle sensores? ¿Podemos conectarle actuadores? ¿Podemos programarlo (y reprogramarlo) para que tome decisiones en función de los sensores y de instrucciones previas para que los actuadores operen en consecuencia? La respuesta a las tres cuestiones es afirmativa ya que: “La PC cuenta para comunicarse con sus periféricos, incluso en su versión más básica, con diversos dispositivos de entrada: puertos paralelo y serie, USB, joystick, micrófono... Además, es posible agregarle tarjetas especializadas que añaden otras muy diversas clases de entradas” También cuenta con varios dispositivos de salida: puertos paralelo y serie, USB, sonido, video... Asimismo, se pueden añadir tarjetas especializadas que expanden el número y tipo de entradas. Por otras parte, son muchos los lenguajes de programación utilizables en la PC que permiten leer las entradas y modificar las salidas: BASIC, LOGO, Pascal, C, EnsamblaFigura 1 dor, etc. (figura 2).

El Puerto de la PC Introducción Hace años, 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 interfaz con la impresora. El sistema operativo DOS cargado en dichas PCs soporta hasta tres puertos paralelos asignados a los identificadores LPT1, LPT2 y LPT3, y cada puerto requiere tres direcciones consecutivas del espacio de E/S (entradasalida) del procesador para seleccionar todas sus posibilidades. Desde el punto de vista del hardware, el puerto consta de un conector hembra DB25 con doce salidas

Figura 2

53

Figura 3

latch (poseen memoria/buffer intermedio) y cinco entradas, con ocho líneas de tierra. 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 (I/O) consecutivas de la arquitectura x86 (figura 3). 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 flujo. Sin embargo, 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.

Descripción del Conector Físico

Figura 4

54

La conexión del puerto paralelo al mundo exterior se realiza mediante un conector hembra DB25. Observando el conector de frente y con la parte que tiene mayor número de pines hacia arriba (figura 4), se numera de derecha a izquierda y de arriba a abajo, del 1 al 13 (arriba) y del 14 al 25 (abajo).

En este conector tenemos: 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. En la tabla de la figura 5 se detallan la nomenclatura y descripción de cada línea. La columna “Centronics pin” se refiere a las líneas del conector tipo Centronics usado en las impresoras. La columna E/S se refiere al dato visto desde el lado del PC. El nombre de cada señal corresponde a la misión que cumple cada línea con relación a la impresora, el periférico para el que fue diseñado el puerto paralelo. 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 ~5V en TTL y bajo a ~0V en TTL..

Figura 5

55

Figura 6

Acceso al puerto El puerto paralelo se identifica por su dirección de E/S (entrada/salida, I/O) base y se reconoce en sistemas MS-DOS por el número LPT (lp en Unix/Linux). Cuando arranca la máquina, la BIOS (Basic Input Output System) chequea direcciones específicas de E/S en busca de puertos paralelos y construye una tabla de las direcciones halladas en la posición de memoria 40h:8h (o 0h:0408h). Esta tabla contiene hasta tres palabras de 16 bits, cada palabra con el byte bajo primero seguido por el byte alto. Cada palabra es la dirección de E/S base del puerto paralelo (que denominaremos LPT_BASE en lo sucesivo). La primera corresponde a LPT1, la segunda a LPT2 y la tercera a LPT3. Hay que agregar que, en MS-DOS tenemos el dispositivo PRN que es un alias a uno de los dispositivos LPT (generalmente es LPT1, pero se puede cambiar con la orden MODE). Las direcciones base estándar para los puertos paralelos son: 03BCh 0378h 0278h Las direcciones son chequeadas en este orden. La tabla de la figura 6 muestra, como ejemplo, la memoria en un PC con dos puertos paralelo instalados en las direcciones hexadecimales 378 y 278. Registros El puerto paralelo estándar (SPP) consta, como se

Figura 7

56

mencionó antes, de tres registros de 8 bits localizados en direcciones adyacentes del espacio de E/S del PC (vea la tabla de la figura 7). 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 Se hará referencia a cada bit de los registros como una inicial que identifica el registro seguido de un número que identifica el número de bit, siendo 0 el LSB (bit menos significativo) y 7 el MSB (bit más significativo). Por ejemplo, D0 es el bit 0 del reg. de datos, S7 es el bit 7 del reg. de estado y C2 es el bit 2 del reg. de control. Se indican con una barra de negación los bits que utilizan lógica negativa. En lógica positiva, un 1 lógico equivale a alto (~5V TTL) y un 0 lógico a bajo (~0V TTL). En lógica negativa 1 equivale a bajo (~0V) y 0 equivale a alto (~5V). Lo expresado lo podemos observar en el diagrama del conector de la figura 8. Es preciso no confundir la lógica que sigue el puerto con la lógica que mantiene la impresora. Por ejemplo, la impresora pone a alto Busy (pin 11) para indicar que está ocupada. Pero en realidad, al leer el registro de estado, Busy la interpretamos como 0 (puesto que el pin 11 se corresponde con S7). Es decir, es como si fuera activa en bajo (Busy). Registro de datos (D): El registro de estado se ha-

lla en LPT_BASE. Se Figura 8 puede leer y escribir. Escribir un dato en el registro causa que dicho dato aparezca en los pines 2 a 9 del conector del puerto. Al leer el registro, se lee el último dato escrito (NO lee el estado de los pines; para ello hay que usar un puerto bidireccional). En la figura 9 se describe el nombre que toma cada bit de este registro. El estándar es que las salidas sean LS TTL (low schottky TTL), aunque las hay que son de tipo OC (colector abierto). La corriente que pueden entregar (modo source) es de 2,6mA máximo y pueden absorber (modo sink) un máximo de 24mA. En el puerto original de IBM hay condensadores de 2,2nF a masa. Las tensiones para el nivel bajo son entre 0 y 0,8V y el nivel alto entre 2,4V y 5V. Registro de estado (S): El registro de estado está en LPT_BASE+1. Es de sólo lectura (las escrituras serán ignoradas). La lectura dá el estado de los cinco pines de entrada al momento de la lectura. En la figura 10 los nombres de los pines se dejaron en inglés porque es como generalmente se identifican. La línea Busy tiene, generalmente, una resistencia de pull-up interna. El estándar es que sean entradas tipo LS TTL.

de control (figura 11) se encuentra en LPT_BASE+2. Es de lectura/escritura. Los cuatro bits inferiores son salidas. La lectura devuelve lo último que se escribió a dichos bits. Son TTL a colector abierto con resistencias de pull-up de 4.7kW, por lo que un dispositivo externo puede forzar el estado de los pines sin dañar el driver. Esto permite utilizar estas cuatro líneas como entradas. Para ello, se ponen en alto las cuatro salidas (escribiendo 0100b, es decir, 4h, en LPT_BASE+2) lo que hace que las sa-

Figura 9

Figura 10

Registro de control (C): El registro

57

do C4=1, se activa el buffer y su entrada, S6, se conecta a la línea IRQ (en general es IRQ7 o IRQ5). La lectura del bit, nos devuelve el estado del mismo (es decir si el buffer está en alta impedancia o no). Se producirá una interrupción, cuando haya un flanco descendente en el pin correspondiente a S6. A continuación, se describen los pasos para poder utilizar interrupciones. Finalmente, en la figura 12 se muestra una tabla que reúne las características hardware y software del puerto paralelo.

Figura 11

lidas “floten”. Ahora, un dispositivo externo puede forzar a bajo alguna de las salidas con lo que, leyendo el puerto, sabemos si esto sucedió o no. Es posible realizar esta técnica en salidas totem-pole (como D0-D7) pero no se recomienda su uso porque habría que tener un conocimiento preciso de la corriente, ya que se puede sobrecargar los transistores de salida y dañar el driver (especialmente en puertos integrados LSI). Bit de puerto bidireccional (compatible PS/2): El bit C5, está disponible sólo si se trata de un puerto bidireccional; en los puertos comunes no se utiliza, al igual que los bits C6 y C7. Si C5=1, el buffer de los datos de salida se pone en alta impedancia, “desconectando” dicho buffer de los pines 2 a 9 del conector del puerto (D0 a D7). Si se escribe al registro de datos, se escribe al buffer pero no a la salida. Esto permite que al leer el puerto, se lea el estado de las entradas y no lo que hay en buffer. Cuando C5=0 el puerto retorna al modo salida, su estado por defecto. En las computadoras IBM PS/2, para habilitar el puerto paralelo bidireccional, además de lo antes descrito, se debe poner a 1 el bit 7 del registro del puerto 102h (opciones de configuración). En computadoras que no tengan puerto paralelo bidireccional compatible PS/2, hay que modificar uno o más bits de algún puerto específico correspondiente al chipset de la placa. A veces se habilita por el Setup o por jumper en la placa del puerto. Bit de interrupción: En trabajos normales de impresión, ni el BIOS ni el DOS hacen uso de la interrupción. El hecho de poseer una línea de interrupción que está conectada directamente al PIC (Programmable Interrupt Controller), lo hace muy útil para experimentación en data-loggers por ejemplo. El bit de interrupción está conectado al control de un buffer de tres estados. Cuan-

58

Protocolo del Puerto de Impresora El handshaking (“apretón de manos” o protocolo) es un conjunto de reglas que ambos extremos de un sistema de comunicación tienen que seguir para que la comunicación sea correcta. El puerto paralelo, usado con una impresora, transmite datos y transmite/recibe las señales de protocolo. Las principales son Strobe, Ack y Busy. La secuencia a seguir para enviar datos sería: Colocar el byte a enviar en el registro de datos. Verificar que la impresora no esté ocupada (Busy = bajo, S7 = 1). Indicarle a la impresora que acepte los datos (Strobe = bajo , C0 = 1, pulso >5us). En ese instante la impresora indica que está ocupada recibiendo los datos (Busy = alto, S7 = 0). Finalmente, la impresora envía un pulso de aceptación indicando que se recibieron los datos y que se puede volver al paso 1 (Ack = bajo, S6 = 0, pulso de entre 5 ms y 15 ms según impresora). Las otras señales sirven para verificar el estado de la impresora (Error, PaperEnd), para reiniciarla (Init) y para configurarla (AutoFeed, Select). En los nuevos puertos, estas señales adquieren otra función, a veces parecida y otras totalmente distintas. Interrupciones con el Puerto Paralelo En primer lugar, se debe habilitar el buffer que conecta la línea ACK con la línea IRQ. Esto lo hacemos poniendo a 1 el bit 4 del registro de control (LPT_BA-

Figura 12

59

SE+2). Luego se debe preparar una ISR (Interrupt Service Routine) que atienda la interrupción recordando enviar la señal EOI (20h) al registro de control del PIC (puerto 20h) al salir de la rutina. La interrupción software corresponde a la número 0Dh para IRQ5 y 0Fh para IRQ7. Finalmente se habilita con 0 la interrupción IRQ5 (o IRQ7) escribiendo al bit 5 (o 7) del registro de interrupciones del PIC (puerto 21h). Para desinstalar la ISR, se deshabilita la IRQ5 (o IRQ7) escribiendo un 1 al bit 5 (o 7) del registro de interrupciones del PIC (puerto 21h). Luego se hace que C4=0.

Velocidad Un puerto paralelo ISA normal toma un ciclo-ISA para leer o escribir. En un sistema cuya velocidad de bus sea 1,3MHz, se puede decir que la lectura se puede hacer cada 1 ms (idealmente, ya que siempre existen otras instrucciones software, etc; en la práctica pueden ser desde 1.2 ms a 2 ms). Algunos puertos soportan un modo “turbo” que elimina los 3 estados de espera de la CPU, con lo que la velocidad de lectura/escritura del puerto se duplica (2,7MHz).

Acceso Básico al Puerto Paralelo Programación básica de la E/S en Basic: Para realizar el control de dispositivos mediante el puerto para-

lelo debemos hacer uso de las funciones de QBasic que permiten acceder a los puertos hardware. Daremos unos ejemplos básicos de la programación de la E/S por el puerto paralelo. Estos ejemplos se presentan con un grado de estructuración creciente en el estilo de programación. En el primer ejemplo se supone que la PC está equipada con un puerto paralelo de tipo estándar localizado en la dirección 0x378, como suele ser habitual en Windows 98, de modo que el registro de datos se localiza en esa misma dirección y el de estado en 0x378+1. En el ejemplo (al que llamamos CTRL.BAS) se envía un byte a las líneas de datos y se recibe un byte de las líneas de estado con las funciones OUT e INP utilizando un estilo de programación muy básico, tal como se sugiere en la tabla 1. En el siguiente ejemplo se supone que la PC está equipada con un puerto paralelo de tipo bidireccional localizado en la dirección 0x378 de modo que el registro de datos se localiza en esa misma dirección y el de control en 0x378+2. El bit C5 del registro de control se utiliza como conmutador del modo salida (escritura en las líneas de datos) al modo entrada (lectura de las líneas de datos). En el ejemplo, mostrado en la tabla 2 y al que llamamos CTRL_0.BAS, se envía y se recibe un byte de las líneas de datos del puerto aprovechando su capacidad bidireccional utilizando las funciones OUT e INP sin mayores complicaciones en la programación. El siguiente ejemplo es funcionalmente idéntico al anterior, aunque se hace uso de las constantes de BASIC para dotar al programa de mayor elegancia y cla-

Tabla 1

60

Tabla 2

Tabla 3

61

ridad. También, facilita la reprogramación en caso de que, por ejemplo, el puerto no se halle en la dirección supuesta. Obsérvese en la tabla 3 que la constante 0x378 sólo aparece ahora una vez en el código fuente, frente a las cuatro veces que lo hacía en CTRL_0.BAS. Se ha hecho uso asimismo de la notación hexadecimal para los valores que activan y desactivan el bit C5 del registro de control. En el siguiente ejemplo, esta vez no es sólo maquillaje. Cuando en los casos anteriores hemos activado y desactivado el bit C5, pudimos también modificar el estado del resto de los bits del registro de control. Normalmente, es de buen gusto respetar el estado original del puerto cuando uno finaliza la ejecución de su programa. Así pues, en el siguiente ejemplo se lee (tabla 4, CTRL_2.BAS) en primer lugar el estado del registro de control y se almacena en un byte (que llamamos ctrl%). Cuando utilizamos OUT, lo hacemos de modo que úni-

camente modificamos individualmente el bit deseado, y no todos. Finalmente escribimos el byte ctrl% al registro de control para recuperar el estado original. Obsérvese que se usa el operador ~ para realizar el complemento a 1 de C5ON, de modo que nos ahorramos el definir otra constante simbólica para la condición de bit apagado. Ahora un cambio significativo: vamos a determinar, y no a suponer, dónde se halla situado el puerto paralelo (consúltese la sección correspondiente de El Puerto Paralelo del PC para conocer los detalles acerca de cómo determinar cuántos puertos se hallan instalados y qué direcciones de E/S ocupan). Para ello accedemos a la zona de memoria donde se registran las direcciones de los puertos paralelos presentes en el PC (en la zona de las variables de la BIOS), por mediación de la función PEEK. Una vez detectados los puertos presentes, nos quedamos con el primero y programamos la entrada-salida exactamente igual que en CTRL_2.BAS. Vea la programación de es-

Tabla 4

62

te ejemplo (CTRL_3.BAS) en la tabla 5. Por último, integraremos el código que localiza la dirección del puerto en ua función que devuelve dicha dirección. Para ello definimos la función PuertoDir%, sin argumentos y de tipo entero. Si dicha función no localiza ningún puerto devuelve un 0, lo que brinda al programa una posibilidad de terminar la ejecución cuando en un PC no existe puerto paralelo disponible (tabla 6).

Actividades Es recomendable que ponga en práctica lo dictado hasta aquí y para ello le sugerimos realizar algunos ejemplos básicos. Encendiendo un LED Realícese el montaje elemental esquematizado en la figura13. Puesto que se trata de un montaje inicial,

Tabla 5

63

Tabla 6

Figura 13

64

en el que se es posible “sacrificar” el orden respecto de la sencillez, se puede llevar a cabo uniendo directamente con regletas los componentes a los cables, e introduciendo éstos en las hembras del conector de la PC. Por supuesto, es preferible realizar montajes más estables, pero de ello nos ocuparemos más adelante. Nota: no es preciso puentear exteriormente entre sí las líneas 18-25 puesto que cada una de ellas es ya la tierra del puerto. En este montaje se ha conectado un LED (salida digital) en el pin 2 del puerto (bit D0 del registro de datos) y un interruptor (entrada digital) en el pin 15 (bit S3 del registro de estado). A los fines prácticos, intente realizar un programa en QBasic para la iluminación del LED y para la detec-

ción del estado del interruptor (véase el programa CTRL.BAS de la tabla 1 de la pághina 60). Ahora haga un montaje como el de la figura 14, donde se supone que el puerto paralelo tiene capacidad bidireccional y se ha conectado el interruptor (entrada digital) en el pin 3 del puerto (bit D1 del registro de datos). Haga un programa en QBasic para la iluminación del LED y para la detección del estado del interruptor (véase el programa CTRL_0.BAS).

Figura 14

Interfaces Básicos de E/S con el Puerto Paralelo

Circuito sin Alimentación Externa Se trata de un circuito muy sencillo que usa un mínimo de componentes y proporciona un test funcional de 8 bits. Cada bit de la entrada puede ser individualmente controlado y visualizado en los LED de salida. Los diodos LED que actúan de display se alimentan únicamente con la corriente proporcionada por las propias salidas del puerto. Sería preferible alimentar los LED y utilizar la corriente absorbida para iluminarlos, pero el conector no proporciona una señal de alimentación Figura 15 (Vcc), de modo que se necesitaría una fuente externa. Eléctricamente, el puerto paralelo entrega señales TTL y como tal, teóricamente, se le puede conectar cualquier dispositivo que cumpla con los niveles de voltaje específicos de la lógica TTL, sin embargo el hardware del puerto paralelo está muy limitado en cuanto a su capacidad de manejo de corriente, por ésta razón se debe ser muy cuidadoso con el

manejo de las señales del puerto: un cortocircuito puede dañar permanentemente la tarjeta madre del PC. Sin embargo, experimentalmente se comprueba que en la mayoría de los PC el puerto proporciona corriente suficiente para una clara indicación visual de los LED. El circuito se muestra en la figura 15. Las líneas de datos (D0-D7, pines 2-9) se utilizan como líneas de salida, e iluminan los LED cuando en ellas se fija por software un 1 lógico (+5V). Cuando se fija un 0 lógico, los LED se apagan. Como entradas se utilizan, como nibble (semibyte) bajo, las cuatro líneas

65

Figura 16

Figura 17

66

asociados al registro de control (C0,C1,C2 y C3, pines 1, 14, 16 y 17) y, como nibble alto, cuatro de las líneas asociadas al registro de estado (S4,S5,S6 y S7, pines 13, 12, 10 y 11). Obsérvese que las líneas de control se utilizan normalmente como salidas. Sin embargo, aquí deben ser configuradas como entradas. Obsérvese, asimismo, que cuatro de las líneas de entrada se corresponden con bits que utilizan lógica negativa (C0, C1, C3 y S7). Esto habrá de tenerse en cuenta cuando se realice el programa de control de esta interfaz. Los detalles sobre el montaje de éste y los posteriores circuitos se pueden consultar en la página web: http://cfievalladolid2.net/tecno/cyr_01

Circuito con Alimentación Externa Fijémonos ahora solamente en una de las líneas de entrada y en una de las líneas de salida. Un circuito como el de la figura 16 utiliza una fuente externa de +5V para alimentar los diodos LED y las señales de entrada. Un 1 lógico en D7 (bit 7 del puerto de DATOS) produce que el LED

se apague. Un 0 lógico produce la iluminación del LED. El interruptor normalmente abierto S produce que aparezca un 1 lógico (+5V) en la entrada Busy (registro de ESTADO, S7). Cuando se cierra S un 0 lógico (GND) se aplica a la entrada Busy. Un circuito como el precedente para las 8 líneas de entrada y salida es un alternativa al propuesto en la sección anterior. Las aplicaciones y programas prácticos para este circuito no son objeto der esta obra, pero las puede bajar de: http://cfievalladolid2.net/tecno/cyr_01

Circuito con Alimentación Externa y Etapa Separadora Para disminuir lo más posible el riesgo de daños al puerto, se puede utilizar un circuito integrado 74LS244 como etapa separadora en las líneas de salida. Al mismo tiempo se mejora la capacidad de manejo de corriente, de forma que se pueden conectar sin riesgo la serie de diodos LED que indican la actividad en las líneas de datos del puerto paralelo. El circuito se detalla en la figura 17. Por cada línea de entrada que tomamos directamente del puerto paralelo existe una etapa amplificadora-separadora dentro del circuito integrado 74LS244 que nos permite trabajar con una tasa de entrega de corriente suficiente para desplegar en los diodos emisores de luz la información escrita en las líneas de datos del puerto. Además es posible habilitar ó deshabilitar el despliegue del nibble de orden inferior ó superior del byte escrito en el puerto. Colocando en un nivel lógico alto el pin 1 del CI 74LS244 inhabilitamos el despliegue del nibble de orden bajo y un nivel lógico alto en la patita 19 evita el despliegue del nibble de orden alto. Por comodidad, se conectan las patitas 1 y 19 permanentemente a tierra de tal manera que sea posible visualizar la actividad en los diodos LED. Este circuito, al igual que otros presentados en este texto, necesita de alimentación externa. Se puede alimentar directamente mediante una fuente de +5V, o construir ésta usando una pila de 9V o un adaptador universal, y un regulador de voltaje 7805. El 7805 puede regular cualquier voltaje de entre 7 y 25V c.c. hasta los 5V que precisa el circuito (vea el diagrama de conexión del regulador en la figura 18.

Circuito Bidireccional con Alimentación Externa El circuito de la figura 19 aprovecha la capacidad bidireccional del puerto paralelo de la práctica totalidad de los PCs actuales. Así, las 8 líneas de datos del puerto (D0-D8) se pueden utilizar a modo de un bus de datos que, en ocasiones contiene los valores que serán leídos por la computadora y, otras veces, transporta los datos que ésta envía a la salida digital. No es preciso ahora utilizar las líneas de estado y de control del puerto a modo de entradas, como se hacía en el circuito sin alimentación externa (figura 15). Este circuito utiliza los siguientes CI: 74LS573: un registro octal latch D transparente usado como puerto de salida para iluminar los diodos LED, o cualquier dispositivo al que se le quieran enviar señales digitales. 74LS245: un transceptor octal bidireccional que proporciona un puerto de entrada de 8 líneas; toma datos de entrada de 8 interruptores o de cualquier dispositivo desde el cual se quiera leer información digital. Ambos integrados se controlan mediante el bit C0 del registro de control. Cuando el pin 1 se halla en alto, los datos escritos por el puerto se transfieren a los LED mediante el 74573, mientras que el 74245 está aislado del bus de datos. Cuando el pin 1 está bajando, los datos a su entrada se conservan en la salida. Cuando el pin 1 está bajo el 74245 se habilita y los datos presentes en su entrada se transfieren a su salida y pueden ser leídos por el programa. El bit C5 se utiliza como control de las operaciones de lectura/escritura del puerto bidireccional. El programa debe fijar tanto C0 como C5 a 0 para realizar una escritura (es decir, debe escribir un valor de-

Figura 18

67

cimal 0 el el registro de control). Para llevar a cabo una lectura ambos bits deben ser establecidos a 1 (es decir, debe escribir un valor hexadecimal 0x21, o decimal 33, en el registro de control).

Display de 7 Segmentos Una posibilidad es sustituir, en los montajes anteriores, el sistema de visualización mediante 8 diodos LED por un display numérico de 7 segmentos (figura 20) más un punto decimal. El circuito resulta así más compacto.

Si se trata de un display de ánodo común hay que alimentar con Vcc= +5V las dos líneas señaladas como comunes en la figura, y es preciso poner a tierra la línea correspondiente al segmento que se quiere iluminar. Si se trata de un display de cátodo común, hay que alimentar con +5V el segmento que se desea iluminar y poner a tierra las dos líneas comunes. Así, en un display de cátodo común, las líneas 1-8 se pueden conectar directamente a las líneas de datos del puerto (pines 2-9 del conector DB25), y las dos líneas comunes se pueden conectar a cualquiera de las patillas de tierra del conector, por ejemplo, la 25. Reiteramos que si Ud. desea realizar los montajes

Figura 19

68

de los circuitos propuestos, o si quiere analizar con mayor profundidad lo que aquí se expone, puede visitar la página de Internet:

Figura 20

http://cfievalladolid2.net/tecno/cyr_01. Cabe aclarar que los circuitos se pueden montar sobre una placa tipo "protoboard" y utilizar cable rígido para realizar las conexiones necesarias entre los componentes. Las entradas/salidas del circuito hacia el PC se pueden reunir en un conector DB25 macho unido a la placa por líneas de cable rígido o de cable plano. A su vez, el conector macho se puede unir directamente al conector hembra de la PC mediante un cable de extensión paralelo, lo que normalmente resulta más cómodo para acceder a la parte trasera de la PC donde se sitúa el conector hembra. Para simplificar los circuitos que utilizan interruptores a modo de entradas digitales, éstos se pueden reunir en un único DIP switch de ocho posiciones. Lógicamente, para cada circuito podemos realizar diferentes actividades, pero ese tema, desarrollado por el autor en la web, será objeto de otras publicaciones.

Distinguiendo los Sistemas Operativos Sin hilar muy fino, podemos decir que un sistema operativo debe fijar reglas claras para todo fabricante de software que desee ejecutar programas en él, ya que al utilizar una PC, estamos abiertos a ejecutar aplicaciones de distintos orígenes. Por lo tanto, se debe asegurar “derechos y obligaciones” para que los programas dentro de un sistema no se interfieran (y perjudiquen) entre ellos. Como conclusión y grandes rasgos podremos decir que el Sistema Operativo sirve de intermediario entre los programas y el hardware. (Figura 21)

gresa al mundo de las PCs, lo hace a través de Windows, lo asumimos casi de manera natural porque no importa dónde vayamos, siempre hay una máquina con Windows cerca. • Linux: considerado como “el sistema de los nerds”, ha ido evolucionando hasta convertirse en un sistema operativo amigable que puede llegar a superar en estabilidad a la plataforma Windows. Está diseñado y probado sobre la base de las contribuciones de miles de usuarios y programadores independientes en distintas partes del mundo que aportan su granito de arena para que el sistema crezca y progrese. Sin embargo, tiene en contra la “tendencia cultural” impuesta por Windows que le impide difundirse ampliamente.

No hay dudas que en el mercado y en la comunidad de usuarios podemos hallar 3 Sistemas Operativos que se destacan, o al menos hemos oído hablar de la mayoría. • Windows: sin dudas, es el sistema operativo mejor afianzado en el mercado (más que por elección de los usuarios, por costumbre). Casi todo usuario que in-

Figura 21

69

• DOS: si bien ese trata de un sistema operativo en desuso, podría considerarse como el más veloz y sencillo de los tres (incluso podría considerarse ideal para tareas dedicadas. Sus comandos todavía pueden utilizarse cuando utilizamos el “símbolo de sistema” de Windows XP o la “terminal” de Linux. No existe una definición clara de driver para esta arquitectura, ya que teóricamente cualquier aplicación puede hacer E/S en forma directa.

Los Drivers, Comunicando Hard&Soft Definiremos como drivers o controladores a las herramientas o rutinas necesarias para que el sistema operativo interactúe con el hardware. Tendremos drivers de sonido, puertos, unidades de disco, etc. El driver por sí mismo no es un programa accesible por el usuario. Las aplicaciones interactúan indirectamente con el dispositivo a través de llamadas del sistema, las cuales luego se traducen por el SO en instrucciones de entrada salida. Los sistemas operativos actuales no tienen por qué saber de fábrica, como funciona todo el hardware existente en el mercado. Si esto fuera posible, acarrearía cantidades enormes y mayormente innecesarias de información. Lo que suele hacerse es armar un paquete que recopile versiones estables (libres de errores) de los drivers de dispositivos comerciales de uso común.

Soporte de Programación Refiriéndonos a los drivers o controladores, no existe un driver genérico multiuso que sirva para todos los tipos de sistemas operativos. Es más, generalmente se programa un driver para varias versiones de un sistema determinado. Por lo tanto, si desarrollamos un proyecto de hardware, deberemos considerar en qué sistemas y/o PCs lo vamos a conectar. Sobre los sistemas anteriores podemos decir: • Microsoft ofrece para sus sistemas Windows un set de librerías llamado DDK (Driver Development Kit). Consiste en numerosas ayudas, ejemplos y herramientas destinadas a programas de un nivel avanzado. Este paquete tiene un costo, y se entrega para la última versión de Windows disponible en el momento de su compra.

70

• Respecto al soporte de drivers de Linux, con un poco de paciencia podemos encontrar mucha información gratuita en Internet, con una muy buena documentación. Pero nuevamente se exige un alto conocimiento de programación. • Molestando un poco más con DOS, podemos decir que existe mucha bibliografía escrita, y aún puede encontrarse información en la red sobre E/S con este sistema, sigue siendo la alternativa más simple.

Simple vs Complicado DOS es más simple, ya que se trata de un sistema monotarea (trabaja con una aplicación a la vez). Linux y Windows son sistemas multitarea (más de una aplicación a la vez...) por lo que necesitan controlar estrictamente que es lo que maneja cada aplicación para que en ningún momento se produzcan situaciones conflictivas (por ejemplo, dos aplicaciones queriendo imprimir a la vez). Para lograr su cometido, los sistemas multitareas han tenido que perfeccionar niveles y permisos que les permitan decidir en qué momento una aplicación accede a un dispositivo.

Niveles de Trabajo Para explicar este concepto necesitaremos aclarar la idea de proceso: un programa puede estar constituido por varios procesos simultáneos que realizan distintas tareas. Cada proceso tiene asignado para sí recursos determinados (direcciones E/S disponibles, servicios disponibles, cantidad de memoria asignada, prioridad frente a otros procesos) Con la aparición de los procesadores 386, se empezó a hablar de niveles de privilegio o de ejecución, estos se clasificaban en: • El nivel 0, nivel Kernel o Monitor: aquí un proceso tiene acceso irrestricto al hardware tiene acceso al hardware. En este nivel se ejecuta el núcleo del sistema operativo. Evidentemente el fallo de un programa en nivel cero, tiene por consecuencia la caída inexorable de la máquina. • Los niveles 1 y 2 estaban destinados a ejecutar los drivers del sistema. En el caso de Microsoft, se optó por ejecutarlos a nivel Kernel (nivel 0), Linux siguió la misma tendencia.

• El nivel 3 o nivel Usuario: Allí se ejecutan los programas de usuario, los cuales sólo pueden acceder al hardware o a los recursos del sistema, a través de los niveles anteriores. Un sistema operativo en si tiene numerosos procesos, que se ejecutan en diferentes niveles, según las necesidades y operaciones a cumplir por cada uno. Podríamos hacer una analogía con una estructura de una empresa, los gerentes (nivel 3) pueden decidir sobre el destino de una planta de procesamiento, pero los operarios (nivel 0) son los que trabajan directamente con las máquinas y herramientas. Con esto podemos decir que una instrucción desde el nivel de usuario puede desencadenar varias operaciones a nivel de kernel sobre el hardware. A la vez, el nivel de usuario nos permite generalizar ciertas operaciones. De esta manera, si un desarrollador de software deseara reproducir un sonido, no necesita aprender el funcionamiento interno de cada placa de sonido existente, sino entregarle al sistema operativo la orden de “reproducir” y éste, a través de drivers provistos por el fabricante del hardware instalado, realizará la operación. Las transiciones de nivel (desde que se pide una acción, hasta que se ejecuta una operación E/S), sólo pueden hacerse a través de puertas de tarea asignadas por el núcleo (coordinador supremo) del sistema. Ningún proceso tiene acceso directo al hardware con lo cual se evitan caídas del sistema por errores de programación (al producirse un error de programa en el nivel 3, el sistema operativo toma control, informa del error y limpia totalmente la tarea y restos de ella) Un ejemplo: en la Figura 22 podemos ver el recorrido de acciones que se van sucediendo cuando una aplicación requiere acceder a un dispositivo de almacenamiento externo (por ejemplo, un disco rígido). El acceso directo al dispositivo se produce solamente desde los procesos dentro del núcleo. Figura 22

Adquisición de Datos Placa Interna Cuando hablamos de adquisición de datos, nos referimos a tomar un valor analógico o digital (proveniente de sensores, interruptores, etc.), convertirlo a dato manipulable por la PC y almacenarlo en una dirección de memoria determinada. Si bien los sensores son externos, el dispositivo adquisidor puede ser interno (en forma de placa de expansión con entradas analógicas o digitales). Empezaremos mencionando los distintos métodos de comunicación entre el elemento adquisidor interno y la PC: • Por interrupciones: en este caso, un módulo o dispositivo (ya sea un puerto externo o elemento interno) posee cierta inteligencia que le permite informar al sistema acerca de nuevos datos entrantes. El módulo en cuestión produce una señal, el sistema operativo “interrumpe” momentáneamente sus operaciones en respuesta a esa señal ejecutando una rutina, que puede servir tanto para tomar datos de entrada como para producir una salida. • A través de Encuesta: en este caso, el sistema “consulta” al dispositivo acerca del estado de los datos, o toma directamente una lectura sin ninguna verificación. El dispositivo adquisidor adopta una actitud más bien pasiva, no reacciona a menos que el sistema

71

provoque una operación de entrada o salida. A su vez, los métodos de encuesta se pueden distribuir en dos clasificaciones fundamentales: • Utilizando de DMA: en este caso, el sistema informa al dispositivo que se prepare a entregar o recibir una cantidad determinada de datos con no más de 3 instrucciones. A partir de ese momento, el dispositivo mismo toma control del sistema, escribe o lee los datos directamente de la RAM sin intervención del microprocesador, y al terminar el volcado de memoria devuelve el control al sistema operativo. • A través de operaciones directas de E/S: este es un método más lento. A diferencia del DMA, el microprocesador tiene que realizar registro por registro las operaciones de E/S entre la memoria y el dispositivo adquisidor. Por ejemplo, supongamos que tenemos que volcar en memoria 256kbytes alojados en los registros de un dispositivo adquisidor: por cada byte transferido, el procesador primero tendría que leer cada dato del registro del dispositivo adquisidor, procesarlo y luego escribirlo en la memoria. Todo esto llevaría varias instrucciones de programa y de proceso, muchas más que con DMA, pero nos permitiría ir evaluando dato por dato antes de escribirlo a memoria (con DMA primero volcamos a memoria, luego trabajamos con los datos transferidos) Instantáneamente surge una duda, ¿como hacemos para implementarlo?. Hemos visto lo simple que es programar microcontroladores (el assembler de PIC pinta feo de lejos, pero al aprenderlo nos damos cuenta que con unas pocas líneas podemos armar una buena secuencia de automatismo). En este caso, es un poco más complicado: cualquier proyecto de E/S utilizando los sistemas operativos Linux o Windows no es tarea fácil... demanda conocimientos de programación que exceden el básico y requiere conocimientos de drivers y programación.

Adquisidor Externo Según la aplicación, los dispositivos adquisidores pueden considerarse como “cajas negras” externas, conectadas a los sensores e interruptores pon un lado, y a un puerto externo de la PC por el otro. Este tipo de elementos nos da gran portabilidad, ya que no necesitamos desarmar la PC para trasladar el elemento adqui-

72

sidor. Los sistemas operativos actuales ofrecen librerías o al menos nos dan la posibilidad de trabajar con los puertos a través de drivers provistos por el sistema. Uno de los protocolos más definidos por la diversidad de aplicaciones es el RS-232 (o puerto serie), presente en muchos PLCs y Dataloggers. Como vimos, las Aplicaciones entran dentro del modo Usuario y se comunican con el hardware a través de drivers y llamadas al sistema, los cuales se regulan por restricciones y prioridades. Cada uno de los sistemas vistos tiene sus peculiaridades con respecto a la E/S directa. • Si bien DOS es el único sistema de los mencionados que soporta E/S directa, se considera obsoleto por la comunidad informática en Gral. • Windows en forma nativa no soporta E/S directa desde una aplicación. • Linux soporta E/S directa desde una aplicación, pero solamente si el que ejecuta esa aplicación tiene privilegios de root (administrador de sistema). También vimos que hay distintas maneras de comunicarse con una placa conectada a la PC usando Interrupciones, DMA y E/S. Pero lo que no aclaramos fue que todos estos tipos de transferencia requieren en algún momento E/S directa, tanto para programar el controlador de DMA, como el de Interrupciones.

E/S en DOS Las PCs recién adoptaron las características de seguridad y enfoques de capa de usuario y de Kernel a partir de la década del 90, con el surgimiento de Linux y las versiones de Windows NT (que requerían una mayor estabilidad que las versiones hogareñas de Windows). Por este motivo, cualquier lenguaje de programación de alto nivel que corra en DOS soporta E/S directa. La industria nos ha llevado a ir escalando los sistemas operativos y entornos más amigables, más tareas simultáneas, desechando lo anterior. De todas maneras, este tipo de lenguajes y plataformas. puede ser bastante útil para tareas didácticas, ya que con pocos conocimientos de programación y con computadoras

de bajas prestaciones, se pueden realizar numerosos proyectos que pueden llegar a ser vistosos, no tanto por los colores de ventanas vistas en pantalla, sino por los elementos controlados. Esto puede posibilitar que muchas escuelas con escasos recursos puedan aprovechar equipos antiguos para diseño de proyectos de E/S. Si poseemos una versión de DOS viejita, podemos llegar a encontrar BASICA y GW-BASIC, variantes del lenguaje de programación BASIC. A partir de MSDOS 5.0 y hasta Windows 95 inclusive se incluyó el QBASIC (basado en el QuickBasic 4.5, pero sin compilador). Tanto QBASIC como BASICA y GW-BASIC son sólo intérpretes (son siempre necesarios para ejecutar los programas). Microsoft dejó de proveer el QBASIC en las versiones siguientes de Windows. QBASIC nos provee dos simples instrucciones: • INP(Puerto): devuelve un byte (8 bits) desde un puerto de E/S • OUT Puerto, dato:. envía un byte a un puerto de E/S.

Recuadro 1 DEFINT A-Z Cuenta=5000 CLS PRINT “Secuencia de Luces” PRINT “Pulse una tecla para terminar...” DO FOR I = 0 TO 7 Salida = 2 ^ I OUT &h378,Salida Retrasa Cuenta NEXT FOR I = 6 TO 0 STEP -1 Salida = 2 ^ I OUT &h378,Salida Retrasa Cuenta NEXT LOOP UNTIL INKEY$”” END SUB Retraso (Ciclos%) FOR P% = 0 TO Ciclos NEXT P% END SUB

Figura 23

73

Se debe aclarar que se ha tomado la dirección &H378 (correspondiente al Licencia y Código Fuente LPT1). Según la configuración de su sisIO.DLL es completamente gratis! Sin embargo, usted no podrá: tema, puede ser que el puerto paralelo • Cobrar esta librería de ninguna manera. Por ejemplo, usted no puede donde se conectan los led responda a venderla como un producto individual. • Esconder la IO.DLL detrás de un control OCX (utilizado por los lengua- la citada dirección o que deba camjes de Microsoft) o control Delphi. Esto tambien se considera como “trabajo biarse por &h278 o &h3BC (esta última derivado” y también debe proveerse gratuitamente. dirección era muy utilizada en las PCs • Asumir la propiedad intelectual. que tenían placa de video con puerto El autor no se hace responsable de las consecuencias de usar IO.DLL. paralelo incluido). En caso de no saber No se ofrecen garantías. El código fuente está disponible por u$s1000 (sí, mil!) dólares. El autor cuál es la dirección que corresponde a ofrece también la posibilidad de hacer una adaptación “a medida” en el caso nuestro puerto, no rompemos nada con de que algún usuario la requiera (con su tarifa, claro). intentar ver cuál de las tres funciona, ya que son direcciones destinadas especíDentro del Recuadro 1 podemos ver un simple ficamente a estos puertos. Escribir en ellas no provocaejemplo donde a través de un programa en QBASIC rá ningún conflicto con ningún otro elemento de hardya través del puerto paralelo hacemos una secuencia ware conectado. de luces tipo “Auto Fantástico”. En la figura 23 vemos una de tantas implementacioEn este ejemplo definimos una variable Cuenta, ésnes circuitales que puede utilizarse para demostrar esta nos permite acomodar la velocidad en que se desplate ejemplo, en este caso colocamos un buffer 74LS244 zan los leds a través de la subrutina Retraso, cuya únipara protección del puerto. ca función es hacer que el programa pierda tiempo de Los 5V que alimentan este circuito integrado puela misma manera que podríamos poner varias instrucden obtenerse de la misma fuente de alimentación de ciones NOP en un programa de un PIC. la PC a través de cualquiera de los cables rojos que aliSe incluyen dos bucles FOR que determinan el desmentan a los discos rígidos, disqueteras o lectoras de plazamiento del bit que enciende cada led desde un CD-ROM. extremo hacia el otro y un bucle exterior que finaliza Algo muy importante: para evitar daños, no olvide cuando se presiona una tecla, terminando el programa. verificar el circuito antes de conectarlo al puerto. Recuadro 2

Tabla 1 - Instrucciones provistas por IO.DLL Instrucción PortOut PortWordOut PortDWordOut PortIn PortWordIn PortDWordIn SetPortBit ClrPortBit NotPortBit GetPortBit RightPortShift LeftPortShift IsDriverInstalled

Uso Escribe un byte al puerto especificado Escribe una palabra (de 16 bits) al puerto especificado Escribe una palabra doble (de 32 bits) al puerto especificado Lee un byte del puerto especificado. Lee una palabra (16 bits) del puerto especificado Lee un palabra doble (32 bits) del puerto especificado Setea en 1 el bit especificado del puerto indicado Setea en 0 el bit especificado del puerto indicado Invierte el estado del bit especificado del puerto indicado Lee el estado del bit especificado Provoca una rotación a la derecha del contenido del puerto haciendo que LSB pase a MSB Provoca una rotación a la izquierda el contenido del puerto haciendo que MSB pase a LSB Devuelve un valor distinto de 0 si la DLL está cargada en memoria

NOTA: LSB=Least Significative Bit (Bit Menos Significativo) MSB=Most Significative Bit (Bit Más Significativo)

74

E/S directa con Windows Windows 95/98 tiene una cierta permisividad sobre las operaciones de E/S directas desde aplicaciones, aunque esto es aplicable sólo en algunas versiones de lenguajes de programación. (por ejemplo se puede hacer un “artilugio” para tener E/S desde una aplicación realizada en Delphi 1.0, pero no se puede con la versión 2.0). Además, este tipo de operaciones E/S requiere un poco de conocimientos de assembler de 80x86, complicando más la tarea de programación. A partir de Windows NT y sus sucesores (2000 y XP) el criterio de E/S es mucho más estricto, implementaciones de E/S que funcionan en Windows 95/98 probablemente no funcionen en Windows 2000/XP, salvo que sean implementadas a través de drivers (programables a través del Microsoft DDK, que junta 2 características problemáticas: caro y difícil para el programador principiante) IO.DLL: un recurso más que útil Aplicaremos una librería externa(IO.DLL) diseñada por Fred Bulback, un programador independiente, totalmente ajeno a Microsoft (podemos ver su página http://www.geekhideout.com). Esta librería permite desarrollar aplicaciones que funcionen desde Windows 95 hasta Windows XP, pasando por todas las versiones intermedias. Es muy versátil y provee varias funciones que facilitan la tarea de Entrada-Salida, no

se necesitan conocimientos de assembler. Sólo se requieren conocimientos mínimos de algún lenguaje de alto nivel como Visual Basic, C, o Delphi. El autor especifica claramente en su página cuales son los límites de utilización, los conceptos básicos legales se pueden observar en el Recuadro 2. En la tabla 1 vemos las instrucciones provistas por IO.DLL

Un Ejemplo en Visual Basic A modo de ejemplo, veremos cómo realizar E/S en Visual Basic a través de IO.DLL. Para poder utilizar esta librería basta con copiar el archivo IO.DLL en la carpeta donde está el programa en desarrollo y agregar en un módulo BAS las siguientes declaraciones: vea el cuadro 3. Si bien es un ejemplo que puede parecer bastante tonto, se quiere mostrar que con pocas líneas de programa podemos lograr respuestas por parte del hardware a través de eventos ocurridos en la PC. De la misma manera, a través de las funciones de entrada PortIN y PortWordIN, podríamos guardar el contenido del puerto en una variable para su manipulación y posible emisión de una nueva salida. Con conocimientos mínimos de cualquier lenguaje de programación podríamos adaptar el ejemplo en DOS para utilizarlo en Windows, ya que existe la instrucción OUT de Qbasic y el PortOut de IO.DLL son similares, así como también hay similitud entre la función INP de Qbasic y su correspondiente PortIN de la libre-

Recuadro 3 Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte) Private Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer) Private Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long) Private Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte Private Declare Function PortWordIn Lib "IO.DLL" (ByVal Port As Integer) As Integer Private Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long Private Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) Private Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) Private Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) Private Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) As Boolean Private Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean Private Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean Private Declare Function IsDriverInstalled Lib "IO.DLL" As Boolean

75

Asumiendo unos conocimientos mínimos de Visual Basic, agregamos un Evento que se ejecuta al momento de cargar el programa: Private Sub Form_Load() PortOut &H378,0'Pone todas las salidas en el puerto paralelo en 0 End Sub Ahora, supongamos que agregamos un botón de comando (similar a los botones de una ventana del tipo “OK”,”Aceptar” o “Cancelar”). Queremos colocar una salida determinada en el puerto paralelo después de hacer click en un botón llamado “Setear” y otro llamado “Resetear”. Entonces, generamos dos botones de Comando (estamos suponiendo conocimientos básicos de VisualBasic) y luego tipeamos: Private Sub Setear_Click()

'Relacionada al evento de hacer “click” sobre el botón Setear

PortOut &H378,255

'Coloca todos los bits de datos del puerto paralelo (D0-D7) en 1

End Sub Private Sub Resetear_Click()

´Relacionada al evento de hacer “click” sobre el Resetear

PortOut &H378,0

'Coloca todos los pines del puerto paralelo en 0 (leds apagados)

End Sub

ría de Fred Bulback. Si hablamos del puerto paralelo, podremos encontrar mucha información en la web referida al tema con proyectos relacionados al control desde PC de montajes electrónicos. En el Recuadro 3 encontraremos varias direcciones útiles con implementaciones interesantes a través del puerto paralelo en otros lenguajes de programación. Ojalá que este tema sea disparador de grandes ideas,

76

De esta manera damos por finalizada esta obra aclarando que al momento de escribir erstas líneas estamos preparando otro tomo de la colección del C lub Saber Electrónica destinado a explicar diferentes sistemas de adquisición de datos y manejo de circuitos a través de los diferentes puertos de la PC. ¡Hasta la próxima!