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

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

 

Preguntas Más Frecuentes

(Última actualización: 15-12-2003.             Otras actualizaciones: 12-12-2003)


 

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

Trabajo a realizar en esta práctica.

  1. Desarrollo del driver.
  2. Modificación del programa de usuario (práctica 1 y/o 2) para el funcionamiento del generador de patrones.
  3. Implementación y desarrollo del hardware del analizador lógico, generador de patrones, diseño bajo test y generador de reloj externo.

1 Desarrollo del driver. Las especificaciones del driver se definieron en la práctica anterior. Se trata de un programa residente que, básicamente, servirá de puente entre la aplicación de usuario y el hardware externo. Dentro del diseño del driver están involucradas tres interrupciones cuyas rutinas de atención son las que componen dicho driver:

Además de las rutinas involucradas en la atención a las interrupciones descritas anteriormente, el driver dispondrá de una zona de memoria compartida, en la que estarán el buffer de datos leídos y algunas variables.


2 Generador de Patrones. El generador de patrones está basado en un fichero de datos en binario, en el que se encuentran almacenadas de manera consecutiva una serie de muestras (números de 8 bits) que posteriormente serán escritas al exterior por medio del registro U5 mostrado en el esquema eléctrico. Se deberá modificar la aplicación de usuario de manera que pida el nombre de un fichero de muestras, en el caso de querer utilizar este servicio. El tamaño máximo de este fichero será de 4 Kbytes. Tras introducir el nombre del fichero, el programa irá leyendo los datos de dicho fichero y los irá almacenando en un buffer interno a la aplicación de usuario. Al finalizar ya se podrá saber el tamaño del fichero, ese tamaño se escribirá en las dos primeras posiciones del buffer donde se ha almacenado dicho fichero. De esta manera, cuando el driver empiece a leer las muestras podrá saber el tamaño del buffer y podrá parar cuando se acaben los datos o bien podrá comenzar de nuevo con el primer dato.

Una vez que se ha decido utilizar también el generador de patrones, tras configurar el equipo (canales, tiempos, disparo) y tras cumplirse la condición de disparo (si existe) el funcionamiento del conjunto analizador lógico-generador de patrones es el siguiente: el driver lee la primera muestra y la escribe en el puerto paralelo, y a continuación el driver lee del puerto paralelo los canales del analizador lógico. En el siguiente instante de muestreo se lee una nueva muestra, se escribe y se lee del puerto. Esta operación se repetirá hasta terminar con todas las muestras, en cuyo caso se deberá parar el proceso y mostrar el resultado de la captura.

Descripción detallada de cómo obtener las muestras para ver el funcionamiento del contador incluido en el diseño hardware, pulsar aquí. Hoja de datos del 74LS191 (pdf)

Para crear un fichero de muestras no se puede utilizar un editor de textos, pues lo que almacena es el código ASCII de lo escrito. Hay que utilizar un editor binario o bien crear un fichero desde un programa escrito en C directamente cuyo último carácter será el de fin de fichero. De manera un tanto "peculiar" se puede editar un fichero binario desde un editor tipo Notepad escribiendo cada número como ALT+número del teclado numérico extendido, excepto para el número 0. En la pantalla aparecerá el código ASCII, que podrá ser cualquier cosa.

Varios ficheros de ejemplo: Patrones de test de un contador tipo 74HC191 (el descrito en el punto 3). 

 


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

Datos sobre el PCB, ¡¡ constrúyaselo usted mismo !!   
El uso de este PCB no es obligatorio, cada alumno lo puede montar como quiera/pueda (cableado, wrapping, placa de pruebas, etc)

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

Figura 1. Esquema del sistema de adquisición de datos. (Versión pdf)

El circuito consta de dos partes bien diferenciadas: la entrada de datos del analizador lógico y la salida de datos del generador de patrones. En el modo de Analizador Lógico los datos se entregan al puerto paralelo a través de un buffer, U3 (74HC541). En un ciclo de lectura de datos del puerto paralelo las puertas U1A y U2A activan la señal Data_RD, lo que permite que pasen los datos desde el exterior hasta el bus de datos del pto. paralelo, a través de U3. Por trabajar en el modo EPP esta operación se realiza en un sólo ciclo de lectura del puerto.

En cuanto al generador de patrones el funcionamiento es similar. En un ciclo de escritura de datos del puerto la puerta U2B genera la señal de carga del registro U5 (74HC574), lo que permite que el dato que se desea generar sea cargado en el registro, quedando accesible desde el exterior.

El inversor U1B genera la señal de aceptación de operación por parte del periférico.

En los terminales TP1 a TP18 se soldarán unos cables terminados en conectores o pinzas, los cuales se colocarán en los puntos del circuito que se desean medir o excitar respectivamente.

Para probar el correcto funcionamiento del diseño se puede conectar el equipo a un circuito conocido, o bien, se propone al alumno que monte el siguiente circuito, que consta de un contador ascendente/descendente. Esta parte del diseño no pertenece al funcionamiento en sí del analizador, pero permite probarlo de una manera muy sencilla y cómoda.

Las entradas del contador se conectan al generador de patrones y las salidas al analizador lógico. Mediante el envío de la secuencia de datos pertinente se leerán las salidas para comprobar el correcto funcionamiento del contador. (Hoja de datos del 74HC190/191)


Figura 2. Circuito de prueba, contador ascendente/descendente

Los terminales de J5 permiten seleccionar la señal de reloj que hace avanzar o retroceder al contador. Si se inserta un jumper entre los pines 1 y 2 la señal de reloj vendrá del generador de patrones y si se inserta en los pines 2 y 3 será una señal externa.

Como generador de reloj externo se propone el siguiente circuito:

Figura 3. Generador de la Señal de Reloj Externo

El circuito está basado en el integrado 74HC4060. Consta de un oscilador y un divisor de 14 etapas. Mediante el cristal externo Y1 genera una señal cuadrada de la misma frecuencia e internamente la divide sucesivamente, lo que permite disponer de diferentes frecuencias, sin más que seleccionando la que queramos mediante un jumper en J2. Notar que no están disponibles las salidas Q0 a Q3 ni la Q10. El conector J6 permite seleccionar la fase del reloj. Esto es útil porque podemos utilizar una fase como reloj de nuestro sistema digital y la otra fase para reloj externo del analizador. Ese retraso permite que se estabilicen las señales y la medida se pueda hacer de manera correcta.

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 78L05 (Hoja de datos del regulador), según el esquema de la figura siguiente:


Figura 4. 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 tenéis 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 zócalo para los circuito integrados. El conector DB25 se unirá al circuito a través de un cable de 13 hilos, al menos.

Lista de componentes:

Figura 1:

C2 a C5: condensadores de desacoplo, 100 nF
U1: Inversores 74HC04
U2: Puertas OR, 74HC32
U3: Buffer 74HC541
R4,R5:1K2 1/4 W
U5: Registro 74HC574
Zócalos para los integrados anteriores
Conector DB25 macho acodado para PCB
Cable de puerto paralelo
R6,R7: 100 ohmios 1/4 w
Figura 2:
U4: Zócalo 16 pines para insertar un contador 74HC190 ó 74HC191
C1: Condensador de desacoplo, 100 nF
J5: Tira de pines 3 contactos y un jumper
Figura 3:
U9: Contador con oscilador integrado, 74HC4060
R1: Resistencia 2K2
R2: Resistencia 1M
C8: Condensador de desacoplo 100 nF
C9,C10: Condensador 27 pF
Y1: Cristal de 16 MHz
J2: Tira de pines 10x2 y un jumper

Figura 4:

C6: Condensador electrolítico de 100 µF, 16v
C7: Condensador electrolítico de 10 µF, 16v

R3: Resistencia 330 ohmios
D1: Diodo de protección 1N4001
D2: Diodo led Rojo 3 mm
Regulador de 5 voltios LM78L05 o equivalente
Conector Jack 3mm para PCB

Para el correcto funcionamiento de la práctica se debe respetar un protocolo entre el PC y el conversor. Para el desarrollo de esta práctica es necesario conocer el funcionamiento y manejo del puerto paralelo, principalmente en modo EPP:

NOTA IMPORTANTE: Para el correcto funcionamiento de la práctica el puerto de datos del puerto paralelo deberá estar configurado en modo EPP, es decir, en el set-up del PC configurar el puerto en modo EPP (los otros modos posibles son SPP o AT, PS/2 y ECP). 


 Ejercicios previos:

1.- Usando el RTC, hacer un programa que muestre 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 inversor  entre nDataStb (pin 14) y nWait (pin 11) 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