Puerto Paralelo

INTERFAZ ENTRENADORA DE PUERTO PARALELO PRESENTADO POR: DEVIER LOPEZ CASTRO CESAR HERNANDEZ LUIS MADERA MUNERA PRESENT

Views 139 Downloads 10 File size 277KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

INTERFAZ ENTRENADORA DE PUERTO PARALELO

PRESENTADO POR: DEVIER LOPEZ CASTRO CESAR HERNANDEZ LUIS MADERA MUNERA

PRESENTADO A: ING. TULIO BOHORQUEZ

UNIVERSIDAD DE SUCRE FACULTAD DE INGENIERIAS PROGRAMA DE TECNOLOGIA EN ELECTRONICA SINCELEJO – SUCRE 2011

SISTEMA DE ELECTRÓNICA UTILIZANDO LA ESTRUCTURA INTERNA DE UN MICROPROCESADOR.

La arquitectura de un procesador describe sus estructuras internas y cómo funcionan. Éstas son estructuras lógicas; todos los procesadores son hechos de material semiconductor, y es el cómo este material es estructurado lo que determina cómo trabajará el procesador. Esto es similar al software: todo software simplemente es una cadena larga de unos y ceros, pero es el cómo se diseña y ponen estos bits lo que determinan si el software es bueno o no. Los procesadores son de alguna manera “cajas negras”. Todos realizan la misma función básica (viéndolo desde el exterior): procesan las instrucciones. De hecho, las instrucciones que soportan, por lo menos en el mundo de las PCs, no han cambiado mucho en los últimos años. Pero en el interior de los procesadores, la forma en que éstos ejecutan las instrucciones se vuelve cada vez más complicada y poderosa. Además de mejorar el rendimiento por medio de la "fuerza bruta" (aumentando las velocidades de reloj) los fabricantes de procesadores han encontrado maneras innovadoras de aumentar más el rendimiento de cada ciclo del reloj. Por ejemplo, el Intel 486DX-25 tiene dos veces el rendimiento del Intel 386DX-25, aunque los dos funcionan a la misma velocidad de reloj. La mejora en el rendimiento del 486 se debe a los avances en la arquitectura interna. La arquitectura interna tiene un impacto en qué tan rápido, el procesador, puede funcionar. Ya que cada vez es más difícil diseñar circuitos que puedan funcionar en cantidades más pequeñas de tiempo. El crear procesadores que puedan funcionar a velocidades mayores hace necesario no sólo cambiar las características físicas, sino también su diseño lógico interno. Esta sección discute los diferentes componentes que constituyen la estructura interna del procesador moderno. Como cualquier pieza compleja de un equipo, el procesador se divide internamente en partes funcionales diferentes. La mayoría de los diseños del microprocesador dividen su circuitería lógica interna en cuatro partes funcionales: los registros internos del procesador, la unidad de entrada-salida “E/S” o BIU (Bus Interface Unit), la unidad de control, y la unidad lógico aritmética (o ALU por sus siglas en inglés, Aritmetic Logic Unit). A los registros internos, al ALU y a la unidad de control en común se les llama unidad central de proceso (o CPU por sus siglas en inglés, Central Processing Unit), aunque a menudo el término CPU se utiliza como sinónimo para el microprocesador entero. Otro sinónimo para el CPU es Unidad de Ejecución, que por lo regular se utiliza dentro de los diagramas de bloques de los procesadores.

Algunos fabricantes de chips subdividen estas unidades, les dan otros nombres, o incluyen más de una de cada una en un microprocesador determinado. En cualquier caso, las funciones de estas cuatro unidades son una parte inherente de cualquier microprocesador. Las cuatro partes del microprocesador interaccionan juntas. En todos, pero principalmente en diseños simples de microprocesadores, la BIU está bajo el control de la unidad de control, y la operación de la unidad de control es determinada por los resultados de los cálculos de la ALU, la cual toma los datos de los registros internos del procesador. La combinación de las cuatro partes determina la potencia y el desempeño del microprocesador. Cada pieza del microprocesador también tiene su propio efecto en la velocidad de procesamiento del sistema. La unidad de control opera el reloj interno del microprocesador, y determina la razón de tiempo a la que el microprocesador opera. La BIU determina la anchura del bus del microprocesador, que influye en la velocidad para que los datos y las instrucciones se puedan mover dentro y fuera del microprocesador, los registros internos determinan cuántos datos puede manejar el microprocesador a la vez, y el ALU es la que realiza todos los cálculos aritméticos y decisiones.

PUERTO PARALELO: ADQUISICIÓN, PROCESAMIENTO Y ACTUACIÓN DE DATOS

Dos medios para conseguir esta conexión de un PC con un dispositivo externo son mediante el puerto RS232 (comúnmente conocido como "serie") o el puerto paralelo. De este último trataremos en el informe. Externamente su apariencia es la siguiente: La relación de los pines es la siguiente (x * significa lógica negativa): 1 - STROBE *

5 - D3

2 - D0

6 - D4

3 - D1

7 - D5

4 - D2

8 - D6

9 - D7

14 - AUTO FEED *

10 - ACK*

15 - ERROR *

11 - BUSY*

16 - INIT *

12 - PE

17 - SLCT IN

13 - SLCT

18 a 25 - GND

Ahora bien, todos estos pines no se controlan con un mismo registro de datos sino que un mismo puerto (LPT1, LPT2, etc.) tiene 3 registros para poder ser controlado; a saber: Enviar Datos, Inicializar Dispositivo y Entrar Datos. Para acceder a los tres registros de cada puerto, nos referiremos a cada registro con una dirección de memoria implícita que fija la BIOS al arrancar el ordenador. Sería conveniente disponer de un algoritmo que nos informase de la dirección de memoria de cada uno de los tres registros, ya que cada máquina es distinta de otra, aunque aquí comentaremos las más usuales. Pero comentemos cada registro con detalle:

ENVIAR DATOS Es quizás la función más conocida del puerto. Este registro controlará los pines de 2 a 9, que son la línea de datos de D0 a D7. El registro que lo controla es el siguiente: Primer registro de un puerto paralelo Este es un registro de Solo Escritura, es decir solo nos servirá para enviar datos a un dispositivo externo y nunca para recibirlos, y estos datos serán enviado de byte en byte. Las direcciones más habituales son: LPT1 = 378 h , LPT2 = 278 h (direcciones en hexadecimal).

RECIBIR DATOS Después de intensas pesquisas hemos descubierto cómo hacer que un PC reciba datos de un dispositivo externo. Veamos primero el registro que lo controla: Segundo registro de un puerto paralelo Este es un registro de Solo Lectura, es decir solo nos servirá para recibir datos de un dispositivo externo y nunca para enviarlos, este registro es únicamente

modificable desde el exterior y por hardware. Ahora bien, la recepción de datos ya no es tan evidente como el envío, ya que en el tiempo que se instituyó la norma del puerto no se pensó en que el dispositivo externo enviase datos al PC y solo dotó de 5 pines al puerto para recibir datos del dispositivo externo. Vemos que al disponer de solo 5 pines de entrada, nos es imposible hacer que el PC reciba todo un byte completo a la vez desde el dispositivo externo. Por eso, lo que se suele hacer normalmente es usar un pin que haga las funciones de control, como por ejemplo BUSY *, que por cada flanco de subida o bajada el PC interpretara que el dato a su entrada es válido, como muestra la siguiente figura: Cronograma De esta manera, en cada ciclo el PC recibe un Nibble del dato, por lo que se tarda dos ciclos en recibir un byte. Además hemos de tener en cuenta el tiempo t1 (tiempo que tarda el dispositivo externo en cambiar los datos en sus salidas al PC) y el tiempo t2 (máximo tiempo que puede tardar el PC en "recoger" el dato). Las direcciones de memoria más usuales para este segundo registro son: LPT1=379 h , LPT2 = 279 h. * CONTROL DE DISPOSITIVO La estructura del registro es la siguiente: Cronograma Este registro es usado principalmente para el caso concreto donde el dispositivo externo es una tarjeta, aunque hay algún pin que nos servirá, como ya veremos en la descripción de las pines. Este registro, contrariamente a los anteriores, es de Modo Lectura/Escritura y las direcciones más usuales para direccionarlo son: LPT1= 37A h, LPT2 = 27A h.

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

BIT 7

BIT 6

BIT 5

BIT 4

BIT 3

BIT 2

BIT 1

BIT 0

DB25

Pin 9

Pin 8

Pin 7

Pin 6

Pin 5

Pin 4

Pin 3

Pin2

CN5

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

CN4

No usar

HP 6

HP 5

HP 4

HP 3

HP 2

HP 1

HP 0

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

BIT 7

BIT 1

BIT 0

DB 25 No usar Pin 10 Pin 12 Pin 13 Pin 15 No usar No usar

No usar

CN6

No usar

No usar

BIT 6

BIT 5

BIT 4

BIT 3

BIT 2

Input 3 Input 2 Input 1 Input 0 No usar No usar

DESCRIPCION DE PINES DE PUERTO PARALELO

La siguiente descripción de cada una de las pines está comentada desde el punto de vista en que el dispositivo externo es una tarjeta de adquisición de datos: * STROBE * (pin 1) Cuando esta línea está activa a 0, está señalizando a la tarjeta que hay un carácter correcto a la salida del puerto. Pero esta señal debe desaparecer inmediatamente para que la tarjeta no lea el carácter dos veces. * D0 a D7 (pin 2 a 9) Como ya se ha comentado anteriormente son las 8 líneas de datos del registro de salida. * ACK * (pin 10) Esta señal de Acknowledge (reconocido) es de entrada y la da la tarjeta al PC para comunicarle que ha recibido el dato enviado correctamente. * BUSY * (pin 11) Es una línea de entrada que da la tarjeta para indicar al PC que está busy (ocupada) para evitar que el PC le envíe mas caracteres. Habitualmente la tarjeta usa este recurso justo después de reconocer STROBE, para poder procesar el dato enviado con calma. * PE (pin 12) En un dispositivo que no fuese una tarjeta, ambas señales podrían ser tratadas como diversos niveles de error del sistema.

* SLCT (pin 13) Esta señal corresponde normalmente al interruptor ON-LINE de la tarjeta, para que el usuario pueda deseleccionarla. * AUTO FEED * (pin 14) Esta señal indica a la tarjeta mediante un "1" si ha de enviar automáticamente un LINE FEED después de cada CARRIAGE RETURN (código ASCII nº 13). Esto significa que si debe avanzar una línea después de cada retorno de dato, ya que hay tarjetas que de no hacerlo así machacarían una línea tras otra. * ERROR * (pin 15) Como ya se ha comentado antes, este es un error irrecuperable, y suele ser debido a fallos de transmisión y recepción u otros más graves. * INIT * (pin 16) Con esta línea el PC tiene la posibilidad de realizar un RESET o inicialización a la tarjeta. Este bit debe cargarse con 0 brevemente para volver a cargarlo inmediatamente con un 1, ya que si no la tarjeta realizaría un reset tras otro indefinidamente.

* SLCT IN (pin 17) Mediante esta línea el ordenador puede poner a la tarjeta en modo Off-Line y realizar pausas. Esta línea debe de estar normalmente a 1. * GND (pin 18 a 25) Terminal de masa o tierra.

LA MAGNITUD DE ENTRADAS/SALIDAS

Debemos tener en cuenta que las entradas y salidas del puerto se rigen por señales TTL, es decir un "1" equivale a +5 V. Los circuitos integrados internos de la controladora del PC suelen ser buffer TTL o UART, y hemos de vigilar muchos cortocircuitos o entrar y sacar señales por los pines inadecuados, que conducirían a la destrucción de la placa controladora. De ahí la importancia de aisladores eléctricos.

LA PROGRAMACIÓN DEL PUERTO PARALELO

Lo que se suele hacer normalmente es programar con un lenguaje de alto nivel normalmente, pero incluir pequeñas rutinas en ensamblador para leer y escribir en el puerto. De esta manera conseguimos realizar estas operaciones de lectura/escritura con mucha más rapidez que si utilizáramos una instrucción específica para ese lenguaje. * Ensamblador Para escribir en el puerto utilizaremos las siguientes rutinas: mov al,valor mov dx,PortSal out dx,al De esta manera, colocamos el valor a sacar en el registro AL, y la dirección del registro de salida correspondiente en DX, llamando seguidamente a la instrucción OUT. Algo similar ocurre a la hora de recoger datos: mov dx,PortEntr in al,dx De esta manera recogemos el estado del registro de entrada del puerto PortEntr en el registro AL. * Pascal Para conocer la dirección de memoria de los 4 puertos, una función útil es la siguiente: { Entrada: NUM = Número del puerto paralelo }

{ Salida :TRUE, cuando paralelo } { Var. globales: Port1, Port2 } { Info: Las direcciones de base de hasta 4 puertos paralelos } { se encuentran en las cuatro palabras de memoria } { comenzando en 0040:0008 } function DirPort( Numero: integer ): boolean; begin if ( Port1 0 ) then begin Port2 := Port1 + 1; GetPortAdr := TRUE; end else DirPort := FALSE; end; De esta manera leemos las 4 posiciones de base de hasta 4 puertos paralelos que se encuentran en las 4 palabras de memoria comenzando en 0040: 0008. Para entrar y sacar datos lo haríamos con una llamada a las rutinas en ensamblador comentadas anteriormente.

INTERFAZ PARA EL PUERTO PARALELO: PROYECTO

Todos los puertos de la PC son de tipo llamado multimodal configurados por la BIOS de la máquina. Opciones de trabajo son Modo Normal (SPP), Modo Bidireccional, EPP y ECP. En este proyecto lo trabajamos en modo Normal (SPP) por ser el más elemental y el que nos provee lo necesario para nuestro estudio permitiendo la escritura (salida de datos) en los pines 2 al 9 del conector DB-25 del puerto paralelo. La facilidad en el manejo del puerto es que se puede controlar todo tipo de dispositivo electrónico o eléctrico si sabemos extrae los datos TTL que se

obtienen, pero, también debemos saber cómo extraerlos porque el puerto paralelo se puede dañar y dejar daños irreparables en la Tarjeta Madre, se debe proteger el puerto paralelo adecuadamente para no tener que comprar una nueva PC, el hardware del puerto paralelo está muy limitado en cuanto a su capacidad de manejo de corriente y debemos cuidar la elevación de la misma. Para nuestra interfaz usamos el integrado 74LS04 que ayuda a aislar el puerto y no permite retorno de corriente dañina o superior a las que maneja el puerto paralelo que son unos cuantos miliamperios. Con ocho bits podemos escribir en el puerto un total de 256 valores diferentes (8 salidas TTL a 5V) cada uno de éstos representa un byte de información y cada byte puede representar una acción concreta que podemos definir de acuerdo a nuestras necesidades. Para ello fue necesario el uso de un programa que se encargara con unas librerías especificas de activar el puerto paralelo y controlar el envío de datos, este programa fue realizado por un programador de universidad tecnológica de indoamerica en plataforma java. El programa permite escribir una secuencia cualquiera de tal manera que sea posible visualizar el valor en formato binario a la salida de datos D0 a D7. Originalmente la idea era controlar el envío de datos a la interfaz mediante la programación desde el debug de Windows, desde el lenguaje ensamblador para entender mejor el papel del microprocesador.

VISIÓN GLOBAL DE LA INTERFAZ

Es indiscutible la gran utilidad de esta interfaz como medio de estudio en diferentes aplicaciones. Una de las aplicaciones más precisas para la interfaz es el control de un servo motor por el puerto paralelo, ya que esta interfaz posee diferentes salidas que permiten controlar los tiempos y sentidos de los giros del servo.

CONCLUSIÓN

Esta interfaz es muy sencilla y útil, ya que nos permite realizar todo tipo de pruebas sin la intervención de un dispositivo electrónico más complejo como los microcontroladores. Nos a facilitado el conocimiento de los procesos que a través de la arquitectura del microprocesador podemos llevar a cabo. Podemos por ejemplo conectar un pequeño robot y tomar datos de sus sensores y analizar las decisiones a tomar mediante un programa hecho en cualquier lenguaje de PC actual.