Programas residentes
Programación
de puertos de E/S
Control de puertos
definidos en el PC (ratón, impresora, RTC, etc)
Control de periféricos
hardware externos al PC
Funcionamiento
En esta parte se debe diseñar el driver y el circuito.
El driver está definido en la presentación del proyecto
y el circuito se describe a continuación.
A partir del código desarrollado para la práctica 1 se
pide desarrollar un software en ensamblador (driver) que permita
la captura de datos a través del puerto paralelo del PC y lo presente
en pantalla de igual forma que en la práctica anterior.
Descripción del circuito externo para la captura de datos.
El esquema eléctrico del sistema de captura de datos de 4 canales
propuesto, que el alumno debe montar, se muestra a continuación.
![]() |
|
El circuito convierte señales analógicas en un rango entre 0 y 5v. Como conversor AD se utiliza el circuito integrado ADC0804 de National Semiconductor. (Hoja de datos del ADC0804). La señal analógica a convertir proviene de un multiplexor analógico (Hoja de datos del mux 74HC4052). Este mux es el encargado de seleccionar el canal analógico de entrada que va a ser convertido y posteriormente leído por el driver. La selección del canal se realiza a través de las líneas Canal0 y Canal1 del esquema anterior.
Para probar el correcto funcionamiento del diseño se debe poder introducir diferentes tensiones a la entrada de cada canal, de forma que se pueda variar de manera sencilla para ver su evolución en la pantalla. Un sencillo esquema para hacer esto es utilizando un potenciometro, según el esquema siguiente:
Desplazando el cursor del potenciómetro (resistencia variable) la salida varía la tensión entre 0 y 5 voltios en función de la posición. Dicha señal se introduce en un canal del multiplexor. Una vez convertida, el valor digital es presentado en las líneas D0 a D7 y deberá ser leído a través del puerto paralelo según el protocolo explicado a continuación. Se pueden usar cuatro potenciometros, uno por canal.
La alimentación del circuito es de 5v. Para suministrar esta tensión se puede utilizar una pila de "petaca que, aunque entrega 4,5v, es suficiente. Una solución mejor es usar una fuente regulada de tensión, basada en un regulador lineal de 5 voltios del tipo 7805 (Hoja de datos del regulador), según el esquema de la figura siguiente:
La tensión de entrada se puede obtener de una pila de 9 voltios (no lo recomiendo porque se agota en poco tiempo) o bien se puede usar un transformador de los que usan los walkman, o el contestador automático que ya no funciona y lo teneis tirado, o la mayoría de pequeños equipos electrónicos que están por casa (en cualquier caso son bastante baratos, en cualquier mercadillo se pueden conseguir).
Se recomienda que el circuito sea montado soldándolo en una placa de pruebas, utilizar un zócalo para el conversor. El conector DB25 se unirá al circuito a través de un cable de 13 hilos, al menos.
Lista de componentes:
Figura 1:
R1: resistencia de 10K 1/4 WFigura 2:
R2 a R5: resistencias de 4.7 K 1/4 W
C1: condensador de 150 pF
U1: conversor AD modelo ADC0804
U2: multiplexor 74HC4052
U3: Inversores 74HC04
Zócalos para los integrados anteriores
Conector DB25 macho para soldar cable
Carcasa para el conector DB25 (opcional)
Cable de 14 hilos, mínimo, al menos 1 metro
Potenciometro miniatura de 10K, para soldar, de ajuste verticalFigura 3:
(tantos potenciometros como canales se quieran activar a la vez)
Ce: Condensador electrolítico de 100 microfaradios, 16vPara el correcto funcionamiento de la conversión se debe respetar un protocolo entre el PC y el conversor, explicado en detalle en las hojas de datos del conversor. Básicamente es el siguiente:
Cs: Condensador electrolítico de 10 microfaradios, 16v
Regulador de 5 voltios LM7805 o equivalente
El PC envía una petición de comienzo de conversión al ADC (figura 2). Para ello activar la señal #CS (poner a nivel bajo) y dentro del periodo de activación activar la señal #WR durante un mínimo de 100 ns. El conversor activará la línea #INTR (el símbolo # indica que la señal es activa a nivel bajo) para indicar que ha terminado la conversión (figura 2). A partir de ese momento el PC puede leer el dato (figura 3).
![]() |
|
![]() |
|
El proceso de lectura está representado en la figura 3. Se selecciona el conversor a través de la línea #CS y se envía un pulso negativo por la línea #RD, tras unos 200 ns (tACC: tiempo de acceso) el dato ya se puede leer y se desactiva la señal de lectura.
Estos ciclos se repetirán tantas veces como datos se quieran leer.
Para el desarrollo de esta práctica es necesario conocer el funcionamiento y manejo del puerto paralelo, por lo que se incluyen unas notas con una breve descripción: notas del puerto paralelo.
NOTA IMPORTANTE: Para el correcto funcionamiento de la práctica
el puerto de datos del puerto paralelo deberá estar configurado
en modo bidireccional, es decir, en el set-up del PC configurar el puerto
en modo PS/2 (los otros modos posibles son SPP o AT, EPP y ECP).
Para controlar la dirección que llevan los datos se utiliza el bit
de peso 5 (el 6º bit empezando por el menos significativo) del puerto
de control. Si este bit está a cero el puerto de datos es de salida
y si está a uno el puerto de datos será de entrada. En el
caso de esta práctica, este bit se puede poner a uno inicialmente.
Hay que tener cierta precaución, pues la escritura en el puerto
de datos modifica este bit a cero.
Al desarrollar el driver, el circuito puede sustituirse con un dispositivo dummy (elemento que simula la presencia de otro pero que no hace nada, en este caso un conductor entre ACK y INIT es suficiente). El método de diseño top-down no es lo mas útil posible en este caso, por la dependencia del hardware. Es muy difícil para gente sin experiencia desarrollar todo a la vez, porque cada error en la parte de las interrupciones de hardware detiene la maquina. Por tanto, sin perder de vista el método anterior, es consejable la siguiente secuencia de desarrollo:
1. Utilizando DEBUG o TASM probar el circuito, pidiendo los datos a mano o con programas muy simples.
2. Desarrollar un programa en ensamblador sin utilizar las interrupciones que pida los datos del dispositivo y se los proporcione al usuario.
3. Desarrollar un nivel falso de la interfaz del usuario (int 61h) que pide directamente del dispositivo un dato con polling.
4. Utilizando las interrupciones del dispositivo (LPT) realizar el mismo funcionamiento como en el punto anterior.
5. Desarrollar el manejo del tiempo utilizando la interrupción 70h (el tick mínimo será de 10 ms).
6. En este punto tendremos suficiente experiencia para desarrollar el driver entero.
Plazo de entrega : La presentación y evaluación de esta práctica será la semana del 10 de diciembre, según el calendario propuesto. El nombre del fichero o ficheros a entregar será de la forma parejap2.asm, por ejemplo 3a28p2.asm. Si hay más de un fichero, nombrarlo con números sucesivos y añadir un .bat que los ensamble y linke.(3a28p21.asm, 3a28p22.asm,... 3a28p2.bat)