UNIDAD : IZTAPALAPA. J, D I V I S I ~ N: CIENCIAS BÁSICAS E INGENIERÍA. v'CARRERA : INGENIERÍA ELECTRÓNICA. (COMUNICACIONES ). MATERIA : PROYECTO DE INGENIERÍA ELECTR~NICAI Y 11. J'TÍTULO : GENERADOR DE SEÑALES Y OSCILOSCOPIO IMPLEMENTADOS CON P.C. FECHA : ABRIL, 1998. ""ALUMNO: FRANCISCO LÓPEZ ESCOBEDO. MATRÍCULA : 89223 8 1O ALUMNO : VICTOR GONZÁLEZ ALMANZA MATRÍCULA : 90322828 ALUMNO : FUENTES ITURRIA JOSE JULIO MATRÍCULA : 90322626 ÍNDICE GENERAL PRIMERA PARTE. FUNDAMENTOS TEÓRICOS. 1.1 Adquisición de datos 1.2 Circuitos de muestre0 y mantenimiento 1.3 Dispositivos de memoria 1.4 El generador de señales 1.5 El osciloscopio 1.6 Convertidores digitales/analógicos 1.7 Convertidores analógico/digitales SEGUNDA PARTE. GENERADOR DE SEÑALES. 2.1 Presentación 2.2 Objetivo 2.3 Descripción de la tarjeta generadora 2.3.1 Bloque de control de frecuencias 2.3.2 Bloque de longitud de tabla de datos 2.3.3 Bloque de control de direcciones RAM 2.3.4 Bloque de control de pujo de datos 2.3.5 Bloque de conversión D/A 2.3.6 Bloque de control de buffers 2.3.7 Bloque de direccionamiento 2.3.8 Bloque de memoria 2.4 Modo de operación 2.5 Características del sistema 2.6 Diagrama de la tarjeta de expansión 19 TERCERA PARTE. OSCILOSCOPIO. 22 2.1 Presentación 2.2 Objetivo 2.3 Descripción de la tarjeta para osciloscopio 2.3.1 Bloque de control depuso 2.3.2 Bloque de tamaño de tabla de datos 2.3.3 Bloque de control de direcciones RAM 2.3.4 Bloque de control de flujo de datos 2.3.5 Bloque de conversión A D 2.3.6 Bloque de habilitación para buffers 2.3.7 Bloque de direccionamiento 2.3.8 Bloque de memoria 2.4 Modo de operación 2.5 Características del sistema 2.6 Diagrama de la tarjeta de expansión LISTADO DEL PROGRAMA DE INTERFACE 25 RESULTADOS OBTENIDOS 47 CONCLUSIONES 48 BILIOGRAFÍA 49 3 Introducción. Los sistemas digitales realizan todas sus operaciones internas en binario o bien algún tipo de código binario. Cualquier información que vaya a introducirse en un sistema digital debe ponerse en forma binaria antes de que pueda ser procesado por los circuitos digitales. Por el otro lado, las salidas de un sistema digital están en algún tipo de palabras binarias, y con frecuencia deben convertirse en una forma diferente según sean utilizadas las salidas. Muchos dispositivos se usan en los lados de entrada y/o salida de los sistemas digitales para servir como vínculo de comunicaciones con el mundo externo. Los dispositivos entraddsalida relacionados con el proceso ofrecen el medio por el cual un sistema digital monitorea y controla un proceso físico. En el lado de la entrada, las dimensiones de los parámetros del proceso que son analógicos por naturaleza son generalmente transducidos y enviados a un convertidor de analógico a digital (ADC), el cual convierte la cantidad analógica en una representación digital correspondiente. Algunos parámetros del proceso ya son digitales en naturaleza pero deben cambiarse a la forma adecuada para el sistema digital. Los dispositivos de salida relativos al proceso traducen las salidas de la computadora en las señales adecuadas de activación que se necesitan para controlar el proceso. Estas señales de activación podrían consistir simplemente en abrir y cerrar contactos de interruptores o pulsaciones de un motor de etapas. Sin embargo, muchas veces la señal activadora que se requiere debe ser analógica en naturaleza, como es el caso de un voltaje para controlar la velocidad de un motor de D.C. En estos casos, se necesita un convertidor de digital a analógico, DAC, para convertir la salida del sistema digital en la forma analógica que se pide. Por lo tanto, observamos que los ADC y los DAC funcionan como interface entre un sistema o dispositivo completamente digital, como una computadora, y el mundo analógico externo. Esta función se vuelve crecientemente más importante a medida que las microcomputadoras poco costosas entran en áreas de control de procesos donde el control de la computadora no era viable con anterioridad. En este informe se presentan circuitos propuestos como alternativas para dos de los instrumentos de medición más usados en el laboratorio de electrónica, como son el generador de funciones y el osciloscopio. Los diseños de estos circuitos tienen sus limitantes en cuanto a las frecuencias de operación de los mismos, además de la versatilidad de los instrumentos convencionales comparada con estos circuitos. La idea de estos sistemas digitales no es para sustituir por completo a los aparatos de medición comerciales, sino para mostrar una más de las aplicaciones que tienen las computadoras personales en interface con tarjetas de expansión. 4 Fundamentos teóricos. Adquisición de datos. Existen muchas aplicaciones en las cuales los datos analógicos tienen que ser digitalizados y transferidos a la memoria de una computadora. El proceso por el cual la computadora adquiere estos datos analógicos digitalizados se conoce como adquisición de datos. La computadora puede ejecutar varias tareas con los datos, según la aplicación. En una aplicación de almacenamiento analógico, como un osciloscopio digital, la computadora almacenará los datos y después los transferirá a un DAC un tiempo después para reproducir los datos analógicos . En una aplicación de control de proceso, la computadora puede examinar los datos o realizar cálculos con ellos para determinar qué salidas de control generar. Por ejemplo, la forma en que una microcomputadora se conecta a un ADC con rampa digital con el fin de adquirir datos. La computadora genera las pulsaciones “start” que inician cada nueva conversión A/D. La señal eoc (fin de conversión) del ADC se alimenta a la computadora. La computadora examina esta señal eoc para indagar cuándo se completa la conversión A/D;después transfiere los datos digitales de la salida del ADC a su memoria. Describiendo, la forma en que la computadora adquiere una versión digital de la señal analógica, va : La onda de escalinata va. que se genera interna al ADC se superpone en la onda va con fines explicativos. El proceso comienza en to cuando la computadora genera un pulso de “start” para dar inicio a un ciclo de conversión A/D. La conversión se completa al tiempo t, cuando la escalinata excede de v, , y eoc pasa a nivel bajo. Esta tsn en eoc señala a la computadora que el ADC tiene una salida digital que ahora representa el valor de v,, y la computadora cargará estos datos en su memoria. La computadora genera un nuevo pulso de “start” poco tiempo después de t, para dar inicio a un segundo ciclo de conversión. Esto vuelve a ser igual a cero la escalinata y eoc lo devuelve a nivel alto debido a que el pulso de “start” recoloca el contador en el ADC. La segunda conversión termina al tiempo t, cuando la escalinata vuelve a exceder de v, . La computadora carga después los datos digitales correspondientes en el punto b de su memoria. Estas etapas se repiten en t, , t, , etcétera. El proceso por medio del cual se genera un pulso de “start”, examina eoc y carga datos ADC en la memoria, se halla bajo el control de un programa que la computadora está ejecutando. Este programa de adquisición de datos determinará cuántos puntos de datos de la señal analógica se almacenarán en la memoria de la computadora. Circuitos de muestreo y mantenimiento. Los circuitos de muestreo y mantenimiento se utilizan para muestreo de una señal analógica en un instante dado y mantener el valor de la muestra durante tanto tiempo como sea necesario. Los instantes de muestreo y la duración de mantenimiento están 5 determinados por una señal lógica de control, y el intervalo de mantenimiento depende de la aplicación a la que se destine el circuito. Por ejemplo, en los filtros digitales las muestras deben ser mantenidas durante el tiempo suficiente para que tengan lugar la conversión analógica /digital. La mayoría de circuitos de muestreo y mantenimiento utilizan un condensador para mantener la tensión de muestra. Un interruptor controlado electrónicamente provee un medio para cargar rápidamente el condensador hasta la tensión de muestra y luego suprimir la entrada de manera que el condensador pueda retener la tensión deseada. En la práctica, los interruptores electrónicos y los condensadores no son perfectos y en ellos ocurren varias discrepancias respecto a los valores o estados ideales . Entre las especificaciones más importantes hay las de tiempo de apertura y tiempo de adquisición. Se puede explicar lo que es el tiempo de apertura refiriéndonos al tiempo de máximo retardo entre el instante en que la lógica de control ordena al interruptor que se abra y el instante en que realmente ocurre la apertura. El tiempo de apertura de un sistema determina esencialmente el tipo de interruptor que se debe utilizar. Si este tiempo es del orden de milisegundos, el interruptor puede ser un relé. Con interruptores FET los tiempos de apertura son típicamente de 50 a 100 ns mientras que con interruptores diodo muy rápidos el tiempo de apertura es mucho menor que 1 ns. A consecuencia del tiempo de apertura hay una incertidumbre en el ritmo o cadencia de muestreo que puede degradar la presentación del sistema. Ordinariamente se selecciona un interruptor cuyo tiempo de apertura sea mucho menor que la inversa del ritmo de muestreo. Como la señal de entrada cambia durante el intervalo de muestreo, transcurre una cantidad finita de tiempo antes de que la salida sea idéntica a la de entrada. El tiempo de adquisición es el intervalo más corto transcurrido desde que se da la orden o “mandato” (command) de muestra hasta que se pueda dar la orden de mantenimiento y se obtenga como resultado una tensión de salida que sea aproximadamente la tensión de entrada con la exactitud necesaria. El caso más desfavorable ocurre cuando la entrada es una función escalón cuya amplitud es igual a la máxima excursión de tensión cresta a cresta del circuito. Ordinariamente el fabricante también especifica el tiempo de establecimiento. Este es el tiempo que transcurre desde la apertura del interruptor (mantenimiento) hasta que la salida ha alcanzado su valor final, dentro de un porcentaje específico (usualmente 0.01% del valor final de la escala). Si el circuito de muestreo y mantenimiento está seguido de un convertidor A/D, la conversión no comienza hasta que la señal es estable, o de lo contrario la tensión convertida puede ser errónea. También se especifica algunas veces el ritmo de decaimiento de la salida (droop). Éste representa la variación de tensión entre las placas del condensador durante el tiempo de mantenimiento y es inversamente proporcional a la capacidad, ya que dv, í dt = i/c, donde i es la corriente de fuga del condensador. La corriente de fuga puede ser 6 consecuencia de la corriente de polarización en un operacional, la corriente de fuga en el interruptor o la fuga interna en el condensador. Los circuitos prácticos de muestre0 y mantenimiento hacen mucho uso de operacionales para obtener una baja impedancia en el circuito de excitación y una alta impedancia de carga en el condensador de mantenimiento. Estos circuitos utilizan conmutadores FET en vez de BJT a causa de la linealidad y carencia de offset en sus características de transferencia, en la proximidad del origen, donde tiene lugar la acción de conmutación. Si se requiere una velocidad extremadamente alta se utilizan puentes de diodos para la conmutación. Dispositivos de memoria. Una ventaja importante de los sistemas digitales sobre los analógicos es la capacidad de almacenar fácilmente grandes cantidades de información digital por periodos de tiempo cortos o largos. Esta capacidad de memoria es la que hace de los sistemas digitales tan versátiles y adaptables a muchas situaciones. Por ejemplo, en una computadora digital la memoria central interna almacena instrucciones que indican a la computadora qué hacer en todas las circunstancias posibles, de manera que la computadora haga su trabajo con una mínima cantidad de intervención humana. Los datos digitales también pueden almacenarse como cargas en capacitores y un tipo muy importante de memoria semiconductora hace uso de este principio para obtener almacenamiento de alta densidad en niveles bajos de requisitos de energía. Los dispositivos ofrecen todavía otro medio más de almacenamiento. En particular, las memorias con núcleo magnético se han empleado mucho desde fines de la década 1950 a pesar que las memorias MOS las han sustituido gradualmente en muchas computadoras. Las memorias semiconductoras y de núcleo magnético se utilizan como la memoria interna de una computadora, donde la operación rápida es importante. La memoria interna de la computadora está en comunicación constante con la unidad central de procesamiento (cpu) mientras se está ejecutando un programa de instrucciones. El programa y cualquier información usada por el programa generalmente están almacenados en la memoria interna. Aunque las memorias semiconductoras y de núcleo magnético se adaptan bien a la memoria de alta velocidad, su costo por bit de almacenamiento prohibe su uso como dispositivos de almacenamiento en masa. Almacenamiento en masa se refiere a la memoria que es externa a la computadora central y tiene la capacidad de almacenar millones de bits de datos sin energía eléctrica. La cinta y el disco magnéticos son dispositivos de almacenamiento en masa populares que son muchos menos costosos por bit almacenado que los dispositivos de memoria interna. Otro tipo en la categoría de memoria en masa es la memoria de burbuja magnética (mbm), dispositivo semiconductor que utiliza principios magnéticos para almacenar millones de bits en una ficha. 7 Memoria sólo para lectura (ROM): Vasta clase de memorias semiconductoras diseñadas para aplicaciones donde la proporción de operaciones de lectura a operaciones de escritura es muy alta. En términos técnicos, en una rom sólo puede escribirse (programarse) una vez y esta operación a menudo se efectúa en la fábrica. Por lo tanto la información sólo puede leerse de la memoria después de haberse programado. Este tipo de memoria se diseña con el fin de contener datos que se han permanentes o bien que no cambien frecuentemente. Durante la operación normal, no pueden escribirse nuevos datos en una Tom, pero sí puede leerse información de ella. Para algunas rom los datos que están almacenados tienen que grabarse durante el proceso de fabricación; para otras rom los datos se pueden introducir en forma eléctrica. El proceso de introducir datos se conoce como programación. ROM programable y borrable (EPROM). Una EPROM puede ser programada por el usuario y también puede borrarse y reprogramarse tantas veces como se desee. Una vez programada, la EPROM es una memoria no volátil que contendrá sus datos almacenados indefinidamente. El proceso para programar una EPROM implica la aplicación de niveles de voltaje especiales (comúnmente en el orden de 25 a 50 v) a las entradas del circuito adecuadas en una cantidad de tiempo especificada (por lo general 50 ms por localidad de dirección). El proceso de programación usualmente es efectuado por un circuito especial de programación que está separado del circuito en el cual la EPROM trabajará por Último . El proceso de programación completo puede llevar hasta siete minutos para una EPROM. Una vez que se ha programado una celda de memoria, puede ser borrada solamente exponiéndola a la luz ultravioleta (uv) aplicada a través de una ventana en el integrado. El proceso de borrado requiere comúnmente de 15 a 30 minutos de exposición a rayos ultravioleta. Las EPROM están disponibles en una amplia selección con capacidades hasta de 32k x 8 y tiempos de acceso debajo de 250 nanosegundos. Las etapas que se requieren para programar cualquier localidad de dirección son como sigue: 1. Aplicar la dirección deseada a las entradas de dirección . 2. Aplicar la palabra de datos deseada a las terminales de datos. 3. Aplicar un pulso a la terminal de habilitación del chip. 4. A fin de verificar que la palabra de datos ha sido programada de forma adecuada, la localidad de la dirección debe ser leída. El proceso de programación cuando se efectúa manualmente puede tomar horas. Se dispone de numerosos programadores comerciales de EPROM que pueden programar y verificar una memoria 2716 completa en menos de dos minutos, una vez que el usuario ha ingresado los datos en la memoria de lecturdescritura (rwm) del programador de EPROM desde un teclado. Algunos programadores de EPROM permiten que se transfieran datos en la rwm desde una computadora. Este proceso, llamado carga descendente, permite al usuario primero elaborar su programa en una computadora y después, cuando se termina y está trabajando, transferirlo de la 8 memoria de la computadora al programador de la EPROM, que lo integrará a la EPROM. Memoria de acceso aleatorio (RAM). Memoria en la cual la localización fisica real de una palabra de la memoria no tiene efecto sobre el tiempo que tarde en leer de esa localidad o bien escribir en ella. En otras palabras, el tiempo de acceso es el mismo para cualquier dirección en la memoria. El término de acceso aleatorio, quiere decir al azar, pudiendo accesar cualquier localidad de memoria fácilmente como cualquier otra. Las RAM se emplean en las computadoras para el almacenamiento temporal de datos y programas. El contenido de muchas localidades de dirección en la RAM cambiará continuamente conforme a la computadora ejecute un programa. Esto requiere de tiempos de lectura y escritura rápidos para la RAM de manera que no disminuya el tiempo de operación de la computadora. Una desventaja importante de las RAM es que son volátiles y pierden toda la información almacenada en ellas si se interrumpe el suministro de energía o si se apaga la máquina. Sin embargo, algunas RAM emplean pequeñas cantidades de energía en modo de transición (sin efectuar operaciones de lectura o de escritura) y pueden alimentarse con baterías siempre que se interrumpa la fuente de energía principal. Por supuesto la ventaja principal de la RAM es que se puede escribir en ella y también se puede leer en ella muy rápidamente con la misma facilidad. RAM Estática. Es aquella que puede almacenar datos mientras se aplica energía al circuito. Las celdas de la RAM estática son en esencia multivibradores biestables (flip-flops) que permanecerán en un estado determinado indefinidamente, siempre y cuando no se interrumpa el suministro de la energía al circuito . Las RAM estáticas se tienen a disposición en tecnología bipolar y mos, aunque la vasta mayoría de las aplicaciones hacen uso de RAM NMOS o bien CMOS. Las bipolares tienen la ventaja en velocidad (a pesar que el NMOS cierra gradualmente la brecha) y los dispositivos MOS tienen capacidades mucho mayores. EL Generador de señales. La generación de señales es una tarea importante que los Ingenieros en Electrónica necesitan a menudo llevar a cabo. Básicamente, mencionaremos algunos métodos de diseño de los generadores de ondas senoidales; el primero de ellos es la generación por medio de un oscilador no lineal, que genera formas de onda cuadrada y triangular, y la aplicación de la onda triangular a un formador de ondas senoidales, que por lo general consta de diodos y resistores. Otro camino es la construcción de circuitos de retroalimentación positiva, que consta de un circuito selectivo a la frecuencia deseada. Se diseña el circuito para que tenga una ganancia a la unidad a una sola frecuencia. Este tipo de oscilador se le llama oscilador lineal, las ondas senoidales se generan esencialmente por el fenómeno de resonancia. 9 Se designan como generadores de funciones a aquellos equipos que producen señales que pueden describirse mediante formas matemáticas simples. En ellos se busca más la versatilidad que la exactitud ofreciendo una distorsión típica de 0.25%. Las formas de onda obtenidas son: La triangular, que se emplea para medidas de nivel de disparo, estudios de linealidad, etc; la cuadrada, que se aplica, entre otras, al análisis de la respuesta transitoria; y la senoidal, que es adecuada para la obtención de la respuesta frecuencial. Los generadores mas simples constan solo de un generador principal y entradas para modulación con señales externas. Si hay modulación interna y la moduladora está disponible puede que en ella se tenga señales de frecuencia menor a las del generador principal. No suelen estar basados en los circuitos integrados LSI disponibles, porque éstos ofrecen poco margen de frecuencia y bastante distorsión. El oscilador principal produce las señales triangular y cuadrada. Consiste en un bucle de retroalimentación no lineal que consta de un integrador y un conmutador con histérisis, que compara la salida de áquel con una tensión de referencia. La frecuencia de la triangular depende de la corriente de carga y descarga de un capacitor, C, de la capacidad de éste, y de l a amplitud de la señal cuadrada. Esta última es fija, por lo que se emplean la variación de C, para seleccionar la banda (décadas), y de la corriente I, para ajustar continuamente la frecuencia, dentro de una banda. La banda total de frecuencias cubre normalmente 1 Hz a lMHz, o mas, pero hay modelos que abarcan desde 3Hz a 5OMHz. La exactitud de la frecuencia indicada por el selector suele ser baja, pero esto no importa mucho si se dispone de un frecuencímetro en paralelo. Para frecuencias muy bajas, si se empleara un integrador con condensador, que limita la frecuencia de corte inferior. Por esta razón, se emplea ahí un oscilador principal distinto, basado en un contador digital. La señal de contar/descontar (up/down) procede del conmutador con histérisis. Con este sistema, como la relación de división de frecuencias puede ser muy alta, la frecuencia de salida puede ser muy baja. El modo de funcionamiento se refiere a la cadencia de la salida: continua (free run), previo disparo (triggered), en salva (burst, gated), etc. Algunos modelos permiten iniciar y acabar la oscilación en un punto o fase determinados de la forma de onda (start/stop).Cuando no se desea una salida continua se cortocircuita el condensador del integrador. Cuando se aplica una tensión externa suficiente, se suprime el cortocircuito que se instala de nuevo siempre que la triangular haya alcanzado el nivel de final de ciclo y la entrada de control descienda por debajo del umbral elegido (burst), o bien se haya completado un único ciclo (trigger). La salida senoidal se obtiene mediante un circuito analógico no lineal, basado en diodos o transistores apareados, a cuya entrada se aplica la señal triangular. La 10 pendiente de ésta va siendo modificada por las sucesivas etapas, hasta dar una senoide aproximada. Para obtener distorsiones inferiores, hay que emplear un generador de señales basado en un oscilador de Puente de Wien o LC, en un sintetizador. Además de las formas de onda habituales, es frecuente una salida de pulsos TTL, y a veces, una salida en rampa, coseno u otras desfasadas 90 grados respecto a las principales. Para la generación de señales TTL se emplea la señal triangular para acortar mediante una compuerta AND, la duración de la cuadrada. Si, por ejemplo, se elige como umbral el 30 % del valor pico de la triangular, el pulso TTL dura un 15% del periodo. Como el flanco de subida del pulso coincide con el de la cuadrada de la salida principal, la señal TTL, se puede usar para sincronismo. Si internamente hay varias compuertas AND en paralelo, en esta salida se dispone de más corriente, y se puede atacar cargas de 50 ohms. La salida de esta etapa donde se determina la forma de onda, está, en su caso, el modulador de amplitud, basado en una señal interna (del generador de control) o externa. Los controles de frecuencia y simetría permiten ajustar, respectivamente, a la frecuencia de salida, dentro de una banda y la duración de sus semiciclos positivo y negativo. Ambos basan su acción de control de la tensión que regula las fuentes de corrriente (carga-descarga). La frecuencia de salida se puede determinar mediante un potenciómetro (ajuste fino o dial del instrumento), o bien puede hacerse variable, cubriendo todo un campo. La tensión para controlar esta variación puede ser externa o interna (entrada VCO). Para hacer un barrido interno (Sweep), el generador de control da una señal de diente de sierra que es l o que controla la frecuencia del oscilador principal. Puede hacerse un barrido lineal o logarítmico. En el p r i m caso se emplea igual tiempo en cada década, es decir, se dedica más tiempo a las frecuencias más bajas del barrido. Cuando se aplica una tensión externa a la entrada VCO (o VCF), es esta tensión junto con el dial, la que determina la frecuencia de la salida. Si la señal aplicada es una rampa, se hace un barrido. El campo de ésta puede cubrir desde 1O: 1 hasta 1000:1. En la etapa de salida se determina la amplitud de la señal y su nivel de continua. El nivel de salida mínimo es importante porque da una idea del nivel de ruido presente en ésta. Esta etapa suele estar protegida contra cortocircuitos y contra la aplicación de tensiones externas. La impedancia de salida es uno de los parámetros más importantes de los generadores, y debe ser adecuada a los circuitos donde se va a conectar. Para trabajar con señales cuadradas y pulsos, por ejemplo, suele ser necesario que sea de 50 ohms. En cambio, en sistemas de audio lo típico son 600 ohms. Existe un conjunto sorprendente de generadores de onda disponibles en la actualidad, los cuales van acompañados de variación en los precios. Es interesante comentar algunas de las características con las que el usuario potencial de un generador debe familiarizarse, pero no se debe abordar el tema en forma exhaustiva en la totalidad de su campo. 11 Cuando se ofrecen varias opciones de forma de onda, éstas, invariablemente, son producidas por una modificación adecuada de la forma de onda básica o primaria. Por ejemplo, cierto número de osciladores baratos de audio utilizan un puente de Wien. La salida, por supuesto, es una onda senoidal. Cuando se requiere tener una onda de salida cuadrada con ese oscilador, ésta inevitablemente se produce mediante una modificación apropiada de la onda senoidal. La calidad de esta forma de onda secundaria puede ser más pobre que la calidad de la forma de onda primaria, y ciertamente no puede ser mejor. También hay instrumentos que producen una forma de onda cuadrada como forma de onda primaria. La forma de onda triangular es una síntesis de la forma de onda cuadrada, como lo es una forma de onda senoidal. Con este proceso es probable que la calidad de la onda senoidal sea inferior a la de otro instrumento cuya forma de onda primaria sea una senoidal. Sin embargo, si lo que más interesa al usuario es una onda cuadrada, la pobreza en calidad de la onda senoidal es de poca importancia. Uno de los criterios más importantes para seleccionar un generador de forma de onda es su capacidad de potencia. La potencia de salida siempre se especifica para una impedancia de salida determinada. Los fabricantes aconsejan que para obtener máxima transferencia de potencia, la impedancia de entrada del circuito al que se le va a aplicar el generador de forma de onda, debe ser bastante mayor que la impedancia de salida del mismo. Otra característica de interés es lo plano de la salida con cambios en la frecuencia. Como algo natural, la amplitud de la salida debe ser independiente de la frecuencia. Sin embargo, para trabajos no críticos, una carencia de riguroso aplanado se puede manejar ajustando el control de amplitud. El control de fase y sicronización de la forma de onda son características útiles que se encuentran tan sólo en instrumentos de costo moderadamente alto y en los muy caros. Estas propiedades contribuyen en la facilidad del empleo y amplían la utilidad del instrumento. La precisión de posición del dial raras veces es mejor que +/- 2%. Esto no es una desventaja importante, ya que se puede usar con facilidad un osciloscopio de calidad para determinar la frecuencia a la exactitud del mismo. En los generadores de forma de onda de bajo costo, la salida es asimétrica porque en un lado de la salida está a tierra. Hay ocasiones en que esto es inestable. Los mejores instrumentos ofrecen una salida con tres terminales, de tal modo que la señal de salida puede estar flotando respecto a tierra. Esto permite el uso de la forma de onda con casi cualquier referencia de c.d. El Osciloscopio Generalidades. Una de las funciones básicas de los circuitos electrónicos es la generación y manipulación de formas de onda electrónicas. Estas señales electrónicas pueden representar información de audio, datos de computadora, imágenes de televisión, etc. Los medidores comunes utilizados en trabajo eléctrico -el voltímetro cc o ca- miden voltajes cc, pico, o rms. Estas medidas son correctas solamente para señales sinusoidales no distorsionadas o miden el valor verdadero rms para una señal 12 particular sin indicación de cómo varía esta señal con el tiempo. Obviamente, cuando se está llevando a cabo el procesamiento de señales, estas medidas globales no tienen esencialmente ningún significado. Lo que se necesita es “ver” lo que está pasando en el circuito, probablemente en fracciones pequeñas de tiempo y cómo cambia la forma de onda de la señal. El osciloscopio de rayos catódicos (CRO) proporciona precisamente este tipo de operación -la representación visual de la forma de la señal-, permitiéndole al técnico o al ingeniero observar diferentes puntos en el circuito electrónico para ver como están teniendo lugar estos cambios. Además el CRO pude calibrarse y equilibrarse para medir tanto variaciones de tiempo y voltaje de tal manera que la información esté disponible en la cantidad de voltaje que se encuentra presente, qué tanto está cambiando el voltaje, y cuánto tomó realizar ese cambio (o una porción del cambio). El osciloscopio es un instrumento para hacer visibles determinados procesos variables, trabaja según dos coordenadas, es decir, puede registrar dos funciones cualesquiera Y = f(x). Para tal fin, el instrumento cuenta con un tubo osciloscópico, tubo de rayos catódicos, en cuya pantalla se observa el proceso que se desarrolla. Los tubos osciloscópicos pertenecen, según a la moderna tecnología, al grupo de tubos de transformación señal-imagen. Las señales aplicadas a las placas deflectoras y a los electrodos para el control del brillo, generan en la pantalla una imagen. A este mismo tipo de tubos pertenecen los de la televisión, en la cámara de televisión que capta una imagen óptica y la convierte en una señal eléctrica, la cual trabaja a la inversa del osciloscopio. En la actualidad, la moderna tecnología ha avanzado a pasos agigantados. Hoy en día, contamos además de los osciloscopios de tubos osciloscópicos con osciloscopios digitales, donde, las señales se observan en una pantalla de cristal líquido, este tipo de osciloscopios utilizan una tecnología digital, donde la señal que debemos observar es digitalizada a niveles binarios y procesada para obtener la imagen y mediciones requeridas. Sin el osciloscopio, el trabajo electrónico sería virtualmente imposible. A no ser que uno sea capaz de “ver” las formas de onda del circuito, no hay manera de corregir los errores, entender las fallas de diseño, o hacer los ajustes. De la misma manera que el voltímetro, amperímetro y medidores de potencia son las herramientas básicas para el ingeniero de potencia o electricista, el CRO es la herramienta básica del ingeniero o el técnico electrónico. Hay un amplio rango disponible de CRO’s, algunos adecuados para trabajo general en muchas áreas de electrónica, otros para trabajo solamente en un área específica. Un CRO puede diseñarse para operar desde 100 Hz hasta 500 KHz, o desde C.C. hasta 50 MHz; pude permitir observar señales dentro de un intervalo de tiempo de 1 pseg, o hasta cerca de unos pocos qseg; puede proporcionar una forma de onda o un número de formas de onda simultáneas en la pantalla del CRO. Cuando un número de formas de onda se muestran simultáneamente, los voltajes en diferentes lugares del circuito se pueden observar al mismo tiempo. Todas estas características del osciloscopio de rayos catódicos proporcionan flexibilidad y lo capacitan a uno para utilizar un osciloscopio que es bien adecuado para el trabajo que se tiene que hacer. Existen osciloscopios llamados de almacenamiento, los cuales retienen una figura por muchas horas, de tal manera que una señal original (tomada anteriormente) pueda todavía analizarse y compararse con otra señal en un tiempo posterior. Modos de exhibición. Hay disponibles osciloscopios de rayos catódicos que por medio de un haz dual CRT o el uso de circuitería electrónica externa tienen la habilidad de exhibir dos señales durante el mismo intervalo de tiempo. El CRO de haz dual emplea un CRT que tiene un segundo cañón electrónico para generar el haz de electrones adicionales. El CRO de trazo dual emplea circuitería electrónica para conmutar un solo haz electrónico entre dos señales a una tasa que se traducirá en dos exhibiciones claras sobre la misma cara del tubo. Dos distintivos del trazo dual son los modos alternados y los modos conmutados por exhibición. Cuando se utiliza el modo de conmutación electrónica alternado, las dos señales de entrada que deben mirarse (conectadas a los canales A y B del osciloscopio para diferenciar entre las dos entradas verticales) son conectadas al canal vertical del osciloscopio para alternar ciclos del barrido. Cuando las señales que se tienen que observar son de baja frecuencia, se utiliza el modo conmutado de exhibición. Este conmuta la señal de entrada del amplificador vertical de la entrada conectada al canal A a la señal del canal B y regresa a su posición nuevamente, en forma repetitiva para un solo ciclo de barrido del haz. Así, la figura obtenida se compone en realidad de pequeños pedazos de cada una de las señales con suficientes partes para proporcionar la ilusión de dos señales exhibidas en forma estacionaria. Mediciones usando las escalas calibradas. El CRT tiene dos ejes de exhibición -vertical y horizontal-. En la operación normal del osciloscopio de rayos catódicos la señal de entrada observada es aplicada a la entrada vertical (bien sea un solo canal o los dos canales) y el barrido horizontal es obtenido utilizando la circuitería de banido interna. Si el amplificador vertical y los atenuadores se ajustan a los niveles de calibración, entonces la amplitud de la señal vertical (entrada) o cualquier parte de ella pueden medirse exactamente. El término ‘calibrado’ implica que el osciloscopio ha sido verificado para asegurar que cada uno de los ajustes de la escala refleja adecuadamente la indicación del osciloscopio. Por ejemplo, si se elige el ajuste de 1 volt/división, entonces el osciloscopio en realidad, asegurará un movimiento de una división de la exhibición por cada voltio aplicado. Si se emplea el barrido horizontal calibrado del CRO, la cantidad de tiempo para un ciclo de la señal de entrada (el período) puede medirse y utilizarse para calcular la 14 frecuencia de la señal. Además, la cantidad de tiempo entre dos señales sinusoidales que cruzan el cero también pueden leerse y utilizarse para calcular el desplazamiento de fase entre las dos señales. Es también posible utilizar las escalas horizontales para medir la cantidad de tiempo que separa las dos señales que están siendo observadas. Las mediciones de este tipo proporcionan información importante en la circuitería de pulsos y digital. Mediciones de amplitud. La escala vertical del osciloscopio está generalmente calibrada en unidades de voltio/cm, ó bien, voltio/división. Usualmente cada división se subdivide en cinco partes, de tal manera la sensibilidad se ajustada a la posición de calibrado (CAL). En la mayoría de los controles de sensibilidad vertical, se indican posiciones separadas para la lecturas C.A. y C.C. (en muchos otros CRO’s hay un conjunto de escalas de sensibilidad con un interruptor separado para cambiar de operación C.A. a operación C.C.) Medidas de tiempo y de frecuencia. La señal de barrido horizontal puede ajustarse en pasos calibrados desde unos pocos segundos a microsegundos de tiempo por división. Si el selector de tiempo de barrido fuera colocado en lms/div, cada cuadro (o cm) en la pantalla correspondería a un tiempo de lms. Así el CRO permite exhibición de formas de onda de todos los tamaños y permite la medición de tiempo para que todos los aspectos de la señal observada puedan medirse con precisión. Es también posible utilizar las escalas calibradas de tiempo del CRO para calcular la frecuencia de las señales observadas. Esto requiere el uso de la escala de barrido horizontal calibrada para medir el tiempo para un ciclo de la señal observada y después calcular la frecuencia de la señal utilizando la relación f = 1 / T . Donde f es la frecuencia de la señal y T es el período o el tiempo para un ciclo completo de la señal. Medidas de desplazamiento de fase utilizando escalas calibradas. Las escalas de tiempo calibradas también pueden utilizarse para calcular desplazamientos de fase entre las dos señales sinusoidales . Si un osciloscopio de trazo dual o de haz dual se utiliza para exhibir las dos señales sinusoidales simultáneamente de tal manera que una señal se emplea como la entrada de sincronización EXT, las dos formas de onda aparecerán en el tiempo adecuado y el CRO puede utilizarse para medir la cantidad de tiempo entre el comienzo de un ciclo de cada una de las ondas. Esta cantidad de tiempo puede entonces utilizarse para calcular el ángulo de fase entre las dos señales. Mediciones de fase y frecuencia usando figuras de lissajous. Otro método para medir, bien sea desplazamiento de fase entre dos señales sinusoidales, o la frecuencia de una señal desconocida, es la utilización de las curvas de Lissajous. La técnica puede aplicarse a un CRO de un solo canal y no requiere las 15 escalas de calibración finas que se han considerado anteriormente. Básicamente las dos señales bajo estudio (para determinar el corrimiento de fase entre las dos señales) se conectan como las entradas vertical y horizontal del CRO. La señal usual de barrido horizontal (interna) no se utiliza en esta oportunidad. Un patrón o figura de Lissajous se desarrolla en el CRT y es utilizado para determinar la cantidad de desplazamiento de fase o frecuencia de la señal desconocida. Las técnicas de la figura de Lissajous para medición son más populares para CRO’s de baja calidad y para osciloscopios de un solo trazo (en donde las dos entradas no pueden compararse al mismo tiempo). Aunque no tan popular como técnica de medida, el uso de las figuras de Lissajous es todavía interesante y a veces, útil. Convertidores digitales/analógicos Hay un gran número de dispositivos físicos que generan señales de salida analógicas o continuas. Los ejemplos incluyen transductores de temperatura, presión y flujo. En la tecnología actual, los procesamientos de señal se realizan a menudo utilizando métodos digitales, y luego la señal procesada es vuelta a convertir a la forma analógica. Se han ideado muchos tipos diferentes de convertidores de datos que son los acoplamientos o interfaces entre dispositivos analógicos. Se les utiliza en una amplia variedad de aplicaciones, incluyendo el control automático de procesos, las mediciones y pruebas, telemetría de datos y sistemas de comunicación de sonido y video. Convertidor en escalera R-2R. El convertidor D/A resistivo en escalera no requiere un amplio margen de valores de resistencia; sólo requiere dos valores, R y 2R. Es posible una escalera de resistencia en forma de un solo encapsulado. Este circuito tiene la interesante propiedad de que la resistencia hacia cualquiera de las terminales es 3R, estando las restantes terminales a tierra. Resolución y precisión. Una importante especificación de un convertidor D/A es la resolución de que es capaz. La resolución se define como el menor incremento de tensión que puede ser discernido por el circuito y depende principalmente del número de bits de la palabra digital. Ejemplo, en una palabra de 4 bits el LSB tiene un peso de 1/16. Esto significa que el menor incremento de Vo es una dieciseisava parte de la tensión de referencia Vr. Otra especificación de los convertidores D/A es la precisión de conversión, que depende de la diferencia entre la tensión real de la salida analógica y la salida teórica. Ésta es una función de exactitud de los resistores de precisión utilizados en la red en escalera y la precisión es la fuente de tensión de referencia. En la práctica un 16 convertidor debe tener una precisión mayor de resolución sean compatibles. +- 1/2 LSB para que la precisión y la Convertidor digital / analógico de 8 bits el DAC0808 El DAC-0808 es un convertidor de bajo costo y rápido, encapsulado en un empaque doble de 16 terminales. Sus principios de operación se examinan con relación a la tarea efectuada por cada una de sus terminales. Terminales de alimentación de corriente. Las terminales 13,14 son de suministro positivo y negativo respectivamente y pueden tener cualquier valor entre +- 4.5 a 18v entre cada fuente y tierra. +- Terminales de referencia. La flexibilidad del DAC se mejora porque tiene dos entradas de referencia en lugar de una. El usuario puede ajustar la corriente de escalera de entrada al DAC con mucha facilidad, de 4pA a 4mA. Terminales de entrada digital. Las terminales son compatibles con TTL y CMOS, la entrada lógica "O" es de 0 . 8 ~ o menos y la entrada lógica "1" es de 2volts o más. Registro (buffer) de memoria. Los registros de sólo lectura o sólo escritura tienen dos estados de operación transparente o como registro retenedor de tres estados (latch). Características - Resolución : +- O. 19% máximo error - Entradas digitales no inversoras compatibles con TTL y CMOS. - Rango de voltaje en la fuente de alimentación: +- 4.5 v a +- 18 v. - Bajo consumo de poder: 33mW (con un voltaje de 5v). Aplicaciones Operaciones con referencias positiva, negativa; operación con salida bipolar, unipolar; interface con familias lógicas; implementación de un convertidor con 2 microseg de tiempo de conversión, etc. Convertidores analógico/digitales. En muchas aplicaciones es necesario convertir una señal analógica en una forma digital adecuada para su proceso en un sistema digital. Se dispone de varios métodos para este tipo de conversión. A continuación se mencionan dos de los métodos más usados. Convertidor A/D controlado por contador. Uno de los métodos mas sencillos de conversión AíD es el representado por tres elementos principales: Un contador, un convertidor D/A y un comparador analógico. El convertidor opera como sigue: En el comienzo de un ciclo, el contador está puesto 17 a cero. éste produce una tensión de salida en el D/A Vb = O que es aplicada a una entrada del comparador. La entrada analógica es alimentada a través de un circuito de muestre0 y mantenimiento cuya salida Va es aplicada a la otra entrada del comparador. En tanto que la señal analógica Va sea menor que Vbb, la salida del comparador será 1 y una compuerta "AND" se encontrará habilitada permitiendo que entren en el contador los impulsos del reloj. El contador se incrementará en sentido ascendente partiendo de cero. Con cada cuenta la salida aumentará un paso o escalón. Esta cuenta continuará hasta que la forma de onda en escalera exceda del valor de la señal analógica Va. Este tipo de contador es relativamente lento, ya que pueden ser necesarios para la conversión muchos periodos de reloj, tantos como 2("-'). donde 'In" es el número de bits del convertidor. I' Convertidor A/D paralelo o simultáneo (flash). El Último esquema de conversión A D que se discute, es uno extremadamente rápido, que permite que ocurra una conversión entera dentro de un periodo de reloj. El método conocido como conversión paralelo o flash conceptualmente es muy sencillo, comparadores para que comparen el nivel de la señal de entrada con utilizando 2("-') cada uno de los 2("-') niveles de cuantización. Las salidas de los comparadores se procesan mediante un bloque lógico de codificación para que se proporcionen los "n" bits de la palabra digital de salida. Aunque rápido, el método es obviamente antieconómico e impráctico por su gran "n", sin embargo, variaciones sobre esta técnica se han empleado exitosamente en la práctica. Convertidor analógico/digital de 8 bits MC-10319. Es un convertidor AD tipo Flash de 8 bits de alta velocidad. El dispositivo emplea una estructura interna de código Gray para eliminar errores en la salida para señales de cambio rápido en la entrada. Es totalmente compatible con niveles TTL, requerimiento de 5v en fuente de alimentación y una amplia tolerancia de los valores negativos de alimentación de -3v a -6v. Salidas TTL de tercer estado permiten manejar directamente al bus de datos o memoria de entradaísalida común. Este convertidor contiene 256 comparadores en paralelo conectados en una red de entrada. Las salidas del comparador se alimentan a un latch donde la red se codifica, para producir un dato de 8 bits más un bit de desborde. Los datos son retenidos y convertidos en una salida de tercer estado TTL. El bit de sobreflujo o desborde está siempre activo para permitir la interconexión con otro ADC-103 19 para implementar un convertidor de 9 bits. Aplicaciones. Despliegue de señales de video y procesamiento de radar, instrumentación de alta velocidad y transmisión codificada de televisión. Características. - Empleo de un código Gray interno para velocidad y resolución. - 8 bits de resolución. - Facilidad de interconexión para un convertidor de 9 bits. - Salidas de tercer estado con niveles TTL complementado con entrada habilitación. - Tasa de muestre0 de 25 Mhz. - Amplio rango de entrada de 1 a 2 Vpp entre +- 2v. - Baja capacitancia de entrada de 50 pFd. - Bajo poder de disipación de 618 mW - conversión simple del ciclo de reloj. de 19 Generación de señales. Primera etapa del proyecto. (Proyecto I) Generación de señales comúnmente utilizadas en prácticas de laboratorio, mediante el uso de una tarjeta de expansión controlada por una PC. Objetivo. El propósito fundamental de este proyecto, es el de ofrecer al usuario final un sustituto de un generador de funciones convencional, aprovechando las ventajas que tienen las aplicaciones de las computadoras personales, junto con la implementación del diseño de un sistema digital. Descripción de la tarjeta de expansión. La tarjeta es construida a partir de una serie de bloques que a continuación se describen: 1. Bloque de control de frecuencia. Su función es la de recibir datos que le envía el programa. Con estos datos se controla el tiempo de espera entre cada punto consecutivo de una tabla que se va a leer. Este bloque consta de los siguientes elementos: Un oscilador de cristal (1.8 Mhz). Un latch de 8 bits 74LS374. Un comparador de magnitud 8 bits 74LS688. Un contador binario 12 bits MC4040 2. Bloque de control de longitud de la tabla de datos. Su función es la de recibir datos que le envía el programa. Con estos datos se controla la dirección final de la tabla que se va a leer. El bloque también se encarga de generar el barrido de direcciones en RAM. Este bloque consta de los siguientes elementos: Un latch de 8 bits 74LS374. Un comparador de magnitud 8 bits 74LS688. Un contador binario 12 bits MC4040 3. Bloque de control de direcciones de RAM La función de este bloque es la de controlar el acceso al bus de direcciones de la RAM,evitando así una colisión de direcciones entre PC y Tarjeta de expansión. Este bloque consta de los siguientes elementos: Dos latches de 8 bits 74LS374. Dos buffers de 8 bits 74LS244. 4. Bloque de control de flujo de datos. 20 La función de este bloque es la de controlar el acceso al bus de datos de la RAM, evitando así una colisión de datos entre PC y Tarjeta de expansión. Además este bloque controla el sentido del flujo de los datos, es decir, realizar operación de lectura o escritura en la RAM. Este bloque consta de: Un buffer bidireccional de 8 bits 74LS245. 5. Bloque de conversión digitaYanalógica. Su función es la de controlar el acceso de datos enviados al convertidor D/A, además de realizar la conversión de los datos digitales en una señal contínua en tiempo. Este bloque consta de los siguientes elementos: Un buffer de 8 bits 74LS244. Un convertidor digital/analógico de 8 bits DAC-0808. Un amplificador operacional LF-35 1. 3 resistores 5600 ohms. 1 capacitor tantalio 0.1 uf 6. Bloque de control de buffers. Se encarga de habilitar o deshabilitar tres buffers de la tarjeta.( La habilitación o deshabilitación de éstos, depende del proceso que se efectúa para el acceso a los buses de datos y direcciones). Este bloque consta de: Un latch de 8 bits 74LS374. 7. Bloque de direccionamiento. La tarea principal de éste es la decodificación de direcciones de la PC (AO..A15) y de los bits de control (Rd,Wr,AEN) obteniendo un mapeo de los bloques que integran el sistema. El mapeo se dispone de la siguiente manera: Dirección Función 300h control de buffers 301h dirección en RAM escritura de datos en RAM 302h lectura de datos en RAM 303h control del tamaño de tabla 304h control de tiempos de espera (tel) 305h 306h reservada (para te2) 307h inicialización de RAM Este bloque lo constituyen los siguientes elementos: Un decodificador 3 a 8 74LS138. 3 compuertas NOR 5 entradas 74LS260. 4 compuertas NAND 2 entradas 74LSOO. 3 compuertas NOT 74LS04. 1 compuerta AND 2 entradas 74LS08. 21 8. Bloque de Memoria. Se encarga de almacenar los datos que corresponden a la señal que se desea obtener; Estos datos representan un período de la señal en cuestión. La ventaja principal del uso de un bloque de memoria, es la de evitar el constante envío de datos por la PC hacia la tarjeta de expansión. Este bloque consta de: 1 Memoria RAM 8x8K 6264. Modo de operación. El usuario selecciona la señal a generar por el sistema y la frecuencia de operación de la misma. El programa calcula una tabla de datos que representa la señal requerida, la cual se envía a una memoria RAM. Se realiza un banido de direcciones de esta tabla para recuperar los datos. Se efectúa la conversión a una señal analógica. Amplificación de la señal analógica. La señal analógica amplificada es entonces la que el usuario ha seleccionado. Características El sistema contempla la posibilidad de seleccionar entre tres tipos de señales: seno, cuadrada, y triangular. Además de poder seleccionar una frecuencia de operación en un rango específico (20- 10000Hz) aproximadamente. La amplitud de la señal de salida es de un valor fijado por el diseño. (de 4 a 5 volts de amplitud pico - pico ). La señal cuadrada puede ser modificada en su ciclo de trabajo, convirtiéndola en señal rectangular si así se desea. La señal triangular puede ser modificada en su pendiente. La tarjeta opera con un oscilador de cristal a 1.83 Mhz. Voltajes de polarización: 5v y -12v. Tarjeta compatible para computadoras que dispongan de slot de expansión de 62 pins. Generación de señales con datos de 8 bits. Requerimientos de hardware. Computadora con procesador 286 o superior. 1 Megabyte de memoria disponible en disco duro, para instalación del software de control de la tarjeta. Monitor VGA,SVGA Ó W G A . I - --f. J ~ i.., ,!. ,/. .I s.,,! , ! I , : ' i L-,... I. ! , ' I T I 22 Osciloscopio. Segunda etapa del proyecto. (Proyecto 2) Implementar una tarjeta de adquisición de datos, que permita obtener una representación visual de señales analógicas, a través de una P.C. Objetivo. El objetivo primordial de este proyecto, es el de ofrecer una alternativa en aparatos de medición, para la visualización de señales, aprovechando las ventajas que tienen las aplicaciones de las computadoras personales, junto con la implementación del diseño de un sistema digital. Descripción de la tarjeta de expansión. La tarjeta es construida a partir de una serie de bloques que a continuación se describen: 1. Bloque de control de frecuencia. Su función es la de recibir datos que le envía el programa. Con estos datos se controla el tiempo de espera entre cada punto consecutivo de una tabla que se va a leer. Este bloque consta de los siguientes elementos: Un oscilador de cristal (1.8 MHz). Un latch de 8 bits 74LS374. Un comparador de magnitud 8 bits 74LS688. Un contador binario 12 bits MC4040 2. Bloque de control de longitud de la tabla de datos. Su fimción es la de controlar la dirección final de la tabla que se va a leer. El bloque también se encarga de generar el barrido de direcciones en RAM. Este bloque consta de los siguientes elementos: Un latch de 8 bits 74LS374. Un comparador de magnitud 8 bits 74LS688. Un contador binario 12 bits MC4040 3. Bloque de control de direcciones de RAM La función de este bloque es la de controlar el acceso al bus de direcciones de la RAM, evitando así una colisión de direcciones entre PC y Tarjeta de expansión. Este bloque consta de los siguientes elementos: Dos latches de 8 bits 74LS374. Dos buffers de 8 bits 74LS244. ~ 23 4. Bloque de control de flujo de datos. La función de este bloque es la de controlar el acceso al bus de datos de la RAM, evitando así una colisión de datos entre PC y Tarjeta de expansión. Además este bloque controla el sentido del flujo de los datos, es decir, realizar operación de lectura o escritura en la RAM. Este bloque consta de: Un buffer bidireccional de 8 bits 74LS245. 1. Bloque de conversión analógicaídigital. Su función es la de realizar la conversión de las señales analógicas a una secuencia de datos. Este bloque consta de los siguientes elementos: Un buffer de 8 bits 74LS244. Un latch de 8 bits 74LS 374. Un convertidor analógico/digital de 8 bits ADC-MC103 19P resistencias 1O0 ohms. resistencias 390 ohms. capacitores tantalio 0.1 uf 2. Bloque de control de buffers. Se encarga de habilitar o deshabilitar tres buffers de la tarjeta.( La habilitación o deshabilitación de éstos, depende del proceso que se efectúa para accesar a los buses de datos y direcciones). Este bloque consta de: Un latch de 8 bits 74LS374. 3. Bloque de direccionamiento. La tarea principal de éste es la decodificación de direcciones de la PC (AO..A15) y de los bits de control (Rd,Wr,AEN) obteniendo un mapeo de los bloques que integran el sistema. El mapeo se dispone de la siguiente manera: Dirección 308h 309h 3O A h 30Bh 30Ch 3ODh 30Eh 30Fh Función control de buffers dirección en RAM reservada lectura de datos en RAM control del tamaño de tabla control de tiempos de espera (tel) reservada (para te2) inicialización de RAM Este bloque lo constituyen los siguientes elementos: Un decodificador 3 a 8 74LS 138. compuertas NOR 5 entradas 74LS260. compuertas NAND 2 entradas 74LSOO. 24 compuertas NOT 74LS04. compuerta AND 2 entradas 74LS08. 7. Bloque de Memoria. Se encarga de almacenar los datos que corresponden a la señal muestreada que se desea procesar; La ventaja principal del uso de un bloque de memoria, es la de evitar la perdida de datos. Este bloque consta de: 1 Memoria RAM 8x8K 6264. Modo de operación. 0 0 0 0 0 0 Se conecta la señal a visualizar en la entrada correspondiente de la tarjeta de expansión. Se realiza la conversión de la señal analógica de entrada a una señal digital. Los datos obtenidos por el convertidor se graban en una memoria RAM. El programa realiza un barrido de direcciones, en que se graban los datos con el fin recuperarlos. Se realiza la graficación de los datos visualizandolos en la pantalla de la P.C. Si la resolución en la pantalla de la señal, dificulta la medición de la misma, se procede a realizar un cambio en la escala de tiempo, de la ventana de observación. El cambio en la escala de tiempo se efectúa modificando el tiempo en que se graban los datos en RAM.Utilizando el bloque de control de frecuencia. Características 0 0 0 0 0 El sistema permite visualizar señales analógicas en una rango de frecuencia (20Hz40KHz). La amplitud máxima de la señal de entrada podrá ser de 2v p.p. La frecuencia máxima, de muestre0 para el convertidor A D .Será de 20MHz. Voltajes de polarización: 5v y -12v. Tarjeta compatible para computadoras que dispongan de slot de expansión de 62 pins. Generación de señales con datos de 8 bits. Requerimientos de hardware. Computadora con procesador 286 o superior. 1 Megabyte de memoria disponible en disco duro, para instalación del software de control de la tarjeta. Monitor VGA,SVGA Ó UVGA. .. h 1.: , 11 t t _. I . 1 I 25 LISTADO DEL PROGRAMA DE INTERFACE PARA EL GENERADOR. #include <graphics.h> #include <math.h> #include <alloc.h> #include <conio.h> #include <stdlib.h> #include <stdio .h> #include <dos.h> ............................................................ Variables del diseño /* */ ............................................................ int b-activo, htri ,hcuadra; unsigned char tabla,puntos; double frec; ............................................................ Utilerías del mouse /* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #define MOUSE 0x33 struct HotSpotStruct { int X,Y; }; struct Mousecursor { struct HotSpotStruct HotSpot; unsigned ScreenMask[ 161; unsigned CursorMask[ 161; >; struct Mousecursor Arrowcursor= { { o,o>, { Ox3FFF, OxlFFF ,OxOFFF , Ox07FF, Ox03FF, OxOlFF , OxOOFF ,Ox007F, Ox003F, OxOOFF , OxOlFF ,OxlOFF, Ox30FF , OxF87F, OxF87F, OxFC3F }, { 0x0000,0x4000,0x6000,0x7000, 0x7800 , Ox7COO , 0~7E00,0x7F00, 0 ~ 7 F 8 0 , 0 ~ 7 E 0 0 , 0 ~ 7 C O0x4600, O, 0x0600,0x0300,0x0300,0x0180 } 1; struct mstruc { int x,y; int boton; int show; } mouse; . . . */ . . . . . . . . . . . . . . . . . . . . . . . . . ................................. I* Inicializa mouse *I ................................. int mouse-ini() { union REGS regs; regs.x.ax = 0x0000; int86(MOUSEY&regs, &regs); mouse.boton=regs.x.bx; mouse.show=O; return(regs.x.ax); } ................................. I* muestra *I ................................. void mouse-show() { union REGS regs; if (!mouse.show) { regs.x.ax = 0x0001; int86(MOUSE, &regs, &regs); mouse.show=l ; } 1 ................................. I* oculta *I ................................. void mouse-hide() { union REGS regs; if (mouse.show) { regs.x.ax = 0x0002; int86(MOUSE, &regs, &regs); mouse. show=O; 1 } void mouse-status() { union REGS regs; regs.x.ax = 0x0003; int86(MOUSE, &regs, &regs); mouse.boton=regs.x.bx; m0use.x ==regs.x.cx; m0use.y =regs.x.dx; 1 ................................. I*******************************/ void mouse-figura(struct Mousecursor Newcursor) { union REGS regs; struct SREGS sregs; regs.x.ax = 0x0009; regs.x.bx = NewCursor.HotSpot.X; regs.x.cx = NewCursor.HotSpot.X; regs.x.dx = FP-OFF(NewCursor.ScreenMask); sregs.es = FP SEG(NewCursor.ScreenMask); int86x(MOU&, &regs, &regs, &sregs); I ........................................................... Utilerías para la tarjeta /* ........................................................... */ /* control */ void control-t(unsigned char dato) { asm { mov dx,0300h mov a1,dato out dx,al I; } .......................................................... I* Direccion de Ram */ .......................................................... void dir-ram(unsigned char dato) { asm { mov dx,0301h mov a1,dato out dx,al I >; ......................................................... Escritura a Ram /* */ ........................................................ void w-ram(unsigned char dato) { asm { mov dx,0302h mov a1,dato out dx,al 1 >; ...................................................... /* Lectura de Ram *I 28 unsigned char r-ram() { unsigned char dato; asrn { mov dx,0303h in a1,dx mov dato,al I return dato; 1; .................................................... Longitud de la tabla I* . */ ................................................... void largo(unsigned char dato) { asrn { mov dx,0304h mov a1,dato out dx,al I; I ..................................................... Retardo de pulso I* ..................................................... *I void delay-l(unsigned char dato) { asrn { mov dx,0305h mov a1,dato out dx,al I >; void delay-h(unsigned char dato) { asm { mov dx,0306h mov a1,dato out dx,al I 1; ........................................................... I* Utilerías para números *I ........................................................... char *f-trans-a (double valor) { int i; int dec, sign; int ndig = 10; 29 char "string; string = ecvt(valor, ndig, &dec, &sign); while (dec<O) { for (i=ndig-2;i>O;i--) { string [i]=string [i- 1] ; I I string[O]='O'; dec++; /* inserta el punto */ for (i= 8;i>dec;i--) { string[i]=string[i-11; I string[i]='.'; /* inserta cero */ if(dec==O) { for (i=ndig-2;i>O;i--) { string[i]=string [i- 1] ; 1 I string[i]='O'; /* inserta signo if (sign==l) { */ for (i=ndig-2;i>O;i--) { string[i]=string[i-11; I string [i] ='-I; I /* come los ceros */ i=ndig- 1; while ( (string[i]='O') if (string[i]=='.') { )I (string[i]=='.') ) { break; 1 string[i]='\O'; I--' 9 I return (string); ........................................................... /* Utilerías para gráficos ........................................................... void bottom (x 1,y1,x2,y2) int x 1,y1,x2,y2; { setfillstyle(SOLIDFILL,LIGHTGRAY) ; bar (xi ,Y 1,x2,y2); setcolor(WH1TE); *I 30 line (xl,yl,x2 ,y1 ); line (xl,yl,xl ,y2-1); setcolor(DARKGRAY); line (x2,y2,x2 ,yl+l); line (x2,y2,x1 ,y2 ); setcolor(BLACK); 1 void invierte (xl,yl,x2,y2) int xl,yl,x2,y2; { void *ppp; unsigned int size; size=imagesize(xl ,y1,x2,y2); if ( (ppp = malloc(size))!=NüLL ) { getimage(x 1,Y 1,x2,y2,ppp); putimage(x1 ,y1,ppp,NOTPUT); free(PPP); 1 1 .............................................. I* Inicializa el modo gráfico *I .............................................. void inigraficos() { int gd,gm; gd=VGA; gm=VGAHI; if ( mouse-ini() == O ) { /* verifica existencia del mouse */ clrscr() ; printf("ERR0R: Se requiere mouse para el uso de este programa (mouse NO insta1ado)h"); sleep( 1); printf(" presione cualquier tecla.. ."); getch0; print f("hh"); exit( 1); initgraph(&gd,&gm,""); if ( graphresult() != grOk ) { I* inicializa ambiente gráfico */ clrscr(); printf("ERR0R: No es posible instalar el ambiente gráficos b"); sleep( 1); printf(" presione cualquier tecla.. ."); getch0 ; print f( Ynh"); exit( 1); 1 31 ........................................................... Dibuja pantalla pequeña /* ........................................................... */ void drawqantallita() { int i; setcolor(YELL0W); rectangle(389,129,59 1,331); setfillstyle (SOLIDFILL, 1); bar(390,130,590,330); /* cuadrante */ setcolor(8); setlinestyle( 1,O,O); for (i=O;i<=l O;i++) { line (390+i*20,130 ,39O+i*20,330 ); line (390 ,13O+i*20,590 ,13O+i*20); 1 setcolor(8); setlinestyle(O,O,O); line (390,230,590,230); line (490,130,490,330); for (i=O;i<=lO;i++) line(390+i*20,225 ,39O+i*20,235 ); for (i=O;i<=lO;i++) line(485 ,13O+i*20,495 ,13O+i*20); 1; ............................................................ /* Función senoidal */ ............................................................ void dibuja-senoidalo { int i; moveto(390,230); for (i=l;i<=2OO;i++) { lineto(390+(i* 1),230- 95*sin(6.28*(i/200.0)) ); lineto(390+(i* 1),230- 95*sin(6.28*(i/200.0)) ); 1 1; ............................................................ /* Función triangular */ ............................................................. void dibuja-triangular() { moveto(390,230); lineto(390+htri, 135); lineto(390+htri, 135); lineto(590-htri,325); lineto(590-htri,325); lineto(590,230); 1; 32 f**************************~~******************************f I* Función cuadrada *I ............................................................. void dibuja cuadrada() { moveto(390~230); lineto(39 1,135); lineto(39 1,135); lineto(390+hcuadra-1,135); lineto(390+hcuadra-lyl35); lineto(390+hcuadra+1,325); lineto(590+hcuadra+l,325); lineto(589,325); lineto(589,325); lineto(590,230); 1; /**********************************************************f void modiSl_grafic() { int posx; int hl ; posx=mouse.x; switch (b-activo) { case 2 : setwritemode(X0R-PUT); setcolor(0xF); hl=htri; do { if (posx!=mouse.x) { hl=hl-(posx-m0use.x); posx=mouse.x; 1 if (hl < O) hl=0; if (lOO<hl) hl=100; if (hl!=htri) { mouse-hide() ; dibuja-triangular(); htri=h 1; dibuja-triangular(); mouse-show() ; 1 mouse-status(); } while (mouse.botan== 1); setwritemode(COPYPUT); break; case 3 : setwritemode(X0R-PUT); setcolor(0xF); h 1=hcuadra; do { if (posx!=mouse.x) { hl=hl -(posx-m0use.x); 33 posx=mouse.x; 1 if (hl < 2) hl=2; if (198<hl) hl=198; if (hl !=hcuadra) { mouse-hide() ; dibuja-cuadrada(); hcuadra=hl ; dibuja-cuadrada(); mouse-show() ; } mouse-status() ; } while (mouse.boton==l); setwritemode(C0PY-PUT); break; case 4 : { } break; } 1; ................................. /* Despliega frecuencia ................................. *I void disp-frec() { char *mensaje; mouse-hide(); setfillstyle( 1,15); bar (132,222,178,238); mensaje=f-trans-a(frec); setcolor( O); settextstyle(SMALL FONT,0,4); settextjustifj@IGH'f-TEXT,CENTER-TEXT); outtextxy( 178,230,mensaje); mouse-show(); >; void push-fi-ec() { mousehide() ; if ((30.0<=frec) && (frec<=99.0)) { invierte( 55,195, 65,205); 1; if ((lOO.O<=frec) && (frec<=990.0)) { invierte( 55,210,65,220); >; if ((lOOO.O<=frec) && (frec<=9900.0)) { invierte( 55,225, 65,235); >; if ((10000.0<=frec) && (frec<=99000.0)) { invierte( 55,240,65,250); 1; mouse-show(); 1; ................................. void int-fiec() { if ((lOOOO.O<=fiec) && (frec<=70000.0)) { frec=frec+l000.0; 1; if ((lOOO.O<=frec) && (frec<=9900.0)) { frec=frec+lOO.O; 1; if ((lOO.O<=fiec) && (frec<=990.0)) { frec=frec+lO.O; 1; if ((30.0<=frec) && (fiec<=99.0)) { frec=frec+l .O; 1; mouse-hide() ; if (frec==l0000.0) { invierte( 55,225,65,235); invierte( 55,240,65,250); 1; if (frec-1000.0) { invierte( 55,210,65,220); invierte( 55,225,65,235); 1; if (frec==l00.0) { invierte( 55,195, 65,205); invierte( 55,210,65,220); 1; mouse-show(); disp-frec(); 1; ................................. I* Decrementa la frecuencia *I ................................. void dec-frec() { if ((lO.O<fiec) && (fiec<=l00.0)) { frec=frec- 1.O; 1; if ((lOO.O<frec) && (fi-ec<=l000.0)) { frec=frec-10.0; 1; if ((lOOO.O<frec) && (frec<=10000.0)) { frec=frec-100.0; 1; if ((10000.0<frec) && (frec<=l00000.0)) { fkec=frec- 1000.0; 1; if ((100000.0<frec) && (frec<=l000000.0)) { frec=frec-10000.0; 1; mouse-hide() ; if (frec==99000.0) { invierte( 55,240, 65,250); invierte( 55,255, 65,265); 1; if (frec==9900.0) { invierte( 55,225,65,235); invierte( 55,240,65,250); 1; if (frec==990.0) { invierte( 55,210, 65,220); invierte( 55,225, 65,235); 1; if (fiec==99.0) { invierte( 55,195,65,205); invierte( 55,210, 65,220); 1; mouse-show(); disp-fret(); 1; void switch-fi-ec() { if ( (195<=mouse.y) && (mouse.y<=205) ) { push-frec() ; frec=30.0; push-fi-ec(); 1; if ( (210<==mouse.y) && (mouse.y<=220) ) { push-frec() ; frec=100.0; push-fiec() ; 1; if ( (225<=mouse.y) && (mouse.y<=235) ) { push-frec() ; frec=lOOO.O; push-fiec(); 1; if ( (240<=mouse.y) && (mouse.y<=250) ) { push-frec(); frec=lOOOO.O; push-frec() ; 1; disp-fret(); 1; ................................. /* Cálculo de señal triangular "I ................................. void calcula-tr() { double delta-calc, fi-eccalc; double delta-frec, fiec-aprox,reloj ; int i j ; reloj=( 1.838e6); tabla=50; puntos= 1; delta-frec=l.7E+300; fiec-aprox=frec; for (i=5O;i<25O;i++) { for (j=l;j<255;J++) { fiec-calc= 1/((long)i*j/reloj); delta calc=sqrt((fiec-fiec-calc)*(frec-frec-calc)); if (delta-calc <= delta-fiec) { delta-frec=delta-calc; frec-aprox=fiec-calc; tabla =i; puntos=j ; 1; 1; 1; 1; ................................. void codifica() { float m l ,m2,m3,xO,xl ,x2,x3; int i,altura; I* tabla=lOO; puntos=3; *I controlt(6); altura=220; switch (b-activo) { case 1: for (i=O;i<tabla;i++) { dirram(i); w-ram((long)altura*(( 1+sin(2*3.14*i/tabla))/2)); 1; break; case 2: xO=O; x 1=((long)tabla*htri/200); x2=((long)tabla*(200-htri)/200); x3=tabla; if ((xl -xO)>O) { m l =((altura/2)/(x 1-xO)); for (i=xO;i<xl;i++) { dir-r am( i) ; w-ram((long)i*m 1+(altura/2)); 1 1; if ((x2-x1)>0) { m2=((-altura)/(x2-x 1)); for (i=xl;i<x2;i++) { dir-ram(i); w-ram((long)i*m2+(altura-(x 1*m2))); 1; 1; if ((x3-x2)>0) { m3=((altura/2)/(x3-x2)); for (i=x2;i<x3;i++) { dir-ram(i); w_ram((long)i*m3-(~2*rn3)); 1; 1; break; case 3: for (i=O;i<((long)tabla*hcuadra/200);i++) dir-ram(i) ; w-ram( 150); { 1; for (i=((long)tabla*hcuadra/200);i<tabla;i++) dir-ram(i); w-ram(0); 1; break; case 4: break; 1 { largo(tab1a); delay-l(puntos); controlt( 1); >; ................................. ................................. void pantalla() { int i; setcolor(0xF); setfillstyle (SOLIDFILL,7); bar3d( 30,110,610,350,0,1); setcolor(O); rectangle( 3 1,111,609,349); /* *********** Pantallita ***************I setcolor( 15); rectangle(377,117,603,343); rectangle(380,120,600,340); rectangle(388,128,592,332); line (380,340,600,120); setfillstyle (SOLIDFILL,O); floodfill(38 1,121,15); setfillstyle (SOLIDFILL,8); floodfi11(593,332,15); rectangle(388,128,592,332); setcolor(0); setcolor(7); line (380,340,600,120); line (380,120,600,340); drawqantallita0 ; /* **** ** * * *** Botones * ************ * * * * * *J bottom( 55,135,105,155); bottom( 115,135,165,155); bottom( 175,135,225,155); bottom(235,135,285,155); /* **** **** botones para la frecuencia * ** *** ** *********/ bottom( 55,195, 65,205); bottom( 55,210,65,220); bottom( 55,225, 65,235); bottom( 55,240, 65,250); bottom( 55,255,65,265); setcolor( O); settextstyle(SMALL_FONT,0,4); settextjustify(LEFT-TEXT,CENTER-TEXT); outtextxy(75,200," 10 Hz"); outtextxy(75,215,100 Hz"); outtextxy(75,230," 1 kHz"); outtextxy(75,245," 10 kHz"); outtextxy(75,260,"100 kHz"); bottom( 130,220,180,240); bottom( 180,220,190,229); bottom( 180,230,190,240); setfillstyle( 1,15); bar (132,222,178,238); ............................ 39 bottom( 5,450, 55,470); bottom( 65,450,115,470); setcolor( 1); settextjusti@(CENTER-TEXT,CENTER-TEXT); settextstyle(2,0,5); outtextxy(30,460,"EXIT"); outtextxy(85,460,"START"); /****** Seno *******I moveto( 70,145); for (i=i ;i<=lO;i++) lineto( 70+(i*2),145-5*sin(6.28*(i/lO.O))); /****a* triangular *******/ moveto(130,145); lineto(l35,140); lineto( 15O, 145); lineto( 145,15O); * /* * * * * * cuadrada * * * * * */ moveto( 190,145); lineto( 190,140); lineto(200,140); lineto(200,150); lineto(2 1O, 150); lineto(21O, 145); /****** nudo *******I moveto(250,145); for (i=l;i< lo$++) lineto(250+(i*5/10),145-5*sin(6.28*(i/20.0)) ); for (i=l ;i< 1O;i++) lineto(256+(i*4/10),145+2*sin(6.28*(i/20.0))); for (i=i ;i< 1O;i++) lineto(26 1+(i*4/10),145-3*sin(6.28*(i/20.0))); for (i=l;i< 1O$++) lineto(266+(i*3/10),145+6*sin(6.28*(i/20.0))); /****** frecuencia * * *****/ 1; ................................. void inigarametros0 { I* lee-ram(); */ invierte (235,135,285,155); b_activo=4; htri=50; hcuadra=lOO; fi-ec=3O. O; invierte( 55,195,65,205); 1; ................................. ................................. void inicializa() { inigraficos(); caratula(); pantalla(); iniqarametros(); 1; ........................................................... void control-botones(int b) { if(b-activo!=b) { mouse-hide(); drawqantallitao; setwritemode(X0R-PUT); setcolor(OxF); invierte( 55+(b activo-1)*60,135,105+@~activo-1)*60,155); setlinestyle(0,O~NORM-WIDTH); switch (b) { case 1 : dibuja-senoidalo; break; case 2 : dibuja-triangular(); break; case 3 : dibuja-cuadrada(); break; case 4 : break; 1; setlinestyle(O,O,NORM WIDTH); setwritemode(C0PY-PÜT); b-ac tivo=b; invierte( 55+(b-activo-1)*60,135,105+(b-activo-l)*60,155); mouse-show(); } 1; ................................. void control() { int s-fin=O; mouse-show(); do mouse-status() ; if (mouse.boton==l) { /* botones de la forma de la gragica */ if ( (135<=mouse.y) && (mouse.y<=155) ) { if ( ( 55<=mouse.x) && (mouse.x<=105) ) { control-botones( 1); }; if ( (1 15<=mouse.x) && (mouse.x<=165) ) { control-botones(2); 1; if ( (175<=mouse.x) && (mouse.x<=225) ) { control-botones(3); 1; if ( (235<=mouse.x) && (mouse.x<=285) ) { control-botones(4); 1; 41 1; if ( (180<=mouse.x) && (mouse.x<=190) ) { if ( (220<=mouse.y) && (mouse.y<=229) ) { int-fiec(); } else { if ( (230<=mouse.y) && (mouse.y<=240) ) { dec-fiec(); >; 1; if ( ( 55<=mouse.x) && (mouse.x<= 65) ) { switch-frec(); 1; if ( (130<=mouse.y) && (mouse.y<=330) && (390<=mouse.x) && (mouse.x<=590) ) { modiSl_grafic(); 1; envio de la sena1 */ if ( (450<=mouse.y) && (mouse.y<=470) && ( 65<=mouse.x) && (mouse.x<=115) ) { mouse-hide() ; invierte( 65,450,115,470); calcula-tr(); codifica(); invierte( 65,450,115,470); mouse-show() ; /* >; if ( (450<=mouse.y) && (mouse.y<=470) && ( 5+mouse.x) && (mouse.x<= 55) ) { mouse-hide() ; invierte( 5,45O , 55,470); s-fin= 1; 1; 1; while (mouse.boton>O) { mouse-status() ; 1; if (kbhit()) { if (getch()=27) {s-fin=l;} } } while (!s-fin); mouse-hide() ; 1; /** * ****** * *** ******PROGRAMA p m C I P A L * * *** ****** * * ******* * * * ****/ voidmain() { inicializa(); control(); closegraph(); >; LISTADO DEL PROGRAMA DE INTERFACE PARA EL OSCILOSCOPIO. #include <graphics.h> #include <math.h> #include <alloc.h> #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <dos.h> /* Declaración de variables */ double i; double valdat; double ii; char stop; ........................................................... I* Utilerías para la tarjeta ........................................................... */ I* control */ void controlb(unsigned char dato) { asm { mov dx,030dh mov a1,dato out dx,al 1 >; ............................................................ Dirección de Ram /* ............................................................ void dir-ram(unsigned char dato) { asm { mov dx,030Bh mov a1,dato } out dx,al 1 *I 43 .................................. I* Lectura de ram FULL *I .................................. unsigned char datoram() { unsigned char dato; asm { mov dx,030Ah xor a1,al in a1,dx 1 return dato; .......................... I* Lectura de Ram *I .......................... unsigned char r-ram() { unsigned char dato; asm { mov dx,030Ah in a1,dx mov dato,al 1 return dato; .............................. I* Longitud de la tabla *I .............................. void largo(unsigned char dato) { asm { mov dx,03OCh mov a1,dato out dx,al } >; 44 /******************************I I* Retardo de muestreo *I ................................ void delay-l(unsigned char dato) { asm { mov dx,0308h mov a1,dato out dx,al I; I void delay-h(unsigned char dato) { asm { mov dx,030Eh mov a1,dato out dx,al I ........................... I* Retardo I1 de muestreo *I ........................... void reset(unsigned char dato) { asm { mov dx,03OFh mov a1,dato out dx,al I I; 45 ............................ /* Inicializa gráficos */ ............................ void inigraficos() { int gd,gm; gd=VGA; gm=VGAHI; initgraph(&gd,&gm,""); if ( graphresult() != grOk ) { /* inicializa ambiente gráfico */ clrscr() ; printf("ERR0R: No es posible instalar el ambiente gráficos Ui"); sleep( 1); printf(" presione cualquier tecla.. ."); .................................. /* Grafica la señal en pantalla .................................. void pinta() { for (i=O;i<25O;i++) { dir-ramti); control-b(247); valdat= r-ram(); putpixe1(65+2*i,50+valdat, 1O); */ voidmain() { inigrafícos(); largo(255); delay-l( 1O) ............................... I* Dibuja marco de Osciloscopio *I ............................... rectangle(40,43,590,3 1O); line(40,340,590,340); line(65,335,65,345); line( 115,335,115,345); line( 165,335,165,345); line(2 15,335,2 15,345); line(265,335,265,345); line(3 15,335,315,345); line(365,335,365,345); line(415,335,415,345); line(465,335,465,345); line(5 15,335315,345); line(565,335,565,345); , outtextxy (60,420, ' I . .OSCILOSCOPIO. ."); outtextxy (400,420, PROYECTO TERMINAL I1 "); rectangle(40,400,5 89,450); outtextxy (300,360, while (!kbhit()){ setfillstyle(0,15); bar(4 1,44389,309); line(40,176,590,176); line(3 15,43,315,310); pinta(); control-b(23 8); reset(0); closegraph(); 80.000 microseg "); 47 RESULTADOS OBTENIDOS DE LAS TARJETAS DE EXPANSIÓX GENERADOR DE SEÑALES Y oscILoscoPIo. Generador de señales (tarjeta, señales senoidal y cuadrada). E Señal Triangular Operación de la tarjeta de expansión Señal cuadrada Generador, Osciloscopio y tarjeta de interface. .. . . 48 Conclusiones. Una vez que se realizó la investigación, la planeación y el desarrollo de este proyecto, se puede reconocer la importancia que tiene el procesamiento de señales en las diferentes áreas de la electrónica, donde usualmente, estas señales se manipulan para procesos de medición, generación de señales, estudio de sus características, capacidad de modificación de las mismas etc. Debido a la diversidad de aplicaciones que tienen las computadoras personales, se optó por utilizar una de estas aplicaciones, la cual conjuntamos a través de una interface, con una tarjeta de expansión diseñada como sistema digital. Primeramente, la tarjeta de expansión consistió en un sistema generador de señales analógicas que se usan con frecuencia en prácticas electrónicas, es decir, señales de tipo sinusoida1,triangular y cuadrada. A continuación se diseñó una tarjeta que adquiriera señales analógicas, que mediante un procesamiento, pudiera visualizarse su forma de onda en un monitor de computadora tal como se representa en un osciloscopio con sus respectivas escalas de amplitud y tiempo, (sólo de tiempo para el diseño). Respecto al sistema generador de señales: por una parte, se logró que la tarjeta pudiera ser controlada eficazmente por el software propuesto para estos fines; también se consiguió que la frecuencia requerida por el usuario para la señal a generar, tuviera una buena aproximación al valor deseado. Otra característica de este sistema, es la capacidad de generar cualquiera de las tres señales que se mencionaron antes, incluso, en el caso de las señales triangular y cuadrada, se pudo modificar la pendiente y el ciclo de trabajo respectivamente. Una de las limitantes de esta tarjeta fue la de contar con un rango relativamente pequeño de frecuencias para las señales a generar (20Hz-1OOkHz). También se ve limitado este sistema por la imposibilidad de controlar la amplitud de la señal a generar, ya que se fijo a un valor especifico. En cuanto a la tarjeta de expansión diseñada para el osciloscopio, se pueden visualizar en la pantalla de la PC las señales de entrada para el sistema, que se encuentren dentro de un rango especifico de frecuencia (20Hz-40kHz). Además se logró que las señales adquiridas no sólo se pudieran visualizar, sino también efectuar la lectura indirecta de la frecuencia a través de la escala de tiempo. Este sistema tiene las desventajas de: no poder manejar señales con amplitud mayor a 2Vpp, deficiencia en la calidad de la señal al ser desplegada en pantalla, originada por ruido inducido al sistema, e incapacidad para lectura de amplitud. Finalmente aclaramos, como en un principio, que el diseño de estos sistemas no es para sustituir por completo a los instrumentos de medición ya conocidos; ya que estos sistemas tienen algunas limitaciones en cuanto a los rangos de frecuencia con los que operan, y no cuentan con todas las características de los dispositivos comerciales. Lo que sí es necesario mencionar, es que la implernentacion de estas tarjetas de expansión constituyen una de las aplicaciones de las computadoras personales, las cuales no sólo realizan las tareas comunes que todos conocemos, sino que son versátiles. 49 Bibliografa Barkakati & Hyde. Microsoft Macro Assembler Bible, Sams, 2a edición, 1993. Weiskamp dz Heiny. Gráficaspoderosas con Turbo C+ +, Limusa, 1a edición, 1994 Manual de referencia. Fast and LS TTL Data, Motorola, 1a edición, 1992. Manual de referencia. Interface/Linear device Data, Motorola, 1". Edición, 1992. Manual de referencia. Memory Devices, Intel,1a edición, 1993. 0 Pallas, Areny Ramon. Instrumentación electrónica básica,Marcombo,1987. Diefenderfer, James A. Guia de Intrumentación Electrónica, Interamerkana, 2" Edición, 1987. Tocci, Ronald J. Sistemas Digitales, Prentice Hall, 3". Edición,1985. Schilling, Donald. Circuitos Electrónicos, Marcombo, 2a. Edición, 1989. Sedra, Adel S.Dispositivos Electrónicos y Amplificadores de Señales, Mc. Graw Hill, 1". Edición, 1989. 0 Boylestad, Robert. Electrónica teoría de circuitos, P. Hal1,l" ed.,l989.