Proyecto Instrumento de Medida, parte 2. (Control del hardware. Recursos avanzados)

                                    (Este enunciado será explicado en la primera clase que corresponda a cada grupo)

Objetivos

          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 Software: Diseño del Driver.

A lo ya descrito en la práctica anterior se le puede añadir el siguiente documento: diseño driver (versión pdf).

Descripción Hardware: Detalles del circuito externo para la captura de datos.

Datos sobre el PCB, ¡¡ constrúyaselo usted mismo !!      new

El esquema eléctrico del sistema de captura de datos de 4 canales propuesto, que el alumno debe montar, se muestra a continuación.

Esquema electrico
Figura 1. Esquema del sistema de adquisición de datos.

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:

potenciometro
Figura 2. Generador de una señal analógica entre 0 y 5 voltios

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:

Fuente 5 v.
Figura 3. Fuente de alimentación de 5 voltios regulada

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 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
Figura 2:
Potenciometro miniatura de 10K, para soldar, de ajuste vertical
(tantos potenciometros como canales se quieran activar a la vez)
Figura 3:
Ce: Condensador electrolítico de 100 µF, 16v
Cs: Condensador electrolítico de 10 µF, 16v
Regulador de 5 voltios LM7805 o equivalente
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:

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).
adc_wr
Figura 2. Diagrama de tiempos para el comienzo de la conversión
  
adc_rd
Figura 3. Diagrama de tiempos para la lectura del dato

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:

1.- Usando el RTC, hacer un programa que saque en la esquina superior derecha el carácter "7" cuyo color vaya cambiando de forma cíclica cada 500 msegundos.
2.- Hacer residente el programa anterior
3.- Encender y apagar un diodo led cada segundo, conectado al puerto paralelo de la siguiente manera:

pin 2 conector pto paralelo     o---------|>|-----/\/\/\/\--------o    pin 18 conector pto paralelo.    (R=220 ohmios )



Metodología de diseño

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)


Página editada y mantenida por Guillermo Glez. de Rivera
  Volver atrás