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 Hardware: Detalles del circuito externo para la
captura de datos.
Datos sobre el PCB, ¡¡ constrúyaselo
usted mismo !!
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:
Figura 2:
R1: resistencia de 10K 1/4 W
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)
Para 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:
Ce: Condensador electrolítico de 100 µF, 16v
Cs: Condensador electrolítico de 10 µF, 16vRegulador de 5 voltios LM7805 o equivalente
![]() |
|
![]() |
|
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.
NOTA IMPORTANTE:
Debido a que en el esquema eléctrico se han unido las señales
#RD y #WR a través de un inversor, es posible que en algunos casos
haya problemas de temporización. Para solucionarlo de manera definitiva
basta con intercambiar en el cronograma de lectura las líneas
#CS y #RD, es decir, primero bajar #RD, luego #CS, subir #CS y subir #RD.
Si se quiere, esto también se puede hacer para el cronograma de escritura
(intercambiar #CS por #WR).
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.
Ejercicios previos:
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á 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)