diseÑo de un generador de funciones de …148.206.53.84/tesiuami/uam3665.pdf · "diseÑo de...

46
UNIVERSIDAD AUT~NOMA METROPOLITANA UNIDAD 1ZTAPALAPA DIVISION DE CIENCIAS BÁSICAS E INGENIERÍA DEPARTAMENTO DE ING. ELECTRICA "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , , . i . 1 . 8 REPORTE QUE PRESENTAN LOS ALUMNOS: Guzmán Moran Constantino. 9421 71 91 Hernandez Barrios Gerardo. 9222261 O Torres Hernandez Pedro. 942 1 8494 PARA LA OBTENCION TRONICA ASESOR: Jiménez Vázquez Dona Noviembre 2000.

Upload: lamdien

Post on 01-Nov-2018

231 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

UNIVERSIDAD A U T ~ N O M A METROPOLITANA

UNIDAD 1ZTAPALAPA

DIVISION DE CIENCIAS BÁSICAS E INGENIERÍA

DEPARTAMENTO DE ING. ELECTRICA

"DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA

TARJETA PCL-812PG." 1 , , .

i . 1 . 8

REPORTE QUE PRESENTAN LOS ALUMNOS: Guzmán Moran Constantino. 9421 71 91 Hernandez Barrios Gerardo. 9222261 O Torres Hernandez Pedro. 942 1 8494

PARA LA OBTENCION TRONICA

ASESOR: Jiménez Vázquez Dona

Noviembre 2000.

Page 2: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

I

II

111

IV

V

VI

VI1

Vlll

IX

X

XI

DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG

i N D I C E 2 2 5 8 9 3

PAGINA

INTRODUCCION ........................................................................ 1

OBJETIVOS ................................................................................ 2

FUNDAMENTOS TEORICOS ..................................................... 3

EQUIPO REQUERIDO ................................................................. 7

TARJETA ADVANTECH PCL-812PG ......................................... 8

SOFTWARE ................................................................................. 20

EXPLICACION Y MANEJO DEL PROGRAMA ........................... 21

CODIGO DEL PROGRAMA ..... ................................................... 30

EXPLICACION DEL CODIGO DEL PROGRAMA ....................... 40

PROBLEMAS DEL DESARROLLO ............................................. 42

CONCLUSIONES ......................................................................... 43

XI1 BIBLIOGRAFIA ............................................................................. 44

Page 3: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

En muchos sistemas de comunicación es de gran importancia contar con señales (senoidales, triangulares, cuadradas y de CD) que contengan la mínima distorsión posible en su forma, además de una frecuencia estable y precisa.

Aunque esta no sería la única aplicación dado que también este tipo de requisitos son necesarios en las señales que se utilizan para realizar pruebas a equipos de nuevo diseño, reparar y calibrar equipos con fallas.

El dispositivo en cuestión es mejor conocido como: Generador de funciones, es un aparato electrónico que produce ondas senoidales, cuadradas y triangulares, además de crear señales TTL.

Actualmente la tecnología digital tiene mucho auge, además de que es económica y abarata costos de producción, es por eso que se pensó en hacer uso de ella para el desarrollo de este proyecto; de manera más precisa, se utilizó una PC y una tarjeta de adquisición/generación de datos, así como del desarrollo de un software en lenguaje C para lograr el objetivo.

* Lo anterior es una pequeña introducción de lo que es el proyecto que se realizó y al cual hemos

Y denominado: Generador de funciones de precisión utilizando la tarjeta PCL-812PG.

Generador de funciones CFG250 de Tektronix

1

Page 4: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Dentro del plan de estudios de la carrera de Ingeniería Electránica se pide como requisito para poder acreditar los 2 cursos de Proyecto de Ing. Electrónica, la elaboración de un proyecto, es por ello que el presente reporte muestra y explica los objetivos así como el desarrollo del proyecto al que hemos denominado:

DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL- 81 2PG.

E n este caso el objetivo es diseñar un dispositivo que nos ayude a generar y obtener señales (senoidales, triangulares y cuadradas) que tengan la mínima distorsión posible en su forma además de que debe de poseer una frecuencia estable y precisa, esto pensando en el uso y requerimientos que se piden en el área de comunicaciones. Para ello se hará uso de la tarjeta PCL-812PG como un convertidor D/A, lo cual requiere que se diseñe un software mediante el cual el usuario pueda elegir y controlar la señal deseada (amplitud, frecuencia y duración de la señal); de esta forma se generan datos digitales los cuales serán enviados a la tarjeta, que se encargara de realizar la conversión y dar a la salida la señal analógica deseada. Además se busca que el software sea amigable con el usuario.

De los requerimientos más importantes que debe de cumplir el dispositivo se mencionan los siguientes: - Poder cambiar la amplitud de la señal. - Poder cambiar la frecuencia de la señal. - Poder cambiar la forma de la señal. - Poder cambiar el tiempo de la duración de la señal. Todo esto, sin que se pierda la continuidad a la salida.

Para lograr lo anterior, se requiere: - Familiarizarse con la tarjeta. - Elegir y familiarizarse con un lenguaje que posea las instrucciones requeridas para el manejo de puertos, datos binarios, etc. - Familiarizarse con los puertos de una PC, así como el mapeo de estos mismos en memoria. - Realizar las pruebas necesarias para poder evaluar el funcionamiento del dispositivo, en las cuales se pueda ver el comportamiento de la salida.

Los puntos anteriores dan a grandes rasgos algunos de los más importantes pasos para lograr el diseño requerido, cabe destacar que cada punto es factible de ser subdividido en otros subtemas.

2

Page 5: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Como en cualquier área o campo de estudio, es necesario conocer algo de teoría para poder tener una mejor comprensión de lo que en la práctica se realiza. Nuestro caso no es la excepción, el campo de la electrónica y las comunicaciones es muy amplio, por lo cual nos enfocaremos en los temas que son más concretos con lo que se quiere desarrollar. Es por ello que hablaremos un poco de: - Convertidores D/A o también conocidos como DAC (Digital Analogic Converter por sus siglas en inglés). - Los tipos de puertos que existen, más precisamente dentro de una PC. - Los tipos de conectores requeridos para este tipo de puertos.

CONVERTIDORES DIGITAL-ANALOGICOS (D/A). . ~ ~ ~ ~ . . . ~ ~ ~~~~ ~ . . ~~~ . ~. . ~ = . . . .~ ' , ~-

E n forma sencilla un convertidor de digital a analógico es el proceso de tomar un valor representado en el código digital (como binario directo o BCD) y convertirlo en un voltaje o corriente que sea proporcional al valor digital.

Salida analógica:

Desde el punto de vista técnico un DAC no tiene en realidad una salida analógica porque una señal analógica no es aquella la cual toma solo valores específicos y además una señal analógica es un rango continuo de valores, por ejemplo los 16 posibles niveles de voltaje Vsal (o de corriente lsal según el caso) para un DAC de 4 entradas en donde se podría apreciar que a cada entrada corresponde un valor de salida específico, lo que significa que la salida es seudo-analógica (esto desde un punto de vista técnico). Pero se puede reducir la diferencia entre dos valores consecutivos al aumentar el número de diferentes respuestas de la salida por medio del incremento del número de bits de entrada y así producir una salida cada vez más similar a una cantidad analógica la cual varía de

3

Page 6: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

manera continua sobre un rango de valores, pero con fines prácticos se le define a Vsal o lsal como salida analógica.

Resolución (tamaño de paso):

La resolución de un convertidor Digital a Analógico, se define como la menor variación que puede ocurrir en la salida analógica como resultado de un cambio en la entrada digital, por ejemplo si un DAC de 4 entradas y en la entrada del bit menos significativo (LSB) se tiene un 1 y en la salida correspondiera lV , se dice que la resolución es de 1V porque Vsal no puede variar en mas o menos 1V cuando cambia el código de entrada, y si se tiene la combinación 11 11 en las entradas tendríamos un Vsal de 15V (salida de escala completa). La resolución siempre es igual al factor de ponderación del LSB al que se le conoce como tamaño de paso. Ahora si se colocaran las salidas de un contador a las 4 entradas del DAC nos daría una escalera de 16 niveles diferentes que son los que corresponden a los 16 estados de entrada pero solo existen 15 pasos o escalones, en general un DAC de N bits de entrada tiene ZN estados y un número de pasos de ZN -1. Por lo que tendríamos la ecuación para Vsal (o lsal según sea el caso) de la siguiente manera:

Salida analógica = ( K ) X (entrada digital) Donde K es la cantidad de voltaje (o corriente por paso)

Porcentaje de Resolución: Aunque la resolución puede expresarse como la cantidad de voltaje o corriente por paso, resulta más útil expresarla como un porcentaje de la salida a escala completa; por ejemplo utilizando nuevamente nuestro famoso DAC de 4 entradas con el tamaño de paso 1V a escala completa, es decir que tenemos una salida de 15V y en las 4 entradas tenemos unos (1 11 1) y utilizando la siguiente ecuación:

Resolución porcentual = [(tamaño de paso) /(escala completa)] [loo%] tendriamos una resolucih porcentual de:

Resolución porcentual = [(1 yI/(lSyI] [loo%] = 6.67% Significado de la resolución: Puesto que un DAC no pude producir un rango continuo de valores, en el sentido estricto, su salida no es en realidad analógica. Un DAC produce un numero finito de valores en su salida. La resolución del DAC (número de bits) determina cuantos posibles valores de voltaje puede un sistema digital (por ejemplo una computadora) enviar hacia un actuador, por consiguiente, se tiene que a mayor número de bits mayor será la resolución y el tamaño de paso es más pequeño, además el diseñador del sistema debe de decidir que resolución es la más apropiada y en general, el costo del DAC aumenta conforme el número de bits por lo que el diseñador debe considerar el número de bits que sean necesarios.

Código de entrada BCD: Muchos DAC's utilizan un código de entrada BCD los cuales utilizan grupos de códigos de 4 bits para cada dígito decimal. A continuación se muestra una figura de un DAC de 8 bits (dos dígitos) BCD y que representan números decimales del O - 99, para cada grupo los factores de ponderación de los diferentes bits se proporcionan igual que el cbdigo binario (1, 2, 4, 8) pero los factores de ponderación relativos para cada grupo son diferentes por un factor de I O .

4

I

Page 7: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

DAC bipolar: Algunos DAC's están diseñados para producir tanto valores positivos como negativos, como pude ser +1OV y -1OV, esto se logra utilizando la entrada binaria como un número con signo, donde MSB es el bit de signo (O para + y 1 para -), frecuentemente los valores negativos esta representados en forma de complemento a 2. Los valores binarios de entrada varían de 100000 (-32) a O1 11 11(+31) para producir salidas analógicas que van desde -6.4V hasta +6.2V y entre los limites negativo y positivo existen 63 pasos (26 -1) de .2V (esto en muchos DAC's con estas características).

Circuitería Interna de un DAC.

CONVERTIDOR DE DIGITAL - ANALOGICO Los convertidores de digital a analógico (DAC), transforman una palabra digital en una tensión o corriente analógica. Se utilizan varias técnicas para conseguir esto. Aquí se presentan dos métodos. La magnitud de la salida del DAC es en general proporcional o inversamente proporcional a la corriente que fluye a través de resistores ponderados, en la figura siguiente se muestra un ejemplo se pude tener un DAC binario de 8 bits con un amplificador operacional como convertidor de corriente a tensión.

htradas lógicas

-*/

Donde cada una de estas entradas están ponderadas de acuerdo con los resistores de suma de la entrada de tal forma que se obtenga la potencia de 2 apropiada. Una señal de 8 bits en la entrada proporciona una salida analógica. Otro método se basa en la utilización de un conmutador CMOS para cambiar los resistores en una red escalera como se muestra en la siguiente figura. Este método se denomina escalera de conmutación de corriente R-2R y utiliza una serie de resistores de silicato de cromo depositado. El código de entrada digital aplicado a la entrada del convertidor DAC controla la posición de los conmutados de corriente.

5

Page 8: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

i

El diagrama de terminales para el DAC de 8 bits, el DAC0830 como se muestra en la figura siguiente utilizando una red de escalera R-2R, este DAC produce 0.05% de error máximo lineal a escala completa, el tiempo típico de conversión es de un microsegundo, y con una entrada de 8 bits, este circuito es capaz de generar 256 distintos niveles de corriente de salida con una resolución de 8 bits.

cs

-1

GND

DI 1

DI3

D I 2

DI1

DIOCLSBI

mt c

nm

"I 4 1 7 I"

" 7

" e

" Y

::I 1 2

WCC

ILE -WE1 #BYTE=

WR2

XFER

DI4

D15

Dl6

DITIYSEI

I U I J S Z

I OUT1

Lo anterior fue una pequeña introducción de lo que son los convertidores DAC, así como una pequeña explicación de su estructura interna. Ahora se verá una pequeña explicación así como un diagrama eléctrico y su respectiva explicación de un circuito que realiza una conversión digital-analógica, en este caso usando una PC que es la que se encarga de realizar la generación de los datos digitales y el circuito integrado (DAC) que será quien reciba estos datos y convierta estos a una señal analógica.

Esquema de un conversor Digital-Analógico, a través del puerto paralelo. . . . .~ .

Para la generación de diferentes formas de onda basta con enviar, de forma continúa, un conjunto de valores que, una vez convertidos a analógicos, definan dicha onda. Por ejemplo, si se envían continuamente los valores 00, OFF, 00, OFF, ... a la salida del conversor habrá una onda cuadrada, pues irá desde -5V hasta 5V de forma constante. La frecuencia de esa onda dependerá de la velocidad del puerto. Con el ejemplo anterior, la frecuencia sería la máxima posible.

P1 R1 4.7 K

-

Vee = -5v

Esquema del conversor Digital-halógico, a través del puerto paralelo.

6

Page 9: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Para la realización de este proyecto se requirió el siguiente equipo:

- 1 PC con las siguientes características: k Procesador: AMD KII h Memoria RAM: 32 MB.

Solo se mencionan estas especificaciones porque son las que afectan de una manera directa en el funcionamiento de la tarjeta y el programa, aunque cualquier otro procesador similar o superior hubiese servido para el mismo fin, dado que la plataforma sobre la cual se programo es MS-DOS.

- Tarjeta de adquisición de datos, modelo PCL-812PG de la compañía ADVANTECH la cual fue configurada en modo D/A, cuyas características son explicadas en un apartado posterior.

- Osciloscopio digital, el cual fue usado principalmente en la etapa de pruebas para analizar la señal generada por la tarjeta.

- Compilador Turbo C++ V1.0 de la compañía Borland, usada para la elaboración del software requerido.

- Además de ciertos aditamentos extras como son cables y caimanes de conexión.

cnz 5 % L.

r C) rl :7 (I, I-:

::I . . S F -

GL ir. !-. ;: c' I .

-4 :. 1 ", j , 5':

" ~

.l. . , I , ."

7

Page 10: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

INFORMACION GENERAL

La PCL-812PG es una tarjeta de adquisición de datos de alto rendimiento, alta velocidad y multifuncional; para computadoras IBM PC/XT/AT y compatibles. Sus especificaciones y software de soporte la hacen ideal para un amplio rango de aplicaciones en ambientes industrial y de laboratorio. Estas aplicaciones incluyen adquisición de datos, control de procesos, pruebas automáticas y automatización en fábricas.

Características

16 canales de entrada analógicos. Un convertidor industrial estándar de aproximaciones sucesivas de 12 bits para convertir entradas analógicas (HADC574Z). La máxima razón de muestre0 AID es de 3 KHz en modo DMA. Rangos de entrada analógicos programables por software. Bipolar: +/- 5 V, +/- 2.5 V, +/-1.25 V, +I- 0.625 V, +/- 0.3125 V. Tres modos de disparo AID:

Disparo por software. Disparo por marcador programable. Disparo por pulso extemo.

La habilidad para transferir datos convertidos AID por control de programa, rutina manejadora de interrupciones o transferencia DMA. Un TimerlContador programable INTEL 8253-5 provee una salida marcadora (pulso de disparo) a una razón de 0.5 MHz a 35 minutoslpulso. La base del timer es de 2 MHz. Un canal contador de 16 bits es reservado para aplicaciones configurables por el usuario. Dos canales de salida D/A monolíticos de 12 bits. Un rango de salida de O a + 5 V ó de O a + 10 V pueden ser creados usando los - 5 V ó - 10 V de referencia de la tarjeta. Esta precisión de referencia es derivada de la referencia del convertidor AID. Referencias externas de AC o DC pueden también ser usadas para generar otros rangos de salida DíA.

Especificaciones

Entrada Analógica (Convertidor AID)

Canales : 16. Resolución : 12 bits. Rango de entrada : Bipolar : +/- 5 V, +/- 2.5 V, +/- 1.25 V, +I- 0.625 V, +/- 0.31 25 V.

Sobrevoltaje : Continuo +/- 30 V máximo. Tipo de conversión : Aproximaciones sucesivas. Convertidor : HADC574Z. Velocidad de conversión : 30 KHz máximo. Precisión : 0.015 % de la lectura +/- 1 bit. Linealidad : +/- 1 bit. Modo de disparo : Disparo por software, timer programable en la tarjeta o disparo

externo. Transferencia de datos : Control de programa, control de interrupciones o DMA. Disparo externo : Compatible TTL, carga 0.4 A máximo a 0.5 V (bajo) ó 0.05 mA

máximo a 2.7 V (alto).

Todos los rangos de entrada son programables por software.

8

Page 11: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Salida Analógica (Convertidor D/A)

Canales : Resolución : Rango de salida :

Voltaje de referencia :

Tipo de conversión : Dispositivos analógicos: Linealidad : Manejo de salida : Settling time :

Entrada Digital

Canal : Nivel : Voltaje de entrada Carga de entrada

Salida Digital

Canal : Nivel : Voltaje de salida :

2 canales. 12 bits. O a + 5 V 6 O a + 10 V con referencia fija de -5 V ó -10 V. Máximo de +1 O V ó -1 O V con referencia externa DC o AC. Interno : -5 V (+/- 0.1 V), -10 V (+/-0.2 V). Externo : DC o AC, +/- 10 V máximo. Multiplicación monolítica de 12 bits. AD7541AKN o equivalente.

+/- 5 mA máximo. 30 microsegundos.

+/- 1/2 bit.

16 bits. Compatible con TTL. Bajo : 0.8 V máximo. Alto : 2.0 V mínimo. Bajo : 0.4 mA máximo a 0.5 V. Alto : 0.05 mA máximo a 2.7 V.

16 bits. Compatible con TTL. Bajo : Sumidero 8 mA a 0.5 V máximo. Alto : Fuente -0.4 mA a 2.4 V mínimo.

Timer/Contador Programable

Dispositivo : Intel 8253. Contadores : 3 canales, 16 bit, 2 canales permanentemente conectados a

un reloj de 2 MHz como marcador programable, 1 canal libre para aplicaciones del usuario.

Entrada, compuerta : Compatible con TTUDTUCMOS. Base tiempo : 2 MHz. Salida del marcador : 35 minutos/pulso a 0.5 MHz.

Canal de Interrupción

Nivel : Habilitación

Canal DMA Nivel : Habilitación :

IRQ 2 a 7 , seleccionable por jumper. Via SO, S1 y S2 del registro de CONTROL.

1 ó 3, seleccionable por jumper. Via SO, S1 y S2 del registro de CONTROL.

9

Page 12: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Especificaciones Generales

Consumo de potencia :

Conector I/O :

Dirección base I/O :

Temperatura de Operación: Temperatura de almacenamiento : Peso :

+ 5 V : típico 500 mA, máximo 1 A. +12 V : típico 50 mA, máximo 100 mA. -12 V : típico 14 mA, máximo 20 mA. 20 pines para conexiones ¡/O. Adaptador disponible para convertir a conector de 37 pines tipo-D. Requiere de 16 localidades de dirección consecutivas. La dirección base es definida por un DIP switch para las direcciones en línea A8-A4.

O a + 50 grados centígrados.

-20 a +65 grados centígrados. 8.6 onzas (243 gramos).

D O 15 DIGITAL

m 1s DIGITAL

Page 13: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

INSTALACION

Ajuste de los Jumpers 2 2 5 8 9 3 La PCL-812PG esta diseñada para un uso sencillo. Hay un Dip switch y 9 jumpers en la tarjeta PCL-812PG.

Selección de la Direccidn Base

Nombre del Switch : SW1

La mayoría de los dispositivos periféricos de una PC son controlados a través de los puertos de p : entradakalida (VO). Estos puertos son direccionados usando el espacio de dirección de puertos I/O. :. La dirección base del puerto I/O para la PCL-812PG es seleccionable a través de in DIP switch de 8 ; i - posiciones. La PCL-812PG requiere 16 localidades de dirección consecutiva en el espacio 110. Las; direcciones válidas son del hexadecimal 200 al hexadecimal 3FO. La dirección base fijada de fábrica. es la 220 hexadecimal. Si se necesita ajustar la tarjeta en algún otro rango de direcciones, los ajustes del switch para varias direcciones base son ilustrados en seguida:

! '

Rango de Direcciones Posición del Switch I/O (hexadecimal) 1 2 3 4 5 6

A8 A7 A6 A5 A4 A3 200-20F o o o o o x 210-21 F 220-22F 230-23F 300-30F 3FO-3FF

0 0 0 0 1 x 0 0 0 1 0 x O 0 0 1 1 x 1 o o o o x 1 1 1 I 1 x

Nota : - A9 es fijado a 1 con hardware. - O N = O , OFF = 1 . - A4 ... A9 corresponden a lineas de dirección del bus de la PC.

1 1

Page 14: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Selección del Canal DMA

Nombre del Jumper : JP6, JP7

La PCL-812PG provee capacidad de transferencia de datos DMA. La selección del nivel DMA 1 o nivel 3 es controlada por los jumpers.

No DMA 1 3 x

JP6 DRQ

DMAl:

JP6

1 3 x

JP7 DACK

gs; JP7

JP7

Selección de la Fuente de Disparo

Nombre del Jumper : JP1

La fuente de disparo de la conversión A/D puede ser interna a través del marcador programable o una señal de pulso externa. (Conector CN5 pin 1).

Disparo de Marcador Interno :

JP 1

EXT o

Selección del Reloj de Entrada del Contador del Usuario

Nombre del Jumper : JP2

I

I

El Timer/Contador programable tiene 3 contadores de 16 bits. El canal 1 y canal 2 son configurados como marcadores internos y el canal O es dejado para aplicaciones del usuario. La entrada del reloj del canal O puede ser un reloj interno de 2 MHz o una señal de reloj externa del conector CN5 pin 8.

12

Page 15: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Reloj Interno 2 MHz :

JP 2

EXT o

Reloj Interno 1

JP2 INT 0

Selección del Nivel IRQ

Nombre del Jumper : JP5

La interrupción causada por una conversión A/D completada puede ser nivel 2 ó 7. Esta es seleccionada por JP5. El usuario debe evitar que ninguna otra tarjeta comparta el mismo nivel de interrupción.

Sin mtgnupción :

2 3 4 5 6 7 X

Nivel 2 IRQ :

2 3 4 5 6 7 X

p 5 C I R Q )

Selección de la Fuente de Referencia D/A

Nombre del Jumper : JP3, JP4

El voltaje de referencia del convertidor D/A puede ser generado internamente -5 6 -10 volts o un voltaje de referencia externo del conector CN2 pin 17 o pin 19. La fuente de referencia del canal 1 D/A es seleccionada por JP3.

13

Page 16: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

I

L o s voltaJ~ de refaencia de ambos canales DfA CHI y CH2 son actanos :

El voltaje de referencia M canal DIA C H I es m k n o y del canal CH2 es &esno :

JP4 O I O O I D/A2

I N T VREF EXT

Selección de Referencia Interna D/A

Nombre del Jumper: JP8

El voltaje de referencia interno puede ser -5 V 6 -1 O V. Es seleccionado por JP8.

Elwolta]e&refcr~ciacs-l0VydrangodesalirfaD/AecsdeOa+10V:

10 5

JPX I o 0 1 o

El v o l q e de referencia es -5V y el rango de salida D/A es de O a +5V

10 5

Selección del Máximo Voltaje de Entrada AID

Nombre del Jumper : JP9

Page 17: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

IvIAximo rango de entrada del convddor AD es +/- 5V :

10 5

JP9 o

h k j m o rango de entrada del convertidor A D es +/- 1OV :

10 5

Asignación de los Pins del Conector

La PCL-812PG esta equipada con dos conectores de 20 pins, accesibles desde la parte trasera de la placa y otros tres conectores de 20 pins en la tarjeta. Todos estos conectores pueden ser conectados al mismo tipo de cable plano o conectados a conectores de 37 pins tipo-D a través de un kit de cableado industrial PCLK-1050. Los siguientes diagramas ilustran la alineación de los pins de cada conector.

CONEXIóN DE LAS SEÑALES

Conexión de la Salida Analógica

La PCL-812PG provee dos canales de salida D/A. Se puede usar la referencia generada internamente por la PCL-812PG de -5 V y -10 V para generar una salida D/A de O a +5 V y O a +10 V. Los convertidores DIA deben ser conectados como se ilustra abajo :

15

Page 18: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Gonector 1 (CN1) - Entrada Analógica

AID O m 1 AID 2 AID 3 Am 4 AID S AID 6 AID 7 AID 8 Ax> 9

1 2 3 4 5 6 7 8

1 1 12 9 10

13 14

17 18 15 16

19 m

A. GND A. GND A. GND A. GND A. a D

A. GND A. GND

A. GND A. GND A. GND

Conedor 3 (CN3) - Saitda D@al

m 0 DIO 2 DIO 4 DIO 6 DIO 8 DIO 10 DK) 12 DX) 14 D. GND +m

1 2 3 4 5 6 7 8

11 12 9 10

13 14 15 16 17 18 19 m

DID I DX) 3 DID S DID 7 DX) 9 DID 11 DO 13

D. GND DID 15

+ 12v

Conector 5 (CN5) - Contador

11 12 13 14 IS 16

+ sv 20

CTRl GATE c m CLK CTRO OUT

CTRl OUT CTRD GATE

D. GND

AID 10 AID 11 A D 12

A m 14 AID 13

AiD 15 DIA 1 D/A 2 v. RET 1 v. REF2

1 2 3 4 S 6 7 8

11 12 9 10

13 14 I5 16 17 18 19 20

A. GND A. GND A. GND A. GND A. GND A. GND A. GNL3 A. GND A. GWD A GND

Conector 4 (CM) - Entrada Digital

DR O Dn 2 DII 4 DR 6 DII 8 DII 10 on 12 DII 14 D. GND + 5v

3 4 1 2

5 6 7 8

1 1 12 9 10

13 14

17 18 15 16

19 m

DA 1 DA 3 DA 5 M 7 DA 9 DA 11 DA 13 DA 15 D. GND + 12v

FORMATO Y ESTRUCTURA DE LOS REGISTROS

Mapa de Direcciones del Puerto I/O

La siguiente tabla muestra la localidad de cada registro y rnanejador relativo a la dirección base, y su uso.

Localidad

Base + O Base + 1 Base + 2 Base + 3

Lectura

Contador O Contador 1 Contador 2 N/U

Escritura

Contador O Contador 1 Contador 2 Control del Contador

16

Page 19: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Base + 4 Base + 5 Base + 6 Base + 7 Base + 8 Base + 9 Base + 10 Base + 11 Base + 12 Base + 13 Base + 14 Base + 15

Byte bajo A/D Byte alto A/D Byte bajo D/I Byte alto D/I N/U N/U N/U N/U N/U N/U N/U N/U

Byte bajo CH1 DIA Byte alto CHI D/A Byte bajo CH2 DIA Byte alto CH2 D/A Petición de interrupción Control de ganancia Control del Multiplexor Modo de control Disparo A/D por software Byte bajo D/O Byte alto DIO N/U

N/U = No Usado

Registros de Datos AID

Formato de los Datos : l. Byte bajo y datos del A/D.

BASE + 4 D7 D6 D5 D4 D3 0 2 D l DO AD7 AD6 AD5 AD4 AD3 AD2 AD1 ADO

2. Byte alto del A/D.

BASE+ 5 D7 D6 O O

Registros Digitales I/O

Formato de los Datos :

BASE + 6 (puerto de lectura) Byte bajo D/I

BASE + 13 (puerto de escritura) Byte bajo D/O

BASE + 7 (puerto de lectura) Byte alto D/I

BASE + 14 (puerto de escritura)

D5 O

D7

Dl7

D7

DO7

D7

DI1 5

D7

D4 D3 D2 D l DO DRDY AD1 1 AD10 AD9 AD8

D6 D5 D4 D3 D2 D l DO

Dl6 Dl5 Dl4 Dl3 Dl2 DI1 DIO

D6 D5 04 D3 D2 D I DO

DO6 DO5 DO4 DO3 DO2 DO1 DO0

D6 D5 D4 D3 D2 D I DO

Dl14 Dl13 Dl12 DI11 Dl10 Dl9 Dl8

D6 D5 D4 D3 D2 D I DO

Byte alto D/O DO15 DO14 DO13 DO12 DO11 DO10 DO9 DO8

17

Page 20: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Registros de Salida D/A

Formato de los Datos BASE + 4 Byte bajo DIA # 1

BASE + 5 Byte alto DIA # 1

BASE + 6 Byte bajo DIA # 2

BASE + 7 Byte alto DIA # 2

D7 D6 D5 D4 D3 D2 DI DO DA7 DA6 DA5 DA4 DA3 DA2 DA1 DA0

D7 D6 D5 D4 D3 D2 D l DO X X X X DA1 1 DAlO DA9 DA8

D7 D6 D5 D4 D3 D2 D l DO DA7 DA6 DA5 DA4 DA3 DA2 DA1 DA0

D7 D6 D5 D4 D3 D2 DI DO X X X X DA1 1 DAlO DA9 DA8

CONVERSION AID

Formato de los Datos y Estado de los Registros AID

Cuando la PCL-812PG realiza conversiones de 12 bits AID, y un registro de 8 bits no es lo suficientemente grande para acomodar los 12 bits de datos. Entonces los datos AID son almacenados en dos registros localizados en las direcciones BASE + 4 y BASE + 5. Los datos del byte bajo AID estan en las posiciones DO (ADO) hasta D3 (AD1 1 ) de BASE + 5. El bit menos significativo es ADO y el bit más significativo es AD1 l. El número del canal AID del cual la conversión de datos se deriva esta disponible en el registro BASE + 10 en la posición DO (CLO) a D3 (CL3). La ganancia es ajustada en el registro BASE + 9 posición DO (RO) a D2 (R2).

Como Realizar una Conversión AID

Se puede realizar operaciones AID con un programa escribiendo instruccoines directamente a todos los puertos 110, o con un programa utilizando el manejador de la PCL-812PG. Para realizar disparo por marcador y transferencia de datos por control de programa sin el manejador PCL-812PG.

Paso 1 : Configurar timers.

Paso 2 : Configurar el canal de entrada escribiendo el número del canal al registro de control del multiplexor BASE + IO.

Paso 3 : Configurar el rango de entrada analógico escribiendo al registro de control de ganancia BASE + 9.

Paso 4 : Configurar el modo de disparo por marcador escribiendo al registro de modo de control BASE + 1 1 .

Paso 5 : Esperar por el dato listo checando el bit DRDY del registro de byte alto AID (BASE + 5).

18

Page 21: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Paso 6 : Leer datos del convertidor A/D accesando el registro de datos (BASE + 5 y BASE + 4). Se debe leer primero el byte alto.

Paso 7 : Conversión de datos convirtiendo el dato A/D binario a un entero.

CONVERSION DIA

La PCL-812 PG provee dos canales DIA que usan convertidores DIA doble buffered de 12 bits.

Cuando se escribe a los canales, debe observarse que el byte bajo debe escribirse primero. Es entonces mantenido temporalmente por un registro en el convertidor DIA y no es liberado a la salida. Después que el byte alto es escrito, el byte bajo y alto son sumados y pasados al convertidor DIA. Este doble proceso (double buffering) protege la integridad de los datos DIA a través de un solo paso de actualización. La PCL-812PG provee una referencia fija de presición de -5V 6 -lOV. Si este voltaje es usado como referencia de entrada D/A, el rango de salida DIA sera de O a + 5V ó O a + IOV. Se puede seleccionar otra fuente externa de D C o A C como la referencia Ade entrada D/A. El máximo voltaje de referencia es -lOV y + IOV, y la máxima salida D/A es de O a + 1OV y O a -lOV respectivamente.

Aplicaciones DIA

Una variedad de operaciones DIA puede ser soportadad por la PCL-812PG. Por ejemplo la PCL- 812PG puede funcionar como un atenuador digital al introducir referencias variables de A C o D C , o puede ser usado para generar salidas de forma de onda arbitraria.

MAPA DE DIRECCIONES DEL PUERTO I/O DE UNA PC

RANGO DE DIRECCIONES I/O (hex) Función

000-1 FF Base del Sistema 200 Reservado

202-277 Reservado 278-27F Segundo Puerto de Impresora 280-2F7 Reservado 2F8-2FF COM2 300-377 Reservado 378-37F Primer Puerto de Impresora 380-3AF Reservado 3BO-3BF Pantalla Mono/Adaptador de Impresora 3CO-3CF Reservado 3DO-3DF Gráficas/Color 3EO-3EF Reservado 3FO-3F7 Floppy Disk Drive 3F8-3FF COMI

201 Control de Juegos

19

Page 22: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

"

CARACTERISTICAS GENERALES DEL SOFTWARE.

El programa fue diseñado para controlar la generación de señales de la tarjeta PCL-812PG, usada en modo de conversión D/A (Digital-Analógico).

0 Fue elaborado utilizando el lenguaje de programación "C". 0 Se procuro tener una interfaz amigable para el usuario, en la cual aparece una ventana donde

se piden los datos de la señal requerida tales como amplitud, frecuencia, etc. 0 Las señales generadas pueden tener una amplitud que deberá estar dentro del rango de O a

10 Volts como máximo, este límite esta dado por la capacidad de generación de la tarjeta utilizada.

0 Se pueden tener incrementos de amplitud de casi cualquier valor (se recomienda que no sean muy pequeños porque serían poco perceptibles); esto se realiza por medio de las teclas de flecha "?" y ''4" para aumentar y disminuir la amplitud respectivamente.

0 Se pueden generar 4 tipos de señales: > CD. > Senoidal. i Cuadrada. > Triangular.

0 El rango de frecuencias, también puede variar solo que aquí existe un problema (se tratara más adelante con mayor detalle) dado que la velocidad del procesador de la máquina utilizada influye en la frecuencia de la señal de salida.

0 También posee la opción de incrementos de frecuencias, aunque también presenta el mismo problema que se menciono anteriormente. Esta se modifica con las teclas de flecha "+" y "t" para aumentar y disminuir la frecuencia respectivamente.

0 Un punto que merece atención es la situación que se presenta cuando la frecuencia es cero, para ciertas señales, por ejemplo:

> Si tenemos una señal Senoidal o cuadrada y bajamos la frecuencia a un valor cero, obtenemos una señal de C D a la cual se le puede variar la amplitud, de manera normal.

> Lo mismo sucede si tenemos una señal cuadrada. > Si tenemos una señal triangular y bajamos la frecuencia a un valor cero, obtenemos

k No hace mención de la señal de CD, porque esta tiene una frecuencia de O Hz. una señal cuadrada, que se puede manipular de manera normal.

0 Cuando se escoge la opción de señal triangular, se pide como dato adicional el número de muestras (se sugiere que este sea par), este número esta relacionado con las pendientes negativas y positivas que dan origen a la señal ( este es un detalle que se tratara con mayor detalle más adelante).

20

Page 23: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

En este reporte se incluye una copia del código del programa realizado el cual va documentado, sin embargo consideramos conveniente incluir un apartado donde se explique de una manera más detallada como funciona y como esta estructurado dicho programa.

Como ya se menciono en un apartado anterior, este programa fue desarrollado utilizando el lenguaje "C"; se eligió este lenguaje, porque posee una serie de características como son portabilidad, mejor manejo y precisión de funciones matemáticas, posee funciones que facilitan el manejo y la transmisión de datos binarios así como una buena flexibilidad para el uso de los puertos de una PC, todo esto aunado a que este lenguaje se caracteriza por ser un "lenguaje estructurado" lo cual implica que se debe hacer uso de funciones, lo cual ayuda enormemente en la división del problema en problemas más simples que pueden ser realizadas de manera más eficiente mediante funciones, de tal forma que el problema original sea más fácil de resolver, esto es, se aplico el dicho que al pie de la letra dice: "Divide y vencer&".

También se mencionó que se trató de que el programa tuviese una interfaz amigable para el usuario, esto se realizo mediante ventanas, en la que cada una de estas pide algunos datos, de tal forma que el usuario no tenga problemas en el manejo de este programa.

Una de las primeras ventanas que se diseñó fue la que se podría llamar ventana principal, es aquí donde se presenta el menú, del cual se puede escoger la señal que se requiere. Esta ventana se muestra a continuación:

21

Page 24: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Una vez que se selecciona la señal, se piden los datos relativos a sus características como son: 0 Amplitud inicial. 0 Incremento en amplitud. 0 Frecuencia inicial. 0 Incremento en frecuencia.

Así como:

La ventana respectiva es la siguiente: 0 Número de muestras (solo para la señal triangular).

Posteriormente se presenta en la pantalla (ahora en modo gráfico) la señal deseada con las características pedidas, aquí ya están validadas las teclas de flecha para manipular la amplitud "? 4'' o la frecuencia "t +", ahora si lo que desea es salir de esta señal, se puede usar la tecla ESC, con la cual se regresa al menú principal, en donde esta la opción de salir totalmente del programa.

A manera de ejemplo se presenta una señal cuadrada, como se ve en esta ventana tambikn se presentan los datos de la señal, así como la señal propiamente graficada.

22

Page 25: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

E s aquí donde podemos hacer uso de las características mencionadas en el tema anterior, que aparecen cuando la frecuencia es igual a cero:

0 Senoidal o cuadrada, entonces obtenemos una señal de C. D. 0 Triangular, entonces obtenemos una señal cuadrada.

Una vez que se regresa al menú principal (al presionar la tecla ESC), se puede elegir otro tipo de señal o inclusive la misma pero con otras características, así como salir del programa, si es lo que se desea.

Esto es a grandes rasgos, como se utiliza el programa, como se puede ver no se requiere de mucha capacitación, de hecho se intento emular a un generador de funciones, de tal forma que si se ha tenido experiencia manejando uno de este tipo, entonces manejar este programa resulta muy sencillo, Además de que en nuestro caso se tiene la ventaja de que al mismo tiempo que se genera la señal, se puede ver a través del monitor de la PC, sin necesidad de tener que utilizar un osciloscopio.

A continuación se mostrara de manera detailada como se generan las señales que están disponibles en este software.

Si comenzamos a analizar el programa se puede observar que se en las cuales se encuentran definidas muchas funciones de las nuestro caso se utilizaron las siguientes:

> Stdlib > Stdio

incluyen las librerías de cabecera, cuales hace uso el programa, en

23

Page 26: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

P Graphics > Math > Conio Z Ctype i ; Bios k Dos

También se hace uso de algunas constantes cuya explicación se da a continuación: Delta-t 0.04 Este es el periodo de muestreo, o mejor dicho el intervalo de tiempo entre muestra y

muestra generada, se eligió este valor porque de esta manera se obtienen señales con una buena resolución, pero de igual forma se pudo haber utilizado otro valor. Este valor solo cambia para el caso de una señal triangular, por lo cual se hace uso de otra variable llamada Delta-t2, cuyo valor es asignado por la función que genera la señal triangular, esta tiene una dependencia directa con el número de muestras que se dio como dato.

AMP-MAX 5 Este valor da la amplitud máxima que dará el programa para una señal, es 5 porque a la señal que se genera se le suma 5, es decir, cuando se tiene el valor 5, sumado con 5, obtenemos 10 que es la máxima amplitud que puede proporcionar la tarjeta PCL812-PG, esto se hace con el fin de no tener valores de voltaje negativos, porque la tarjeta no los puede generar.

BASE 0x300 Este es el valor en notación hexadecimal de 768, y corresponde al puerto donde se encuentra mapeada en memoria la tarjeta PCL-812PG, y es el puerto a donde serán enviados los datos digitales para que la tarjeta realice la conversión a datos analógicos.

Para cada señal el procedimiento que se sigue son muy similares: Se presenta el menú y se pide elegir un tipo de señal, o salir. Una vez elegida la señal, se piden las características de la misma, como son amplitud,

Se inicia la pantalla en modo gráfico. Se dibuja una pantalla (simulando una pantalla de osciloscopio) en donde se graficara la señal que será generada. Se manda a llamar la función que genera los datos digitales de la señal elegida, es aquí donde se manda a la tarjeta los datos, para que esta los procese y realice la conversión de Digital a Analógico, también se manda a graficar a la pantalla de la PC.

frecuencia, etc.

Para todas las señales se hace uso de una variable p, la cual toma valores dentro de un rango de 50 a 630 de manera ciclada, esto se pensó así porque son los puntos (en píxeles) donde se graficara la señal en la pantalla, si recordamos que en modo gráfico, se tiene que el monitor esta formado por 640x480 píxeles.

El rango utilizado corresponde a la zona de la pantalla donde se simula la de un osciloscopio dentro del código de la señal hay una sección donde se reinicia el contador, de tal forma que se reinicia la gráfica dando la impresión de que es continua.

24

Page 27: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

0 SEÑAL DE CD.

Permite generar un voltaje constante de O a 10 Volts, dando la opción de incrementar, de acuerdo al dato que se dio en la ventana de opciones.

Esta es la señal más simple que genera el programa, de hecho , solo se utiliza un valor constante que se modifica cuando se incrementa la amplitud, para este caso, la frecuencia tiene un valor de O Hz. Y no es posible modificarla, esto es así, porque para los cálculos no se considera necesario, de hecho no se requiere.

Tampoco se hace uso del valor At, porque en vez de esto se utilizo un contador que se incrementa de 1 en 1, este contador esta ciclado de tal forma que se repite cada vez que se llena la pantalla con la grafica. Un ejemplo de este tipo de señal es la que se muestra en la siguiente figura, la cual tiene un valor de 5 volts.

25

Page 28: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

SEÑAL SENOIDAL.

Para esta señal se hace uso de la función matemática sin(@) incluida en las librerías de "C". Aquí se modifica la función de tal forma que la señal no tuviera valores negativos, esto porque la tarjeta PCL- 812PG, solo puede generar valores positivos, en nuestro caso se configuro para que la salida tuviese un rango de 0-10 volts como máximo, es por ello que se le dio lo que en electrónica se conoce como "OFFSET", esto es, se le sumo el valor de la variable amplitud de tal forma que cuando la función diera un valor negativo al sumarle el valor de amplitud se volviera positivo, está parte corresponde al código:

ARGUMENTO=2*PI*FREC*(At); valor=(AMPLITUD*SIN(ARGUMENTO))+AMPLlTUD;

Aquí se toma en cuenta el valor de Af (Hz), si la frecuencia es CERO, se genera una señal de C D , la cual se incrementa con un valor de Av/2 (dato dado en la ventana correspondiente), si se incrementa la frecuencia con las teclas "+" o "t" se vuelve a obtener la señal senoidal. Un ejemplo de la señal obtenida es la siguiente:

26

Page 29: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

0 SEÑAL CUADRADA.

Para generar esta señal se hizo uso de un procedimiento similar al de la señal senoidal, solo que se modifica el valor generado por esta función, si el valor generado es mayor que O, entonces el voltaje dado es 2 veces la amplitud dada en la ventana respectiva, esto porque el valor dado originalmente es pico-pico. Es decir que solo se generan 2 valores:

- 2*Amplitud. De igual forma que la señal anterior, si la frecuencia es cero, se obtiene una señal de CD. También se puede variar la amplitud y la frecuencia.

- o volts y

Un ejemplo de esta señal es la siguiente:

27

Page 30: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

0 SEÑAL TRIANGULAR.

Para generar esta señal, se dividió la señal en 2 partes, la primera corresponde a una recta de pendiente positiva y la otra es una recta con pendiente negativa, de tal forma que al unirlas tuvieran la forma de la señal triangular. De manera grafica, se tendría lo siguiente:

Donde: A = Amplitud To = l/f0 = Periodo de la señal.

* To

De manera matemática, se obtienen 2 rectas con su función matemática:

Recta y1 : yl=2*A*fo* x Recta y2: y2= - 2*A*fo*x + 2*A

Para cada una de ellas se implemento código para su generación, se recordara que en apartados anteriores se menciono que para este tipo de señal se pide como dato adicional el número de muestras, que debería ser par, bueno, pues es aquí donde se aplica este dato, porque se trata de que ambas rectas se generen con el mismo número de muestras de tal forma que sean similares entre sí. Cabe destacar que entre más grande sea este número de muestras, mejor resolución tendrá la señal que se genere.

Aquí también se puede modificar la amplitud y la frecuencia, si la frecuencia es cero, se obtiene una señal cuadrada con la amplitud que se dio al inicio.

Un ejemplo de la señal triangular es la que se muestra en la página siguiente.

28

Page 31: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

29

Page 32: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

#include<stdlib.h> //LIBRERIAS DE CABECERA #include<stdio.h> #include<graphics.h> #include<math.h> #includecconio.h> #include<ctype.h> #include<bios.h> #include<dos.h>

#define PI 3.141592654 #define DELTA-t 0.04 //PERIODO DE MUESTREO. #define AMP" 5 lNolts

#define BASE 0x300 //PUERTO DE SALIDA #define FREC-MAX 10E03 //Hz

void Genera-Datos-SenoidaI(void); NDECLARACION DE FUNCIONES void Genera-Datos-Cuadrada(void); void Genera-Datos-Triangular(v0id); void Genera-Datos-CD(void); int Regla-de-3(double valor); void Limpia-arreglo(); void Conv-Binario(int valor); int Conv_Dec2(int arrn, int opc); void Ext-key(void); void Menu(void); void Elije(char opc); void Inicia_Modo-Grafico(void); void Grafica-Niveles(void); void Grafica(doub1e valor, int p); void Crea-Ventana(int color,int fondojnt x1 ,int y1 ,int d j n t y 2 ) ;

int CD=O, TRIANG=O, x1=50, yl=430; //DECLARACION DE VARIABLES GLOBALES int arr[l7]={0}; float num-muestras, mitad; double FREC, AMPLITUD, DELTA-t2.

Af. Av;

void Pide-Datos(int tipo) NFUNCION QUE PIDE DATOS DE LA SENAL DESEADA

Crea-Ventana(l5,0.5,5,70.20); if(tipo==l) //SOLO PARA CD { gotoxy(4,3);cprintf(" "); gotoxy(4,3);cprintf("lNTRODUZCA LOS SIGUIENTES DATOS: "); gotoxy(4,5);cprintf("AMPLTTUD INICIAL [O-IO volts]: "); scanf("%lf",&AMPLITUD); gotoxy(4,6);cprintf("INCREMENTO EN AMPLITUD[Av]: "); scanf("%Y,&Av);

{

I if(tipo==2) { gotoxy(4,3);cprintf("INTRODUZCA LOS SIGUIENTES DATOS: "); gotoxy(4,5);cprintf("AMPLITUD INICIAL [o-5 volts] pico: "); scanf("%lP',&AMPLITUD); gotoxy(4,6);cprintf("lNCREMENTO EN AMPLITUD[Av]: ");

gotoxy(4,8);cprintf("FRECUENCfA INICIAL (MAYOR A CERO]: "); scanf("%lf"&Av);

scanf("%lf".BFREC); gotoxy(4,9);cprintf("lNCREMENTO EN FRECUENCIA: "); scanf("%lf".&Af);

I Av=Av/2;

{

cprintf(">=NUMERO DE MUESTRAS POR PERIODO (NUMERO PAR): "); gotoxy(4,11);

scany"%f",&num-muestras); FREC=FREC'2; DELTA-t2=1/(FREC'n~m-muestras); gotoxy(4,12); cprintf("VEL VALOR DE DELTA-t2 MODIFICADA ES: %If" , DELTA-t); mitad=num-muestras/2; AvzAv?;

if(TRIANG==l) //SOLO PARA TRIANGULAR

I ' I

...

30

Page 33: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

1

I

I'

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / PARA UNA SERAL DE CD

/"""""""""*.~...~~~*~~*..*~*"**~~**"*""* *I I

void Genera-Datos-CD(void)

int p, val=O, nivel, baja,alta;

for(p=50;pc630;p++)

I

I gotoxy(30,1);printf("-SE;YAL DE CD--"); gotoxy(l,3);printf(">>AMPLITUD= [%lq volts pico",AMPLITUD); gotoxy(l,4);printf("Av= [%MI volts".Av); gotoxy(l,5);printf(">>FRECUENCIA= [%I4 Hz",FREC); gotoxy(1 .B);printf("Af= [%I9 Hz",Af); gotoxy(50,6);printf("PRESlONE ESC PARA SALIR);

nivel=Regla-de-3(AMPLITUD); Conv-Binario(nive1); baja=Conv_Dec_2(arr,I); PPARA OBTENER LA PARTE BAJA*/ alta=Conv_Dec_2(arr,2); /'PARA OBTENER LA PARTE ALTA*/

outport(BASE+4,baja); /*SE ENVIA LA PARTE BAJA AL CANALI'I outport(BASE+5,alta); /*SE ENVIA LA PARTE ALTA AL CANALIV outport(BASE+6,baja); /'SE ENVIA LA PARTE BAJA AL CANAL27 outport(BASE+7,alta); /*SE ENVIA LA PARTE ALTA AL CANAL27

Grafica(AMPLITUD,p); if(p==629) { cleardevice(); Grafica-Niveles(); p=50; 1 val=bioskey(l); //DETECTA SI SE HA PRESIONADO if(val!=O) //CUALQUIER TECLA. { //SI ES ASI, LLAMA A LA FUNCION

I //ES LA QUE SE PIDE PARA SALIR. Ext-key(); //Ext-key() PARA VERIFICAR SI

/~"""."~."'~""~'.~**~***"~."*~~." /*

/ PARA UNA SERAL SENOIDAL *I

/"*""-****-~*-~"*"****-**~-* / void Genera-Datos-SenoidaI(void)

double At=O, ARGUMENTO, valor; int p, val=O, nivel, baja,alta;

for(p=50;p<630;p++)

{

{ ARGUMENTO=2*PloFREC'(At); valot=(AMPLITUD*sin(ARGUMENTO))+AMPLlTUD; At=(p+l)'DELTA-t;

gotoxy(30,l);printf("--SEYAL SENOIDAL-"); gotoxy(l,3);printf(">>AMPLITUD= [%I9 volts pico".AMPLITUD); gotoxy(l,4);printf("Av= [%I volts",Av); gotoxy(l,5);printf(">>FRECUENCIA= [%lq Hz",FREC); gotoxy(1 .6);printf("Af= [%lq Hz",Af); gotoxy(50,6);printf("PRESIONE ESC PARA SALIR);

nivel=Regla-de-3(valor); Conv-Binario(nive1); baja=Conv-Dec-2(arr,I); /TARA OBTENER LA PARTE BAJA*/ aIta=Conv_Dec_2(arr,2); /*PARA OBTENER LA PARTE ALTA*/

3 1

Page 34: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

outport(BASE+4,baja); /'SE ENVIA LA PARTE BAJA AL CANAL17 outport(BASE+5,alta); /.SE ENVlA LA PARTE ALTA AL CANALIY outport(BASE+6,baja); PSE ENVIA LA PARTE BAJA AL CANAL2.I outport(BASE+7,alta); /*SE ENVIA LA PARTE ALTA AL CANAL27 Grafica(valor,p); if(p==629) I cleardevice(); Grafica-Niveles(); p=50;

I x1=49;

vaI=bioskey(l); NDETECTA SI SE HA PRESIONADO if(val!=O) {

//CUALQUIER TECLA. //SI ES ASI, LLAMA A LA FUNCION

I //ES LA QUE SE PIDE PARA SALIR. Ext-keyO; //Ext-key() PARA VERIFICAR SI

1 I

/~.~**.*"nn*"*t.nmmrrcr*+n***mrr+x /

/'****""""*'*"~""~.*,."""*".*~.~~~, void Genera-Datos-Cuadrada(void)

double AGO, ARGUMENTO, valor; int p, val=O, nivel, baja,alta;

for(p=50;p<630;p++) { ARGUMENTO=2*PI*FREC'(At); valor=(AMPLITUD*sin(ARGUMENTO))+AMPLlTUD; At=(p+l)'DELTA-t;

if(valor>AMPLITUD) valot=AMPLITUD?; else valor=O;

if(CD==l&&FREC==O) valor=AMPLITUD;

gotoxy(X),l);printf("--SEYAL CUADRADA-"); gotoxy( 1,3);printf(">>AMPLlTUD= [%g volts pico",AMPLITUD); gotoxy(l,4);printf("Av= [%lfJ volts",Av);

gotoxy(1 ,6);printf("Ak ["MI Hz".Af); gotoxy(1 .5);printf(">>FRECUENCIA= [%If] Hz",PREC);

gotoxy(50,6);printf("PRESlONE ESC PARA SALIR");

/* PARA UNA SEÑAL CUADRADA Y

{

nivel=Regla-de-3(valor); Conv-Binario(nive1); baja=Conv-Dec-Z(arr,l); /*PARA OBTENER LA PARTE BAJA*/ alta=Conv_Dec_2(arr,2); /*PARA OBTENER LA PARTE ALTA*/

outport(BASE+4,baja); /*SE ENVlA LA PARTE BAJA AL CANAL17 outport(BASE+5,alta); /*SE ENVIA LA PARTE ALTA AL CANAL14 outport(BASE+G,baja); /*SE EWIA LA PARTE BAJA. AL CANAL2*/ outport(BASE+7,alta); B E ENVlA LA PARTE ALTA AL CANAL2*/

Grafica(valor,p); if(p==629) { cleardevice(); Grafica Niveles(); -

x1=48; p=50;

I val=bioskey(l); if(val!=O) { Ext-keyO;

I 1

1

NDETECTA SI SE HA PRESIONADO //CUALQUIER TECLA.

//Ext-key() PARA VERIFICAR SI NSI ES ASI, LLAMA A LA FUNCION

//ES LA QUE SE PIDE PARA SALIR.

32

Page 35: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

~~~.*.~..~"."""*",","*~*~*"***.*"~~*~*~ / /* / " " * * * * ~ " ~ " ~ * ~ * " ~ ~ ~ * ~ * * * ~

PARA UNA SENAL TRIANGULAR */ /

void Genera-Datos-Triangular(void) { double At=O. valor; inti, p=SO, val, nivel, baja,alta;

while(p<630) I AFO; for(i=O;ic=mitad;i++) //RECTA CON PENDIENTE POSITIVA {

At=(i+l)'DELTA-t2; valor=2*AMPLITUD*FREC*At;

gotoxy(30,l);printf("-SEYAL TRIANGULAR--"); gotoxy(l,3);printf(">>AMPLITUD= [%lfj volts pico".AMPLITUD); gotoxy(l,4);printf("Av= [%I f ] volts",Av); gotoxy(1 .S);printf(">>FRECUENCIA= [%I4 Hz",FREC);

gotoxy(1,7);printf("EL NUMERO DE MUESTRAS ES: %f',num-muestras); gotoxy(1 .6);printf("A+ [%lo Hz",Af);

gotoxy(W,6);printf("PRESIONE ESC PARA SALIR);

nivel=Regla-de-3(valor); Conv-Binario(nive1); baja=Conv_Dec_2(arr,I); /'PARA OBTENER LA PARTE BAJA*/ alta=Conv-Dec-2(arr,2); /*PARA OBTENER LA PARTE ALTA*/

outport(BASE+4,baja); /"SE ENVIA LA PARTE BAJA AL CANALIY outport(BASE+S.alta); PSE ENVlA LA PARTE ALTA AL CANALIV outport(BASE+6,baja); /%E E M LA PARTE BAJA AL CANAL27 outport(BASE+7,alta); /*SE ENVlA LA PARTE ALTA AL CANAL27

Grafica(valor,p); p++; if(p==629) I cleardevice(); Grafica-Niveles();

x1=48; p=so;

I val=bioskey(l); //DETECTA SI SE HA PRESIONADO if(val!=O) //CUALQUIER TECLA. I //SI ES ASI, LLAMA A LA FUNCION

1 //ES LA QUE SE PIDE PARA SALIR. Ext-key(); //Ext-keyO PARA VERIFICAR SI

I

for(i=mitad+l;i<=num-muestras;¡++) //RECTA CON PENDIENTE NEGATIVA f valor=(-2)*AMPLITUD'FREC*At+(2*AMPLITUD); Al=(i+l)'DELTA-t2;

if(FREC==O) valor=AMPLITUD;

gotoxy(30,l);printf("-SBAL TRIANGULAR-"); gotoxy(l,3);printf(">>AMPLlTU~ [%m volts pico",AMPLITUD); gotoxy(l,4);printf("Av= [%M volts",Av); gotoxy(1 ,S);printf(">>FRECUENCIA= [%I9 W,FREC); gotoxy(1 ,6);printf("A+ [%M Hz",Af); gotoxy(l,7);printf("EL NUMERO DE MUESTRAS ES: %P',num-muestras); gotoxy(50,6);printf("PRESlONE ESC PARA SALIR");

nivel=Regla-de-3(valor); Conv-Binario(nive1);

alta=Conv-Dec-2(arr.2); PPARA OBTENER LA PARTE ALTA*/ baja=Conv_Dec_2(arr,?); PPARA OBTENER LA PARTE BAJA*/

// outport(BASE+4,baja); /*SE ENVIA LA PARTE BAJA AL CANAL17 // outport(BASE+S.alta); PSE ENVlA LA PARTE ALTA AL CANALIV

33

Page 36: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

// outport(BASE+6,baja); /*SE ENWA LA PARTE BAJA AL CANALZ'I // outport(BASE+7,alta); /'SE ENWA LA PARTE ALTA AL CANAL2'I

Grafica(valor, p); p++; if(p==629) { cleardevice(); Grafica-Niveles(); p=50; x1=48;

I vaI=bioskey(l); //DETECTA SI SE HA PRESIONADO if(val!=O) //CUALQUIER TECLA.

//SI ES ASI, LLAMA A LA FUNCION Ext-key(); //Ext-keyO PARA VERIFICAR SI

I I //ES LA QUE SE PIDE PARA SALIR.

I I

void Modifica-Deb-t(void) { /¡TRIANGULAR

1 DELTA~tZ=l/(FREC*nurn-rnuestras);

/MODIFICA LA DELTA PARA UNA SEÑAL

int Regla-de-J(double valor) //CALCULA EL NIVEL CORRESPONDIENTE

double part-dec, part-ent, aux; int result;

aux=valor'409.5; part-dec=modf(aux,&part-ent); if(part-dec>0.5) { part-ent=part-ent+l; result=(int)(part-ent);

I else

return(resu1t); result-(int)(part-ent);

{ //AL VALOR PEDIDO

I

void Limpia-arreglo(void) //LIMPIA EL ARREGLO DONDE SE ALMACENA

int q;

for(q=O;qc=17;q++) arr[q]=O;

{ //EL VALOR BlNARlO

I

void Conv-Binario(int valor) /'CONVIERTE A VALOR EN BlNARlO Y LO*/

doubte cociente=5, part-ent, part-dec, valor1 ; int p=O;

Limpia-arreglo();

valorl=(double)(valor):

while(cociente>=OS) I cociente=valorl/Z; part-dec=rnodf(cociente,&part-ent); if(part-dec==O)

else arr[p]=O;

valorl=part-ent; arr[p]=l;

p++;

{ /*ALMACENA EN EL ARREGLO arru */

34

Page 37: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

int Conv-Dec-Z(int arrn, int opc) { double exp=O. valor; int p=O. num, suma=O, part-alta, part-baja, salida=O;

//CALCULA LA PARTE ALTA, BAJA Y LOS //PONE EN NOTACION DECIMAL

if(opc==O) { do{ /*"***'***'*'*"** I

valor=arr[prpwv(Z,exp); /*CONVIERTE A DECIMAL*/ suma=suma+valor; exp++; p++;

}while(p<lZ);

printf("\nEL VALOR BINAR10 EN DECIMAL ES: %d.num); num=(int)(suma);

salida=num; 1 if(opc==l) { suma=O; I*-***+--"*+ / for(p=O;p<=7;p++) /*CALCULA LA PARTE BAJA'/ {

valor=arr[p]*pow(Z,exp); exp=p;

1 suma=suma+valor;

part-baja=(int)(suma); salida=part-baja;

1 if(opc==Z) { suma=O; exp=O; I"*"" I for(p=8;p<=l l;p++) {

/CALCULA LA PARTE ALTA*/

valor=arr[p]*pwv(Z.exp); suma=suma+valor; exp++; 1 part-alta=(int)(suma); salida=part-alta;

1 return(sa1ida); {'REGRESA EL VALOR SELECCIONADO'/

1

,*"'""""~*****"*".~"".""* I

void Ext-key(void) //PARA DETECTAR TECLAS EXTENDIDAS

int tecla;

tecla=getch();

if(tecla==27) IICHECA SI ES LA TECLA esc [ZT]

/N ESTANDAR.

I IN TERMINA EL PROGRAMA. closegraph(); Menu(); 1 if(tecla==O) { tecla=getch(); /"*"""*"' I if(tecla==72) /*AUMENTAR VOLTAJE7 I if((CD==l)&&(AMPLITUD~=lO)&&(FREC==O)~~(TRlANG==l)) { AMPLITUD = AMPLITUD +Av; if(AMPLITUD>lO)

{ printf("\nSE HA PASADO LA M A X I M A AMPLITUD."); prinlf("\nREDUZCA LA AMPLITUD O PRESIONE ESC PARA SALIR."); printf("hPRESI0NE CUALQUIER TECLA.');getch(); AMPLITUD=lO;

1 1

35

Page 38: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

else { AMPLITUD=AMPLITUD+Av;

if(AMPtlTUD>AMP-MAX) I printf("\nSE HA PASADO LA M A X I M A AMPLITUD."); DrintfhREbUZCA LA AMPLITUD O PRESIONE ESC PARA SALIR."); printf("hPRESI0NE CUALQUIER TECLA.");getch(); AMPLITUD=AMP-W;

1 1

1 if(tecla==80) //DISMINUIR VOLTAJE

AMPLITUD=AMPLITUD-Av; if(AMPLITUD<O) { printf("\nLA AMPLITUD ES NEGATIVA."); printf("\nAUMENTE LA AMPLITUD O PRESIONE ESC PARA printf("hPRESI0NE CUALQUIER TECLA.");getch(); AMPLITUD=O; 1

1 if(tecla==75) I

//DISMINUIR FRECUENCIA

FREC=FREC-Af; if(FRECc=O) I printfl"\nLA FRECUENCIA ES CERO O NEGATIVA."):

SALIR .") ;

printf("\nAUMENTE LA FRECUENCIA O PRESIONE ESC PARA SALIR."); printf("hPRESI0NE CUALQUIER TECLA.");getch();

1 FREC=O;CD=I ;

else if(TRIANG==l) Modifica-Delta-t();

1 if(tecla==77) {

//AUMENTAR FRECUENCIA

if(AMPLlTUD>AMP"J!X)

FREC=FREC+Af; AMPLITUD=AMP-MAX;

if(FREC>FREC-MAX) { printf("\nSE HA PASADO LA M A X I M A FRECUENCIA."); printf("\nREDUZCA LA FRECUENCIA O PRESIONE ESC PARA SALIR."); printf("\nPRESIONE CUALQUIER TECLA.");getch();

1 if(TRIANG==l) Modifica-Delta-t();

1

void Grafica-Niveles(void) //GRAFICA LA PANTALLA DONDE UAPARECERA LA SEÑAL

int x,y=200. nurnero=lO; char var[5];

setcolor(CYAN);

line(50,170,630,170); line(48,168,632,168); line(50,430,630,430); line(48,432,632,432); line(50,170.50.430); line(48,168,48,432); line(630,170.630,430); line(632.168,632,432);

I

line(340,170,340,430); line(50,300,630,3M));

setcolor(WH1TE);

36

Page 39: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

outte~y(l,170,'110LTS");

for(y=200;y~=400;y=y+20)

for(x=50;~~=630;x=x+3) putpixel(x,y,WHlTE);

outtextxy(30,y,var); sprintf(var,"%d,numero);

numero-;

{

void Grafica(doub1e valor, int p) NGRAFICA LOS DATOS GENERADOS POR LA FUNCION DE

double part-ent, part-dec, y, aux; int puntoy,ejex,ancho=lOO;

// y=getrnaxy()/2;

// ejex=getrnaxx(); ~400;

// setcolor(WH1TE); // line(O,y,e]ex,y);

{ //LA SEÑAL DESEADA

if(valor==O) puntoy=(int)(y);

else { aux=y-((valor'ancho)/5); part-dec=modf(aux,&part-ent); if(part-dec>0.5)

part-enl=part-ent+l ; puntov;(int)(part-ent);

I else I part-ent=part-ent-l; puntoy=(int)(part-ent);

1 1

if(p==O) yl=puntoy;

setcolor(YELL0W); line(x1 ,y1 ,p,puntoy);

1 xl=p; yl=puntoy;

void Menu(void) //PRESENTA EL MENU PRINCIPAL I char opc; do{ Crea-Ventana(l4,1,1,1,80,24);

gotoxy(29,5);cprintf('" MENU ****"'); gotoxy(25,8);cprintf("ELlJA UN TIPO DE SEÑAL:"); gotoxy(28,1O);cprintf("A) CD."); gotoxy(28,l l);cprintf("B) SENOIDAL."); gotoxy(28,12);cprintf("C) CUADRADA."); gotoxy(28,13);cprintf("D) TRIANGULAR."); gotoxy(28,16);cprintf("E) SALIR.");

textcolor(WHlTE); gotoxy(l5,20);cprintf("ELIJA UNA OPCION: "); opc=getche();getch(); opc=toupper(opc);

}while(opcc'A' 1 1 opc>'E); Elije(opc);

1

void Elije(char opc) UFUNCION QUE PRESENTA LA SECUENCIA DE LAS FUNCIONES { //DE ACUERDON A LA SENAL ELEGIDA DEL MENU

37

Page 40: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

switch(opc) { case'A':Pide-Datos(1); /*SEYAL DE CD*I

window(1 , I ,8024); Inicia-Modo-Graficoo; Grafica-Niveles(); CD=I; Genera-Datos-CD(); break;

case'B:Pide-Datos(Z); PSENAL SENOIDAL*/ window(1 ,I ,8024);

CD=O; Inicia-Modo-Grafico();

Genera-Datos-Senoidal(); Grafica-Niveles();

break;

window(1 ,I ,8024); case'C':Pide_Datos(2); /%ENAL CUADRADA*/

Inicia-Modo-Grafico(); CD=O: Grafica-Niveles(); Genera-Datos-Cuadrada(); break;

CD=1; Pide-Datos(2); window(1 , I ,8024); Inicia-Modo-Grafico(); Grafica-Niveles(); Genera-Datos-Triangular(); break;

case'D:TRIANG=l; PSENAL TRIANGULAR*/

case'E:Crea-Ventana(l5,0,5,6,60,10); /*SALIR'/ gotoxy(l7,3); cprintf("CERRAND0 PROGRAMA..."); getch0; closegraph(); clrscr(); exit( 1); break;

I

void Crea-Ventana(int color,int fondojnt x1 ,int y1 ,int x2,int y 2 ) //CREA LAS VENTANAS DONDE APARECEN I //LAS PREGUNTAS DE LAS DIFERENTES OPCIONES int p.9; //DEL MENU

window(x1 ,yl,xZ,y2); textcolor(co1or); textbackground(fondo); clrscr(); printf(" (); gotoxy((x2-xl),l);printf("~"); gotoxy(Z,(y2-yl)+l);printf("~); gotoxy((x2-xl),(yZ-y1)+I);printf("J"); for(p=4;p<=(x2-xl);p+) { gotoxy(p-I ,l);printf("="); gotoxy(p-I ,(y2-y1)+1);printf("="); 1

for(q=Z;q<=(y2-yl);q++) { gotoxy(2,q);printft"(I "); gotoxy((xZ-xl),q);printf("~~");

I 1

void Inicia-Mado-Grafico(void) //FUNCION DE INlClALlZAClON DEL MODO GRAFICO

int driver,mode,error; driver =DETECT; mode=O; detectgraph(&driver,&mode); initgraph(&driver.&rnode,"C:\Uc\\bin");

{

38

Page 41: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

error =graphresult(); if(error!=grOk) i printf("ERR0R EN LA INICIALIZACION."); getch0; exit(1);

void rnain(void) NFUNCION PRINCIPAL

clrscr(); Menu(); setch0;

{

I

39

Page 42: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

En esta sección se explicara el papel que tienen las funciones que se incluyen en el código del programa.

Anteriormente ya se menciono como actúan las funciones que generan las señales requeridas. Sin embargo para que estas actúen de manera eficiente deben de hacer uso de funciones auxiliares que tienen un papel muy importante en la eficiencia del programa como un todo.

Comenzaremos dando una explicación general de como se ejecuta el programa: Se requiere de una función que genere los datos para poder obtener la señal deseada (son las que se describieron anteriormente). Una vez que se tienen estos datos, se debe utilizar una regla de proporcionalidad (regla de 3) para que este dato este dentro del rango que la tarjeta acepta, recordemos que la tarjeta tiene una resolución de 12 bits, entonces tenemos que 10 volts ---> equivalen a 4095 que es el máximo valor que se puede representar con 12 bits. Posteriormente, se debe convertir a binario este valor, para que se pueda almacenar en un arreglo. Hecho lo anterior, se procede a tomar los 8 primeros bits que nos darán el byte bajo o parte baja, así como los 4 últimos, los cuales se rellenan con cero para formar el byte alto o parte alta. Estos 2 valores se convierten a decimal, la parte baja así como la parte alta, esto se realiza así, porque la función outport de "C", solo admite como parámetros enteros en base 10. Primero se envía la parte baja y después la parte alta. Una vez que la tarjeta tiene los 2 valores, genera la señal analógica requerida.

Para comenzar describiremos la función:

> void Modifica-Delta-t(void) Esta función modifica el valor de tiempo con el que se generan las muestras de la señal triangular de acuerdo con la frecuencia y número de muestras dadas.

> int Regla_de_3(double valor) Con esta función se realiza Io que se menciono en el segundo punto que se trato anteriormente.

> void Limpia-arreglo(void) Esta función lo Único que realiza es limpiar el arreglo donde se almacenan los datos binarios para cada muestra, cabe destacar que esta función es muy importante, porque si no se limpia, puede suceder que cuando se almacene un valor tenga todavía datos anteriores, lo cual alteraría el dato original y por consiguiente la señal será deformada, detalle que nos sucedió en el desarrollo.

> void Conv-Bin(int valor) Esta función lo Único que realiza es cambiar de notación decimal a notación binaria o base 2, lo realiza por medio de divisiones sucesivas entre 2, los valores obtenidos se almacenan en el arreglo mencionado anteriormente.

> int Conv_Dec_2(int arr[ 1, int opc) Como se menciono anteriormente, a la tarjeta se le debe enviar 2 valores conocidos como parte baja y parte alta (en este orden), esta función recibe el arreglo con los datos binarios y regresa la parte baja o la parte alta dependiendo de que valor se le pase en el parámetro opc, ese valor regresado esta listo para enviarse a la tarjeta.

> void Ext-key(void) Esta función es la encargada de habilitar a las teclas de flecha que a su vez modificaran la amplitud y la frecuencia de la señal generada. Básicamente su funcionamiento comienza cuando se esta grafcando y se presiona cualquiera de las 4 teclas de flecha "t -+? & " o la tecla ESC, donde esta última indica que se desea salir, estas teclas están validadas de tal forma que si se presiona otra tecla diferente a las mencionadas, no sucede ningún cambio.

40

Page 43: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Aquí cabe recordar que las teclas usadas pertenecen al código ASCII extendido, esto es que su código está formado por 2 números en vez de 1 solo como sucede con otras, por ejemplo: CODIGO TECLA 0-72 ? 0-80 & 0-75 t 0-77 -+ 27 ESC Por lo tanto primero se lee un O y después se lee el número que le corresponde y mediante comparaciones se elige la opción que el usuario desea realizar. Aquí es donde se valida tanto la amplitud como la frecuencia en sus valores máximos y mínimos, cuando se alcanza alguno de ellos se genera un aviso y se mantiene un valor máximo o mínimo dependiendo del valor alcanzado, recordemos que no son permitidos: * Amplitudes mayores a 1 O volts * Amplitudes menores a O volts * Frecuencias menores a O Hz. * Frecuencias mayores a 1 O0 Khz.

> void Grafica-Niveles(void) Esta función genera y grafica la pantalla donde se mostrara la señal generada, es llamada y ejecutada antes de graficar la señal.

> void Grafica(doub1e valor, int p) Esta función es la encargada de graficar la señal requerida, recibe como parámetros el valor que se graficara así como el pixel en la pantalla donde se colocara, esta función hace uso de las variables globales x1 y y1 donde están almacenados los datos del punto anterior, de tal forma que no se pierda la continuidad de la seiial y después actualiza estos valores.

> void Menu(void) Esta es la primer ventana que aparece y donde esta el menú principal con el tipo de señales a generar además de la opción salir del programa, una vez que se hizo la elección se manda a llamar a la función Elijeo, la cual se explica a continuación.

> void Elije(char opc) Esta función se encarga de llevar el control de la opción elegida, aquí se llaman e inician las variables globales así como el orden que seguirán las funciones necesarias.

> void Crea-Ventana ( ) Esta función lo Único que realiza es crear una ventana con marcos, donde se presentan los datos requeridos.

> void Modo-Grafico(void) Esta función fue diseñada para inicializar el modo gráfico de la pantalla, para poder graficar la señal requerida.

k void main(void) Aquí es donde comienza la ejecución del programa, es la función principal.

41

Page 44: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Durante el desarrollo del proyecto se encontraron algunos problemas los cuales se tuvieron que afrontar y resolver para poder continuar con el mismo.

Entre los principales, enumeramos los siguientes:

Tuvimos algunos problemas, para realizar la configuración de la tarjeta, ya que la mayoría de las tarjetas de este tipo se utilizan por lo regular para adquirir datos y después procesarlos, en nuestro caso se hizo lo contrario, es decir, se utilizo la tarjeta para generar datos, en este caso una señal analógica.

Otros problemas se presentaron cuando se realizo la programación, básicamente con el envío de información al puerto de salida dado que lo que se obtenía no correspondía a lo que se pedía, esto se soluciono limpiando un arreglo donde se almacenan los datos binarios antes del envío al puerto, de tal forma que para cada conversión de los datos este arreglo estuviese limpio o vacío.

Existe un detalle que no fue posible solucionar y que se puede decir que afecta de manera directa el desempeño del proyecto, en apartados anteriores se menciono que el tipo de procesador afecta la frecuencia de salida de la señal generada por la tarjeta y el programa. Se encontró que entre más rápido sea el procesador, la frecuencia que se obtiene es más alta, es decir la velocidad del procesador es proporcional a la frecuencia de salida.

Una posible explicación que se puede dar consiste en considerar que la tarjeta trabaja a cierta velocidad, la cual es proporcionada por la velocidad con la que se envían los datos, ahora, esos datos son enviados y generados por un programa en lenguaje "C", el cual funciona más rápido si el procesador es más rápido, por lo tanto los datos se enviaran con una frecuencia más alta. El programa fue desarrollado para trabajar con una PC como la que se menciona en el apartado Equipo requerido, y cuenta con procedimientos para controlar la frecuencia pero cuando se usa en otra máquina este procedimiento no es válido, por el problema antes mencionado. Esto no sucede con la conversión N D , es decir si se usara para adquirir datos, porque la tarjeta cuenta con un timer el cual controla la frecuencia de adquisición de datos y esta es independiente de la frecuencia del procesador, cosa que no sucedió en nuestro caso. Consideramos que este programa funcionaría mejor si se estableciera una máquina donde se instale la tarjeta y se trabaje ahí de manera permanente.

Como se sabe de la teoría de comunicaciones, para poder recuperar correctamente una señal a -x partir de sus muestras se debe tener por lo menos 2 muestras por ciclo de la señal para poder ?-. .?

conservar las características de la forma de onda en tiempo (Teorema de Nyquist). Debido a lo anterior no es posible obtener frecuencias más allá de fmuestre,J2 por la restricción que nos impone el procesador utilizado en cuanto al tiempo de procesamiento de cada muestra.

;; I '

42

Page 45: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

En el desarrollo de este proyecto se encontraron muchos detalles que en la práctica si influyen en el desarrollo de algún dispositivo, se puede decir que nos enfrentamos con un hecho real y con obstáculos reales, que muchas veces se consideran sin importancia dado que no afectan mucho, sin embargo en la realidad no se pueden permitir tales fallas y es necesario corregir estos detalles, tal fue el caso de la señal que se generaba en un principio, la cual presentaba algunas distorsiones y muchas veces sus características no eran las que se pedían.

Por otro lado, como lo que se realizo fue un programa, se debió pensar como si uno fuera el usuario, de tal forma que el software fuera amigable; es decir, el usuario inexperto (pero con ciertos conocimientos de electrónica) no tuviera problemas para poder manipular el programa, aunado a esto que los datos que se pidieran fueran realizados de manera clara y precisa para evitar confusiones.

La mayoría de los programas, en cuanto al código del mismo se refiere, debe estar estructurado para que se pueda modificar y actualizar, sin hacer muchos cambios, es decir para realizar nuevas versiones de acuerdo a las nuevas realidades y necesidades que en un futuro se pudiesen tener, este fue otro detalle al que se tuvo que hacer frente, dado que programar no es algo fácil, pero en nuestro caso se hizo uso de las funciones, las cuales realizan pequeñas operaciones que en conjunto solucionan nuestra tarea.

Creemos que la realización de este proyecto conjuga los conocimientos que se han adquirido en cuanto a electrónica, comunicaciones y sistemas digitales, con los que se tienen relacionados a la programación; en este caso aplicados a una necesidad real como lo es la realización de un generador de funciones digital.

43

Page 46: DISEÑO DE UN GENERADOR DE FUNCIONES DE …148.206.53.84/tesiuami/UAM3665.pdf · "DISEÑO DE UN GENERADOR DE FUNCIONES DE PRECISION UTILIZANDO LA TARJETA PCL-812PG." 1 , ,. i . 1

Para la realización del presente proyecto, revisaron varias fuentes bibliográficas, incluyendo algunas páginas de Internet.

En nuestro caso, se hizo uso de los siguientes materiales bibliográficos:

- “Turbo C/C++ 3.1 Manual de referencia” Schildt, Herbert Ed. McGraw Hill 1994

- “Manual de operación del generador de funciones CFG250 de Tektronix”

- “Manual de operación de la tarjeta de adquisición de datos PCL-812PG”

Así como del contenido de las siguientes páginas electrónicas:

- http://webdiee.c~m.~t~sm.m~eb/servi~~os/archivo/tutoriales/~enera~o~/ - http://www.ii.ua.es/-gdrÍvera/labetciÍ/Prac DAC.htm

Las cuales hablan principalmente de convertidores digitales.

44