Universidad de Costa Rica Facultad de Ingeniería Escuela de Ingeniería Eléctrica. Sistema de Pruebas para Circuitos Integrados

112  Download (0)

Full text

(1)

Universidad de Costa Rica

Facultad de Ingeniería

Escuela de Ingeniería Eléctrica

IE – 0502 Proyecto Eléctrico

Sistema de Pruebas para Circuitos Integrados

Por:

Carlos Roberto Córdoba Bonilla

Ciudad Universitaria Rodrigo Facio

(2)

ii

Sistema de Pruebas para Circuitos Integrados

Por:

Carlos Roberto Córdoba Bonilla

Sometido a la Escuela de Ingeniería Eléctrica de la Facultad de Ingeniería

de la Universidad de Costa Rica

como requisito parcial para optar por el grado de:

BACHILLER EN INGENIERÍA ELÉCTRICA

Aprobado por el Tribunal:

_________________________________ Ing. Roberto Rodríguez Rodríguez

Profesor Guía

_________________________________ _________________________________ Ing. Teodoro Jose Wilink Castro Ing. Rodrigo García León Profesor lector Profesor lector

(3)

iii

DEDICATORIA

A mis padres Claudio y Cecilia, porque sin ellos no hubieras sido

posible llegar hasta aquí.

(4)

iv

INDICE GENERAL

INDICE DE FIGURAS ... v INDICE DE TABLAS ... vi RESUMEN ... vii CAPÍTULO 1: Introducción ... 1 1.1 Objetivos ... 2 1.1.1 Objetivo General... 2 1.1.2 Objetivos Específicos ... 2 1.2 Metodología ... 2

CAPÍTULO 2: Marco teórico ... 3

CAPÍTULO 3: Desarrollo ... 6

3.1 Interfaz con el usuario ... 6

3.1.1 Pantalla de 4 dígitos de 7 segmentos ... 6

3.1.2 Botoneras de selección ... 9

3.1.3 LED de finalización de Prueba ... 10

3.2 Pines de prueba y componentes extra ... 12

3.2.1 Pines de prueba ... 12

3.2.2 Componentes extra ... 13

3.3 Programación del microcontrolador ... 14

3.3.1 Programador y herramientas de programación ... 14

3.3.2 Maquina de estados ... 16

3.3.3 Pruebas para circuitos integrados digitales ... 17

3.4 Pruebas para circuitos analógicos ... 27

3.4.1 Pruebas de seguimiento de entrada ... 27

3.4.2 Pruebas de corroboración de oscilación ... 29

CAPÍTULO 4: Conclusiones y recomendaciones ... 32

4.1 Conclusiones ... 32

BIBLIOGRAFÍA ... 33

(5)

v

INDICE DE FIGURAS

Figura 3.1 Diagrama de sistema de displays ... 8

Figura 3.2 Conexión de botoneras ... 9

Figura 3.3 Resistencia de pullup -interna del microcontrolador ... 10

Figura 3.4 Diagrama de conexión de LED de finalización ... 11

Figura 3.5 Conexión de componentes para base de LM555 ... 13

Figura 3.6 Conexión de microcontrolador a puerto paralelo ... 14

Figura 3.7 Conexión a puerto serial de pines RXD y TXD para uso de la uart ... 15

Figura 3.8 Diagrama de Flujos de la maquina de estados ... 16

Figura 3.9 Descripción de pines de 74HC04... 18

Figura 3.10 Diagrama de Flujos de la prueba digital del 74hc04 ... 22

Figura 3.11 Resumen de información para programación de pruebas digitales ... 23

Figura 3.12 Diagrama de de flujo de la función atraso ... 25

Figura 3.13 Diagrama de flujo de las funciones bueno y malos ... 26

Figura 3.14 Diagrama de buffer para pruebas de seguimiento de entrada ... 27

Figura 3.15 Secuencia de pasos para pruebas de buffers ... 28

Figura 3.16 Diagrama de Flujo de las pruebas de seguimiento ... 28

(6)

vi

INDICE DE TABLAS

Tabla 2.1 Representaciones binarias, decimal y hexadecimal de los números del cero

al dieciséis. ... 3

Tabla 2.2 Ejemplo de asignación de puertos de entrada y salida... 4

Tabla 2.3 Asignación de puertos de salida o entrada del microcontrolador ... 4

Tabla 2.4 Asignación de Puertos de entrada salida y su valor ... 5

Tabla 3.1 Forma de desplegar los circuitos integrados digitales ... 6

Tabla 3.2 Forma de desplegar circuitos integrados analógicos ... 7

Tabla 3.3 Puertos del microcontrolador para manejo de displays ... 8

Tabla 3.4 Puertos del microcontrolador para uso con las botoneras ... 10

Tabla 3.5 Puerto del microcontrolador para LED de finalización ... 11

Tabla 3.6 Asignación de Pines para pruebas digitales ... 12

Tabla 3.7 Circuitos Integrados a los cuales se les diseñaron pruebas ... 17

Tabla 3.8 Asignación de pines para prueba del 74HC04 ... 19

Tabla 3.9 asignación de puertos de entrada salida para prueba 74HC10 ... 19

Tabla 3.10 Primera asignación valores de puertos para prueba de 74HC74 ... 19

Tabla 3.11 Mascara para prueba digital de 74HC04 ... 20

Tabla 3.12 Salida de pines de prueba de 74HC04 ... 20

Tabla 3.13 Segunda asignación valores de puertos para prueba de 74HC74 ... 21

(7)

vii

RESUMEN

La implementación del sistema de pruebas para circuitos integrados se llevo a cabo utilizando el microcontrolador Atmega16, para este se utilizaron varias herramientas de programación de software libre así como librerías específicas para la programación del Atmega16. Se diseño una interfaz de usuario la cual permitiera realizar las pruebas sin necesidad de ninguna otra herramienta. La finalidad de este sistema de pruebas era la de probar circuitos integrados de uso común en los laboratorios de las diferentes ramas de electrónica.

Con estas herramientas se programó el microcontrolador de manera que pudiera interactuar con los diferentes componentes los cuales formaban parte del sistema de pruebas. Una vez que este funciono de la manera que se deseaba se procedió a generar una serie de pruebas para diferentes circuitos integrados tanto digitales como analógicos.

Luego de varias pruebas se pudo concluir que el sistema de conmutación que se tenía pensado utilizar para los circuitos analógicos no funcionaria por lo que se procedió a generar pruebas para los mismos pero con conexiones separadas. La documentación de todo el diseño se presenta en este documento así como las diferentes partes del proceso el cual se realizo para generar el sistema de pruebas.

(8)

1

CAPÍTULO 1: Introducción

Los laboratorios de electrónica tienen una función muy importante para concretar conceptos vistos en los diferentes cursos teóricos de la carrera de Ingeniería Eléctrica, los diferentes componentes que se utilizan para el diseño de los laboratorios son la base para poder concretar los objetivos de estos laboratorios. Sin embargo no existe un sistema que permita discriminar cuales de los circuitos integrados, ya sea digitales o analógicos, se encuentran funcionando correctamente antes de comenzar a realizar el montaje de lo previamente diseñado. Por esta razón en el presente proyecto se pretende realizar un sistema que permita probar los circuitos integrados de uso mas común en los laboratorios de electrónica. Se tomara como base para las pruebas el microcontrolador Atmega16 el cual se utiliza en el curso de laboratorio de microcontroladores en la escuela de ingeniería eléctrica.

La familiarización con el microcontrolador era una etapa preliminar a la implementación en si del sistema de pruebas, al hacer esto se buscaba hacer más fácil las consecuentes partes de diseño e implementación del sistema de pruebas.

Una vez que se esté familiarizado completamente con el microcontrolador se diseño las diferentes pruebas aprovechándose de las funcionalidades del microcontrolador. Las pruebas para los circuitos digitales corroboran sus tablas de verdad, Mientras que las pruebas analógicas utilizan el convertidor analógico digital para analizar las salidas de los diferentes circuitos de los cuales se realizan pruebas.

(9)

2

1.1 Objetivos

1.1.1 Objetivo General

Generar un sistema de pruebas de circuitos integrados basado en el microcontrolador Atmega16.

1.1.2 Objetivos Específicos

- Familiarizarse con el microcontrolador Atmega16, la forma de programarlo y sus funciones y capacidades

- Realizar un sistema de pruebas de los circuitos integrados uso común en los laboratorios de Ingeniería Eléctrica, basándose en las capacidades del microcontrolador Atmega16.

1.2 Metodología

Se combinaron dos métodos para el desarrollo del proyecto, el diseño de digital basado en maquinas de estado y su aplicación en lenguaje de programación C, además la implementación física utilizando circuitos integrados digitales y componentes analógicos para el sistema de pruebas, las cuales debían corresponder con la programación para generar el sistema de pruebas en su totalidad

(10)

3

CAPÍTULO 2: Marco teórico

Se hace necesario tener claros varios conceptos los cuales son utilizados en el desarrollo de este proyecto. Primeramente se debe tener claro las diferentes representaciones en diferentes bases para ciertos números, en específico las representaciones binarias, decimales y hexadecimales de los números de la base hexadecimal, estos se presentan en la siguiente tabla.

Tabla 2.1 Representaciones binarias, decimal y hexadecimal de los números del cero al dieciséis.

Binario Decimal Hexadecimal

0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 10 A 1011 11 B 1100 12 C 1101 13 D 1110 14 E 1111 15 F

El microcontrolador que se utilizó fue el Atmega16, se explican a continuación algunos conceptos de la programación del mismo que son necesarios para comprender el desarrollo del proyecto.

(11)

4

El microcontrolador tiene 32 pines que pueden funcionar como de salida y entrada, para asignar cuál de estas dos funciones tienen cada pin se les asigna valores binarios de la siguiente manera.

DDRA=0xA8

Tabla 2.2 Ejemplo de asignación de puertos de entrada y salida.

Donde el valor de un uno lógico corresponde a asignar el puesto como de salida y un cero lógico corresponde a asignar el pin como de entrada. Luego de la asignación de entrada o de salida se hace la asignación de un valor de la siguiente forma.

PORTA=0x0F

En este caso los valores correspondientes en los puertos de salida asignan valores lógicos de uno o de cero mientras que en los puertos de entrada un valor de uno lógico activa la resistencia de pullup.

Tabla 2.3 Asignación de puertos de salida o entrada del microcontrolador

Resumiendo las dos tablas anteriores tenemos podemos saber cada una de las funciones de los pines.

Parte alta Parte baja Puerto A7 A6 A5 A4 A3 A2 A1 A0

Asignación 1 0 1 0 1 0 0 0

Parte alta Parte baja Puerto A7 A6 A5 A4 A3 A2 A1 A0

(12)

5

Tabla 2.4 Asignación de Puertos de entrada salida y su valor

Puerto DDRA PORTA Asignación

A0 0 1 Puerto de entrada con pullup activo

A1 0 1 Puerto de entrada con pullup activo

A2 0 1 Puerto de entrada con pullup activo

A3 1 1 Puerto de salida con uno lógico

A4 0 0 Puerto entrada sin pullup

A5 1 0 Puerto de salida con cero lógico

A6 0 0 Puerto entrada sin pullup

A7 1 0 Puerto de salida con cero lógico

Una vez asignado si el puerto es de salida o de entrada y también su valor, se puede preguntar sobre los valores de los puertos de salida, para esto se utilizan mascaras de la siguiente manera.

(PINA & 0x03)== 0x00)

En este caso se pregunta solamente por los pines A0 y A1 del puerto A, la y lógica entre el pin A y el valor binario permite enmascarar los valores del pin A para poder preguntar solamente por los que sea necesario.

(13)

6

CAPÍTULO 3: Desarrollo

3.1 Interfaz con el usuario

La interfaz con el usuario tiene se dividió en tres partes, el desplegué de cual integrado está siendo probado, tres botoneras las cuales tienen la funciones de iniciar la prueba y desplazarse por los diferentes integrados que es posible probar y por último el LED de finalización, de cada una de estas partes su funcionamiento y componentes utilizados se explica a continuación.

3.1.1 Pantalla de 4 dígitos de 7 segmentos

La pantalla está conformada por 4 displays de 7 segmentos con los cuales desplegan cada unos de los circuitos integrados a probar, para los circuitos integrados digítales la forma de desplegar es la siguiente.

Tabla 3.1 Forma de desplegar los circuitos integrados digitales

Para los circuitos analógicos la forma de desplegar es la siguiente. Numero de Circuito Integrado Digital Forma de desplegarlo 74HC74 7474 74LS10 7410

(14)

7

Tabla 3.2 Forma de desplegar circuitos integrados analógicos

Para este caso en donde existen circuitos integrados que solamente tienen 3 dígitos se utilizaron los tres dígitos más cercanos a la derecha dejando el primer digito de la izquierda en blanco, esto se representa en la tabla anterior con un guión bajo.

Se utilizaron 4 decodificadores de BCD a 7 segmentos (74ls47) para desplegar los diferentes dígitos en cada uno de los displays estos, estos a su vez obtienen la señal de entrada a través de cuatro latch D para poder compartir la decodificación de un solo bus de datos proveniente del microcontrolador y mantener el digito en cada pantalla, se utilizo un decodificador de 2 a 4 para generar la selección entre los latches correspondientes a cada digito.

La siguiente figura muestra las diferentes conexiones realizadas entres los componentes mencionados anteriormente y el microcontrolador.

Numero de Circuito Integrado analógicos Forma de desplegarlo LM555 _555 CD4047 4047

(15)

8

Figura 3.1 Diagrama de sistema de displays

Con las conexiones anteriormente explicadas se logro reducir la cantidad de pines de salida que se utilizan del microcontrolador para el desplegue los dígitos.

Los pines provenientes del microcontrolador utilizados para el manejo del los displays son los siguientes.

Tabla 3.3 Puertos del microcontrolador para manejo de displays

Pin del microcontrolador Función especifica

PB0 Escogencia numero PB1 Escogencia numero PB2 Escogencia numero PB3 Escogencia numero PC3 Escogencia de digito PC4 Escogencia de digito

(16)

9

3.1.2 Botoneras de selección

Se utilizaron tres botoneras, dos de ellas con la función de desplazarse por los diferentes circuitos integrados que se pueden probar, al utilizar estas botoneras la máquina de estados principal va desplegando cada uno de los números de los diferentes circuitos integrados a los cuales es posible probar, una vez que se despliega en las pantallas el numero del circuito integrado es posible comenzar con la tercera botonera la prueba para el mismo, los tres pines asignados para las botoneras fueron conectados de la siguiente manera.

Figura 3.2 Conexión de botoneras

Las botoneras se implementaron aprovechándose de una función interna de los pines del microcontrolador, los mismos se les activo resistencia de pullup interna, así se aseguró que el valor leído de cada uno de los pines sea siempre un uno lógico y solamente sea un cero lógico cuando la botonera asigna un valor de cero al cortocircuitarse con la tierra del sistema.

(17)

10

Figura 3.3 Resistencia de pullup -interna del microcontrolador

Los puertos del microcontrolador utilizados para las botoneras son las siguientes

Tabla 3.4 Puertos del microcontrolador para uso con las botoneras

Pin del microcontrolador Función especifica

PC7 Circuito siguiente

PC6 Circuito anterior

PC5 Inicio de Prueba

3.1.3 LED de finalización de Prueba

La última parte la interfaz con el usuario es el led de finalización de prueba, este es el que dice si el circuito integrado paso la prueba o por el contrario no la paso, esta parte de la interfaz tiene una conexión simple a través de una resistencia la cual se limita la corriente que pasa por el LED, la conexión se muestra en la siguiente figura.

(18)

11

Figura 3.4 Diagrama de conexión de LED de finalización

Cuando el circuito integrado paso la prueba el LED se enciende continuamente por 4 segundos, mientras que si el circuito integrado no pasa la prueba el LED parpadea repetidamente por 4 segundos. El puerto que se asigno para el LED de finalización de prueba es el siguiente

Tabla 3.5 Puerto del microcontrolador para LED de finalización

Pin del microcontrolador Función especifica

(19)

12

3.2 Pines de prueba y componentes extra

3.2.1 Pines de prueba

En el caso de los empaquetados para circuitos digitales se tomaron los más comunes de uso en el laboratorio, los cuales son los de 14 pines, en este caso se asignaron por lo tanto 12 pines de salida-entrada del microcontrolador para la realizar las pruebas, estos pines se pueden asignar tanto de entrada como de salida y por lo tanto se pueden utilizar los mismos doce para realizar una infinidad de pruebas a una gran variedad de circuitos digitales de 14 pines. Los pines del microcontrolador que se asignaron para el uso en las pruebas de circuitos integrados digitales fueron los siguientes.

Tabla 3.6 Asignación de Pines para pruebas digitales

Puerto Función A6 Pin 13 A5 Pin 12 A4 Pin 10 A3 Pin 9 A2 Pin 8 A1 Pin 7 D2 Pin 6 D3 Pin 5 D4 Pin 4 D5 Pin 3 D6 Pin 2 D7 Pin 1

Para el caso de los circuitos digitales que se están probando solamente se ocupa la alimentación y pines de entrada y salida por lo tanto con lo que respecta a montaje de pines y alimentaciones lo que se explico anteriormente es todo lo que se ocupo.

(20)

13

3.2.2 Componentes extra

Para las pruebas de componentes analógicos fue necesaria utilizar diferentes componentes extra como resistencias y capacitores, así como cortocircuitar diferentes pines para poder obtener las diferentes salidas en los diferentes circuitos integrados analógicos.

Como se utilizaron bases diferentes para cada uno de los diferentes circuitos integrados los componentes extra se conectaron directamente a los pines correspondientes. Igualmente se hizo para los cortocircuitos que se debieron conectar entre los diferentes pines.

Ls siguiente figura muestra el diagrama de conexión del LM555.

(21)

14

3.3 Programación del microcontrolador

3.3.1 Programador y herramientas de programación

Para la programación del microcontrolador se utilizaron solamente herramientas libres tanto en lo que respecta al programador físico como las herramientas de software necesarias para poder realizar la programación.

El programador físico consta de solamente un circuito integrado el cual consta de 4 latches D transparentes que se colocan entre la salida del microcontrolador y la entrada del puerto serial del la computadora.

Figura 3.6 Conexión de microcontrolador a puerto paralelo

Los pines para programación del microcontrolador se conectan como se muestra en la figura anterior, pasando como se comento anteriormente por los latches transparentes y luego a los pines 1, 2, 11 y 16 de el puerto paralelo de la computadora. Además se deben conectar los pines 20 y 21 del puerto paralelo a la tierra del microcontrolador, esto para tener una referencia entre ambos.

(22)

15

Para la programación del microcontrolador se utilizan UISP un paquete que permite la interfaz entre el microcontrolador y la computadora serial utilizando la conexión anteriormente explicada, también se utilizan dos librerías especificas para el uso con los microcontroladores de atmel como lo es el Atmega16, avr-libc y gcc-avr las cuales están disponibles en los repositorios de ubuntu.

Una última herramienta para la programación del microcontrolador se tienen con la comunicación a través de la uart, esta se hace a través de pines RXD y TXD del microcontrolador, los cuales se conectan a los pines x y x del puerto serial de la computadora como se muestra en la figura siguiente

Figura 3.7 Conexión a puerto serial de pines RXD y TXD para uso de la uart

Además de la conexión anterior el pin número 5 del puerto serial debe conectarse a la tierra del microcontrolador para tener una referencia común entre ambos.

Con esta conexión es posible recibir información proveniente de la máquina de estados generada por el microcontrolador, y por lo tanto hace la tarea de la programación más fácil. Además permite detectar funcionamientos erróneos en el proceso de la programación

(23)

16

3.3.2 Maquina de estados

Una vez que se tuvieron las herramientas necesarias para la programación el lenguaje que se utilizo es C, con el cual se genero una maquina de estados, la misma tiene la función de ir pasando por todos los estados correspondientes a las diferentes pruebas tanto de circuitos integrados analógicos como digitales.

Figura 3.8 Diagrama de Flujos de la maquina de estados

La figura anterior muestra la forma general de la máquina de estados, se redujo a 3 estados solamente para poder acomodar la imagen dentro de la pagina. La maquina se encuentra en un estado inicial correspondiente a un circuito a probar (Prueba 7004 en este caso), se

(24)

17

desplego el número correspondiente y seguidamente se pregunta sobre los pines asignados a las botoneras, estos botones tienen las tres funciones de pasar el siguiente estado correspondiente el siguiente circuito, al estado anterior y por ultimo iniciar la prueba correspondiente al estado actual.

Los circuitos integrados a los cuales se les realizaron pruebas son los siguientes

Tabla 3.7 Circuitos Integrados a los cuales se les diseñaron pruebas

Circuito Tipo 74HC04 digital 74HC08 digital 74HC10 digital 74HC20 digital 74HC30 digital 74HC32 digital 74HC74 digital LM555 analógico LM311 analógico CD4047 analógicos LM556 analógicos LM741 analógicos LM353 analógicos LM358 analógicos

3.3.3 Pruebas para circuitos integrados digitales

Las pruebas para los circuitos digitales tienen la siguiente secuencia de pasos, primeramente se escoge el lugar correcto de la alimentación, para todos los circuitos integrados digitales que se probaron tanto la alimentación como. En el caso de los circuitos digitales se asignan los pines de salida y entrada dependiendo del integrado a probar luego se coloca los valores de entrada los cuales producen la primera posible combinación de entradas de la tabla de verdad correspondiente. Y se corrobora que la salida del mismo sea el deseado para esa combinación de entradas. Como en la mayoría de los circuitos

(25)

18

integrados digitales tienen varias compuertas por cada empaquetado, se realizan las pruebas para todas las compuertas del empaquetado de forma simultánea.

El primer circuito integrado se que probo fue el 74hc04 para el cual la distribución de pines se muestra en la siguiente figura.

Figura 3.9 Descripción de pines de 74HC04

Este está conformado por 6 compuertas no, por lo tanto se pudo asignar cada uno de los pines de salida con los correspondientes pines de prueba del microcontrolador.

Las conexiones de salida del 74HC04 deben corresponder con pines de entrada del microcontrolador, mientras que los pines de entrada del 74HC04 deben asignarse como pines de salida en el microcontrolador. Para poder asignar estos valores fue necesario realizar la siguiente comparación de valores del microcontrolador con respecto a los pines del circuito integrado.

(26)

19

Tabla 3.8 Asignación de pines para prueba del 74HC04

Puerto del Atmega Numero de Pin de 74HC04 Entrada o Salida A6 6A Salida A5 6Y Entrada A4 5Y Salida A3 5A Entrada A2 4A Salida A1 4Y Entrada D2 3Y Salida D3 3A Entrada D4 2Y Salida D5 2A Entrada D6 1Y Salida D7 1A Entrada

Con esta tabla podemos ver cuales pines deben ser asignados como de salida y cuales como de entrada, porque para la prueba el valor de DDRA sería la siguiente

Tabla 3.9 asignación de puertos de entrada salida para prueba 74HC10

Puerto 7 6 5 4 3 2 1 0

DDRA 0 1 1 0 1 0 1 0 DDRD 1 0 1 0 1 0 0 0

Una vez asignados los puertos de entrada y salida para el microcontrolador se realiza la primera asignación de valores de entrada al circuito integrado.

Tabla 3.10 Primera asignación valores de puertos para prueba de 74HC74

Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 PORTD 1 1 1 1 1 1 1 1

(27)

20

En este caso todos los pines de salida del microcontrolador se colocan con un uno lógico, y los pines de entrada se colocan con resistencia de pullup activada, luego se puede corroborar los valores en los pines de salida, se tomo en cuenta que al estar activada las resistencias de pullup los pines de entrada al microcontrolador, el circuito integrado debe generar en sus salida valores iguales a cero, pues si el valor de salida es igual a uno lógico se podría estar leyendo el valor que genera la resistencia de pullup sin ningún pin conectado al puerto.Por último se corroboró el valor de los pines de salida del circuito integrado, considerando la tabla de verdad de la compuerta no y utilizando la máscara correspondiente que solamente deje pasar los valores de los pines de salida el circuito integrado. La máscara entonces sería la siguiente.

Tabla 3.11 Mascara para prueba digital de 74HC04

Puerto 7 6 5 4 3 2 1 0

Mascara A 0 0 1 0 1 0 1 0 Mascara D 0 1 0 1 0 1 0 0

En este caso los valores de todos los pines de salida deben de ser cero pues la compuerta lógica es una compuerta no. Aplicando la máscara a los puertos la salida debería ser la siguiente.

Tabla 3.12 Salida de pines de prueba de 74HC04

Puerto 7 6 5 4 3 2 1 0

Valor final 0 0 0 0 0 0 0 0 Valor final 0 0 0 0 0 0 0 0

(28)

21

Se continúa asignando los posibles valores de la tabla de verdad para poder corroborar el completo funcionamiento de las compuertas. La máscara para los valores de salida siempre es la misma pues los pines de salida para cada circuito integrado digital no cambian. La segunda asignación para la compuerta es la siguiente.

Tabla 3.13 Segunda asignación valores de puertos para prueba de 74HC74

Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 0 1 0 1 1 PORTD 0 1 0 1 0 1 1 1

Esta nueva asignación debe generar por lo tanto la siguiente salida

Tabla 3.14 Salida de pines de prueba de 74HC04

Puerto 7 6 5 4 3 2 1 0

Valor final 0 0 1 0 1 0 1 0 Valor final 0 1 0 1 0 1 0 0

Se utiliza una variable llamada z para corroborar que las diferentes asignaciones generen las salidas correspondientes. En el caso del 74hc04 la tabla de verdad solamente tiene dos posibles combinaciones de entrada por lo que se seden realizar solamente dos asignaciones. El diagrama de estados de la prueba del 74hc04 se muestra a continuación.

(29)

22

Figura 3.10 Diagrama de Flujos de la prueba digital del 74hc04

Las diferentes tablas de verdad para los circuitos integrados probados tienen más de dos posibles combinaciones de salida. Por lo que se deben hacer una mayor cantidad de

(30)

23

asignaciones y una mayor cantidad de corroboraciones, sin embargo la forma básica de las pruebas continua siendo igual que la mostrada en el diagrama de flujo anterior.

Una vez que tienen la información para realizar la prueba de corroboración, se resume en la siguiente tabla. Puerto 7 6 5 4 3 2 1 0 DDRA 0 1 1 0 1 0 1 0 DDRD 1 0 1 0 1 0 0 0 Segunda Asignación Primera Asignación Primer Valor de Salida

Segundo Valor de salida

Puerto Pin E/S

A6 6A Salida A5 6Y Entrada A4 5Y Salida A3 5A Entrada A2 4A Salida A1 4Y Entrada D2 3Y Salida D3 3A Entrada D4 2Y Salida D5 2 S Entrada D6 1Y Salida D7 1A Entrada Puerto 7 6 5 4 3 2 1 0 Mascara A 0 0 1 0 1 0 1 0 Mascara D 0 1 0 1 0 1 0 0 Puerto 7 6 5 4 3 2 1 0 PORTA 1 1 1 1 1 1 1 1 PORTD 1 1 1 1 1 1 1 1 Puerto 7 6 5 4 3 2 1 0 Valor final 0 0 0 0 0 0 0 0 Valor final 0 0 0 0 0 0 0 0 Puerto 7 6 5 4 3 2 1 0 Valor final 0 0 1 0 1 0 1 0 Valor final 0 1 0 1 0 1 0 0 Puerto 7 6 5 4 3 2 1 0 PORTA 1 0 1 0 1 0 1 1 PORTD 0 1 0 1 0 1 1 1

(31)

24

Con esta plantilla se resumió la información necesaria para realizar la prueba y por lo tanto las de más pruebas digitales se resumieron en plantillas iguales las cuales se encuentras en los anexos. Con esta plantilla de información se genero la programación de la prueba la cual se encuentra en el código total entre las líneas 1263 y 1338.

Otras Funciones se utilizaron en diferentes partes de la máquina de estados, la primera de ellas es la función de atraso, esta función genera un ciclo de una cantidad de tiempo el cual es varíale y se usó en diferentes partes de la programación. La función que cumple en las pruebas es dar un tiempo entre la asignación de los valores de entrada al circuito integrado y la salida del mismo, aunque en general los circuitos digitales tienen un tiempo de conmutación en el orden de los 15ns la prueba en totalidad depende de esta conmutación por lo que se considero prudente dar un tiempo para que sucediera. Se puede ver el código correspondiente a la función atraso en los anexos en las líneas de código 2820 hasta 2851 El diagrama de flujos de la función atraso se muestra a continuación.

(32)

25

Figura 3.12 Diagrama de de flujo de la función atraso

Dentro de la función atraso se usaron dos funciones para inicio y finalización de un contador del microcontrolador, las cuales se llaman “init y term; estas inician y finalizan en contador respectivamente. El cual cuenta hasta su valor máximo, una vez que llego a esta valor se activa la variable TIME se activa. Por lo tanto la función atraso contara 31 veces hasta su valor máximo hasta llegar al final y por lo tanto continuar con la funciones siguientes.

(33)

26

Las otras dos funciones que se usan dentro de las pruebas y que es importante tener claras su funcionamiento, son las funciones bueno() y malo() estas generan los pulsos necesarios en el LED de finalización, y diagrama de flujo se muestra a continuación.

(34)

27

Para lograr que parpadee el LED de finalización en la función malo, se pregunta por el bit menos significativo de la variable de conteo x, como este bit cambia entre cero y uno cada vez que la variable aumenta su valor total, se puede usar para apagar y prender el LED durante el tiempo que el ciclo se esté repitiendo.

3.4 Pruebas para circuitos analógicos

Para las pruebas analógicas se utilizaron diferentes bases de prueba, una por cada circuito integrado analógico. Dependiendo del tipo de circuito integrado se generados dos pruebas diferentes, las pruebas de seguimiento de entrada y las pruebas de corroboración de oscilación estas se explican a continuación.

3.4.1 Pruebas de seguimiento de entrada

Figura 3.14 Diagrama de buffer para pruebas de seguimiento de entrada

Las pruebas de seguimiento de entrada se realizaron utilizando dos funciones del microcontrolador. La primera es la capacidad de generar pulsos PWM y la segunda es el convertidor analógico digital interno del microcontrolador. Se genero un pulso PWM con ciclo de trabajo variable, este se filtra con un filtro pasivo para obtener solamente el valor DC de el pulso PWM, se genera un voltaje estable para alimentarlo a la entrada del buffer.

(35)

28

Una vez que ese valor se alimenta al buffer es leído en la salida del buffer por medio de el convertidor analógico digital y se corrobora que con sea equivalente con el valor de entrada, si es así se pasa la prueba de lo contrario no la pasa.

Figura 3.15 Secuencia de pasos para pruebas de buffers

La frecuencia de corte del filtro paso bajo se encuentra en 1.59Hz esto para asegurarse que solamente el valor DC la señal PWM no sea filtrada.

El siguiente diagrama muestra las diferentes partes de las pruebas de seguimiento.

(36)

29

El valor digital que se obtiene este referenciado al voltaje AVCC el cual es el voltaje de referencia del Convertidor analógico digital. Para corroborara que este sea correcto se acota con el valor correspondiente de la salida. Se pregunta si es mayor que un valor menor que el de entrada y luego se pregunta si es menor que un valor mayor que el de entrada.

El comparador analógico LM311 se comparo utilizando lógica digital asignando valores de entrada y corroborando sus salidas, para este circuito no se utilizaron las capacidades de PWM y ADC del microcontrolador.

3.4.2 Pruebas de corroboración de oscilación

Las pruebas de corroboración de oscilación se aplicaron a los diferentes osciladores que se probaron (LM555, CD4047, LM556) estos se conectaron de forma que generaran un pulso astable el cual se conecta un pin de entrada del microcontrolador. Luego de esto se analiza el pulso durante un periodo de tiempo para así asegurarse que el oscilador este funcionando correctamente.

Primero se usa una variable de inicio la cual se asigno dependiendo del valor inicial del la salida del oscilador, una vez asignada se compara con la nueva salida del oscilador durante un tiempo, esto para poder detectar los pulsos. Finalmente cada vez que hay un pulso se utiliza una segunda variable para contar el número total de pulsos. Si la cantidad de pulsos es igual a cero el oscilador no pasa la prueba pero si es mayor si la pasa. A continuación se muestra la el diagrama de flujo de la función de prueba para los multivibradores.

(37)

30

Figura 3.17 Diagrama de prueba de corroboración de oscilación

La variable de inicio llamada Y en el diagrama anterior se asigna dependiendo del estado inicial de la salida del oscilador, la variable A corresponde al valor de entrada del pin el cual provienen del multivibrador. Una vez que se asigna el valor de Y se pregunta por el pin A para poder corroborar que el oscilador este cambiando de valor en su salida. Finalmente cuando el tiempo de la prueba llega a su fin se pregunta por la variable c la cual presenta el numero de cambios de la salida del oscilador. Si este valor es mayor a cero el oscilador esta cambiando de valor en su salida.

(38)

31

Esta lógica se puede ver aplicada en el código en tres lugares diferentes, para la pruebas del LM555 entres las líneas 1199 y 1262, para la prueba del CD4047 entre las líneas 2374 y 2437, por ultimo para la prueba del LM556 entre las líneas 2438 y 2499.

(39)

32

CAPÍTULO 4: Conclusiones y recomendaciones

4.1 Conclusiones

Se logro generar un sistema de pruebas de una cantidad considerable circuitos analógicos como digitales de uso común en los laboratorios de Ingeniería Eléctrica, el cual es una sola unidad y una vez programado puede realizar pruebas sin necesidad de reprogramarlo.

La conmutación de componentes analógicos por medios de transistores mosfet para realizar pruebas a circuitos integrados analógicos solamente fue posible para una prueba a la vez, al implementar una segunda prueba los voltajes entre los pines de los mosfet interfieren en las prueba, por lo que se hace imposible realizarla.

Las Pruebas digitales implementadas pueden ser modificadas para probar una mayor cantidad de valores de entrada y salida de cada uno de los circuitos integrados a los cuales se les diseño prueba esto con relativa poca programación extra dentro de la máquina de estados. Igualmente realizar mejoras a las pruebas ya implementadas requiere solamente de programación del microcontrolador.

El proceso de diseño de las pruebas digitales permite que se puedan probar mas circuitos integrados digitales de los que se diseñaron pruebas es este proyecto.

Las pruebas a circuitos integrados analógicos de tipo monoestable se diseñaron con la única finalidad de corroborar que el mismo variara su salida, no se midieron tiempos en alto y en bajo.

Las capacidades de generar pulsos PWM junto con el uso del Convertidor Analógico Digital permitieron realizar pruebas con una exactitud muy alta a los amplificadores operacionales, los cuales se conectaron en configuración tipo buffer.

(40)

33

BIBLIOGRAFÍA

1. Wakerly, John F. “Diseño digital: practicas y principios “, Tercera Edición, Pearson

2. Gottfried, Byron. “Programacion en C”. Segunda Edicion, Mc Graw Hill. 3. H. Hayt, William Jr. “Analisis de Circuitos en ingeniería”. Mc Graw Hill. 4. “Librería para C de AVR”,

http://www.nongnu.org/avr-libc/user-manual/index.html.

5. Atmel Corporation. “8-bit AVR Microcontroller with 16K Bytes In-System

Programmable Flash”. Hoja de datos.

6. Texas Instrument. “MAX323, MAX232I Dual EIA-232 Drivers/Receivers”. Lamina de Datos.

7. Motorola. “SN54/ 74LS47, BCD to 7-Segment decoder/driver”. Lamina de Datos.

8. Motorola. “SN54/74LS04, Hex Inverter”. Lamina de datos.

9. Fairchild Semiconductor. “DM74LS573 Octal D-Type Latch with 3-STATE

Outputs”. Lamina de Datos.

10.Jameco Electronics. “Dual digital LED Display, LDD5121”. Lamina de datos. 11.Fairchild Semiconductor. “MM74HC138 3 to 8 Line Decoder”. Lamina de Datos.

12.ROHM Semidonductors and Electronics. “BU4052BCDual 4Channel analog

(41)

34

ANEXOS

Resumen de información para realizar programación de circuitos integrados Digitales.

Entrada Salida Mascara

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

DDRA 0 1 0 1 0 1 0 0 Mascara A 0 0 1 0 1 0 1 0 DDRD 1 0 1 0 1 0 0 0 Mascara D 0 1 0 1 0 1 0 0

Primera Asignación Primer Valor de Salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0 PORTD 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0

Segunda Asignación Segundo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 0 1 0 1 1 Valor final 0 0 1 0 1 0 1 0 PORTD 0 1 0 1 0 1 1 1 Valor final 0 1 0 1 0 1 0 0

Puerto Numero de Pin E/S

A6 6A Salida A5 6Y Entrada A4 5Y Salida A3 5A Entrada A2 4A Salida A1 4Y Entrada D2 3Y Salida D3 3A Entrada D4 2Y Salida D5 2A Entrada D6 1Y Salida D7 1A Entrada

(42)

35

Puerto Numero de Pin E/S

A6 4B Salida A5 4A Salida A4 4Y Entrada A3 3B Salida A2 3A Salida A1 3Y Entrada D2 2Y Entrada D3 2B Salida D4 2A Salida D5 1Y Entrada D6 1B Salida D7 1A Salida

Entrada Salida Mascara

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

DDRA 0 1 1 0 1 1 0 0 Mascara A 0 0 0 1 0 0 1 0 DDRD 1 1 0 1 1 0 0 0 Mascara D 0 0 1 0 0 1 0 0

Primera Asignacion Primer Valor de Salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 0 1 0 0 1 1 Valor final 0 0 0 0 0 0 0 0 PORTD 0 0 1 0 0 1 1 1 Valor final 0 0 0 0 0 0 0 0

Segunda Asignación Segundo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 0 1 1 0 1 1 Valor final 0 0 0 0 0 0 0 0 PORTD 0 1 1 0 1 1 1 1 Valor final 0 0 0 0 0 0 0 0

Tercera Asignación Tercera Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 1 0 1 1 1 Valor final 0 0 0 0 0 0 0 0 PORTD 1 0 1 1 0 1 1 1 Valor final 0 0 0 0 0 0 0 0

Cuarta Asignación Cuarta Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 1 0 0 1 0 PORTD 1 1 1 1 1 1 1 1 Valor final 0 0 1 0 0 1 0 0

(43)

36

Entrada Salida Mascara

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

DDRA 0 1 0 1 1 1 1 0 Mascara A 0 0 1 0 0 0 1 0 DDRD 1 1 1 1 1 0 0 0 Mascara D 0 0 0 0 0 1 0 0

Primera Asignacion Primer Valor de Salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 0 0 0 1 1 Valor final 0 0 1 0 0 0 1 0 PORTD 0 0 0 0 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

Segunda Asignación Segundo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 0 0 1 1 Valor final 0 0 1 0 0 0 1 0 PORTD 0 0 0 0 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

Tercera Asignación Tercera Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 0 1 0 1 1 Valor final 0 0 1 0 0 0 1 0 PORTD 0 1 0 1 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

Cuarta Asignación Cuarta Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 0 1 1 Valor final 0 0 1 0 0 0 1 0 PORTD 0 1 0 1 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

Puerto Numero de Pin E/S

A6 1C Salida A5 1Y Entrada A4 3C Salida A3 3B Salida A2 3A Salida A1 3Y Entrada D2 2Y Entrada D3 2C Salida D4 2B Salida D5 2A Salida D6 1B Salida D7 1A Salida

(44)

37

Quinta Asignacion Quinto Valor de Salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 0 0 1 1 1 Valor final 0 0 1 0 0 0 1 0 PORTD 0 1 0 1 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

Sexto Asignación Sexto Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 0 1 1 1 Valor final 0 0 1 0 0 0 1 0 PORTD 1 0 1 0 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

Setimo Asignación Setimo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 0 1 1 1 1 Valor final 0 0 1 0 0 0 1 0 PORTD 1 1 1 1 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

OctavoAsignación Octavo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0 PORTD 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0

(45)

38

Entrada Salida Mascara

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

DDRA 0 1 1 1 1 1 0 0 Mascara A 0 0 0 0 0 0 1 0 DDRD 1 1 1 1 1 0 0 0 Mascara D 0 0 0 0 0 1 0 0

Primera Asignacion Primer Valor de Salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0 PORTD 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0

Segunda Asignación Segundo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 1 1 1 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

Tercera Asignación Tercera Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 0 1 1 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 1 1 0 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

Cuarta Asignación Cuarta Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 0 1 1 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 1 1 0 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

Quinta Asignacion Quinto Valor de Salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 0 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 0 1 1 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

Sexto Asignación Sexto Valor de salida

uerto Numero de Pin E/S

A6 2D Salida A5 2C Salida A4 NC NC A3 2B Salida A2 2A Salida A1 2Y Entrada D2 1Y Entrada D3 1D Salida D4 1C Salida D5 NC NC D6 1B Salida D7 1A Salida

(46)

39

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 1 0 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 0 1 1 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

Setimo Asignación Setimo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 0 1 0 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 0 1 0 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

OctavoAsignación Octavo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 0 1 0 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 0 1 0 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

Novena Asignación Noveno Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 0 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 0 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

Decima Asignación Decimo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 1 1 0 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 0 1 1 1 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

Onceava Asignación Onceava Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 0 1 1 0 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 0 1 1 0 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

Doceaba Asignación Doceabo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 0 1 1 0 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 0 1 1 0 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

Treceaba Asignación Treceabo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 0 0 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 0 0 1 1 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

Catorceaba Asignación Catorceabo valor de salid

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 1 0 0 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 0 0 1 1 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

(47)

40 Quinceaba Asignación

Quinceabo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 0 1 0 0 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 0 0 1 0 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

Diesiseisceaba Asignación

Diseseisceabo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 0 1 0 0 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 0 0 1 0 0 1 1 1 Valor final 0 0 0 0 0 1 0 0

(48)

41

Entrada Salida Mascara

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

DDRA 0 1 1 0 1 1 0 0 Mascara A 0 0 0 1 0 0 1 0 DDRD 1 1 0 1 1 0 0 0 Mascara D 0 0 1 0 0 1 0 0

Primera Asignacion Primer Valor de Salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 0 1 0 0 1 1 Valor final 0 0 0 0 0 0 0 0 PORTD 0 0 1 0 0 1 1 1 Valor final 0 0 0 0 0 0 0 0

Segunda Asignación Segundo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 0 1 1 0 1 1 Valor final 0 0 0 1 0 0 1 0 PORTD 0 1 1 0 1 1 1 1 Valor final 0 0 1 0 0 1 0 0

Tercera Asignación Tercera Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 1 0 1 1 1 Valor final 0 0 0 1 0 0 1 0 PORTD 1 0 1 1 0 1 1 1 Valor final 0 0 1 0 0 1 0 0

Cuarta Asignación Cuarta Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 1 0 0 1 0 PORTD 1 1 1 1 1 1 1 1 Valor final 0 0 1 0 0 1 0 0

Puerto Numero de Pin E/S

A6 4B Salida A5 4A Salida A4 4Y Entrada A3 3B Salida A2 3A Salida A1 3Y Entrada D2 2Y Entrada D3 2B Salida D4 2A Salida D5 1Y Entrada D6 1B Salida D7 1A Salida

(49)

42

Entrada Salida Mascara

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

DDRA 0 1 1 1 1 1 0 0 Mascara A 0 0 0 0 0 0 1 0 DDRD 1 1 1 1 1 0 0 0 Mascara D 0 0 0 0 0 0 0 0

Primera Asignacion Primer Valor de Salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0 PORTD 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0

Segunda Asignación Segundo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 0 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0

Tercera Asignación Tercera Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 1 0 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0

Cuarta Asignación Cuarta Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 1 1 0 1 1 1 1 Valor final 0 0 0 0 0 0 0 0

Quinta Asignacion Quinto Valor de Salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 1 1 1 0 1 1 1 Valor final 0 0 0 0 0 0 0 0

Puerto Numero de Pin E/S

A6 NC NC A5 H Salida A4 G Salida A3 NC NC A2 NC NC A1 Y Entrada D2 F Salida D3 E Salida D4 D Salida D5 C Salida D6 B Salida D7 A Salida

(50)

43

Sexto Asignación Sexto Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 1 1 1 1 0 1 1 Valor final 0 0 0 0 0 0 0 0

Setimo Asignación Setimo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 0 1 1 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0

OctavoAsignación Octavo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 0 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 1 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 0 0

(51)

44

Entrada Salida Mascara

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

DDRA 0 1 1 1 1 0 0 0 Mascara A 0 0 0 0 0 1 1 0 DDRD 1 1 1 1 0 0 0 0 Mascara D 0 0 0 0 1 1 0 0

Primera Asignacion Primer Valor de Salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 1 1 1 1 1 Valor final 0 0 0 0 0 0 1 0 PORTD 0 1 1 1 1 1 1 1 Valor final 0 0 0 0 0 1 0 0

Segunda Asignación Segundo Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 1 0 1 1 1 Valor final 0 0 0 0 0 1 0 0 PORTD 1 1 1 0 1 1 1 1 Valor final 0 0 1 0 1 0 0 0

Tercera Asignación Tercera Valor de salida

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 0 1 1 0 1 1 1 Valor final 0 0 0 0 0 1 1 0 PORTD 0 1 1 0 1 1 1 1 Valor final 0 0 1 0 1 1 0 0

Puerto Numero de Pin E/S

A6 2RD Salida A5 2D Entrada A4 2CP Salida A3 2SD Entrada A2 2Q Salida A1 2Q* Entrada D2 1Q* Salida D3 1Q Entrada D4 1SD Salida D5 1CP Entrada D6 1D Salida D7 1RD Entrada

(52)

45

1 Cuarta Asignación 2 Cuarta Asignación

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 0 0 1 1 1 1 PORTA 1 1 0 1 1 1 1 1

PORTD 1 0 0 1 1 1 1 1 PORTD 1 0 1 1 1 1 1 1

3 Cuarta Asignación 4 Cuarta Asignación

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 0 0 1 1 1 1 PORTA 1 1 0 1 1 1 1 1

PORTD 1 0 0 1 1 1 1 1 PORTD 1 0 1 1 1 1 1 1

Cuarto Valor de salida

Puerto 7 6 5 4 3 2 1 0

Valor final 0 0 0 0 0 0 1 0 Valor final 0 0 0 0 0 1 0 0

1 Quinta Asignación 2 Quinta Asignación

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 0 1 1 1 1 PORTA 1 1 1 1 1 1 1 1

PORTD 1 1 0 1 1 1 1 1 PORTD 1 1 1 1 1 1 1 1

3 Quinta Asignación 4 Quinta Asignación

Puerto 7 6 5 4 3 2 1 0 Puerto 7 6 5 4 3 2 1 0

PORTA 1 1 1 0 1 1 1 1 PORTA 1 1 1 1 1 1 1 1

PORTD 1 1 0 1 1 1 1 1 PORTD 1 1 1 1 1 1 1 1

Cuarto Valor de salida

Puerto 7 6 5 4 3 2 1 0

Valor final 0 0 0 0 0 1 0 0 Valor final 0 0 0 0 1 0 0 0

(53)

46 #include <avr/io.h> 1 #include <avr/interrupt.h> 2 #include "global_ucr.h" 3 #include "timer_ucr.h" 4 #include "uart_ucr.h" 5 6 //Variables///////////////////////////////////////////////////////////// 7 8

volatile u08 estado; //valor del estado de la maquina de estados principal 9

volatile u08 time; //variable de terminar el contador ( usado por funcion "bueno") 10

volatile u08 x; //contador x ( usado por funcion "bueno") 11

volatile u08 cambio; //variable para determinar cambio en voltaje de 555 12

volatile u08 y; //variable de uso comparacion con pin de 555

13

volatile u08 z; //conteo de errores en pruebas digitales

14

volatile u08 buff; //Valor de voltaje DC Para pruebas analogicas provenientes del ADC 15

16

//Funciones///////////////////////////////////////////////////////////// 17

18

void bueno (void); //funcion de encender led para decir que esta bueno el IC 19

void malo(void); //funcion de encender led para decir que esta bueno el IC 20

void init(void); //funcion de inicio de el contador ( usado por funcion "bueno") 21

void term(void); //funcion de inicio de el contador ( usado por funcion "bueno") 22 void atraso(void); 23 24 void d7404(void); 25 void d7408(void); 26

void d7410(void); //display

27 void d7430(void); 28 void d7420(void); 29 void d7432(void); 30 void d7474(void); 31 void d_555(void); 32 void d_311(void); 33 void d4047(void); 34 void d_556(void); 35 void d_741(void); 36 void d_353(void); 37 void d_358(void); 38 39 //Pruebas analogicas// 40

SIGNAL(SIG_OVERFLOW0) {time = TRUE;} //asignacion de time a overflow de contador 0 41

ISR(ADC_vect) //Funcion de terminacion de ADC

42 { 43 switch(buff) 44 { 45 case 0x00: 46 { 47 48 if(ADCH > 0xAF) //3.5V 49

(54)

41 { 50 if (ADCH < 0xC3) 51 { 52 bueno(); 53 ADCSRA=0x00; 54 TCCR2 =0x00; 55 OCR2 =0x00; 56 57 } 58 59 else 60 { 61 malo(); 62 ADCSRA=0x00; 63 TCCR2 =0x00; 64 OCR2 =0x00; 65 } 66 67 } 68 else 69 { 70 malo(); 71 ADCSRA=0x00; 72 TCCR2 =0x00; 73 OCR2 =0x00; 74 } 75 } 76 77 } 78 } 79 80 81 void prueba7404(void); 82 void prueba7408(void); 83

void prueba7410(void); //funciones prueba 84 void prueba7420(void); 85 void prueba7430(void); 86 void prueba7432(void); 87 void prueba7474(void); 88 89 void prueba_555(void); 90 void prueba_311(void); 91 void prueba4047(void); 92 void prueba_556(void); 93 void prueba_741(void); 94 void prueba_353(void); 95 void prueba_358(void); 96 97

//Inicio del main/////////////////////////////////////////////////////// 98

void main(void) 99

{ 100

(55)

42 //DDRA = 0xF8; //Pines de entrada de A 101

DDRB = 0x0F; 102

DDRC = 0x1F; //Pines de C E/S

103

PORTC = 0xE0; //Pullup de C

104 105

z=0x00; 106

estado = 0x00; //estado inicial 107 sei(); //Interrupciones 108 uart_init(); //Uart 109 110 while (TRUE) 111 { 112 113

//PORTC= (PINC & 0xF8); //asignar VCC y GND a desconectado 114 115 switch (estado) 116 { 117 118 /////////////////////////////////////////////////////////////////////// 119

//Prueba Numero Uno: 7404 120 /////////////////////////////////////////////////////////////////////// 121 case 0x00: 122 { 123

//uart_putstr("cero"); //referencia de estado 124

d7404(); //display

125

if((PINC & 0x20)==0x20) // Escoger P para realizar la prueba 126 127 { 128 if((PINC & 0xC0)==0xC0) 129 { 130 estado=0x00; 131 } 132 else 133 { 134

//Escoger "AD"elante o "AT"ras 135

if((PINC & 0xC0)==0x80) //AD 136 {estado=0x01; 137 uart_putstr("si"); 138 } 139 else 140 {estado=0x19;//AT (cambiar si 141

agrega estados antepenultimo estado) 142 } 143 144 } 145 } 146 147 else 148

{//funcion de Prueba o estado de prueba 149

uart_putstr("P---"); 150

prueba7404(); //Prueba de IC 151

(56)

43 152 } 153 154 } 155 break; 156

case 0x01: //En espera para pasar Prueba dos 157

{ 158

//uart_putstr("uno"); 159

if(((PINC & 0xC0)==0x80) | ((PINC & 0xC0)==0x40) | ((PINC 160 & 0xC0)==0x00) ) 161 { 162 estado=0x01; 163 } 164 else 165 { 166 estado=0x02; 167 168 } 169 } 170 break; 171 172 /////////////////////////////////////////////////////////////////////// 173

//Prueba Numero Dos:7408 174 /////////////////////////////////////////////////////////////////////// 175 case 0x02: 176 { 177

//uart_putstr("dos-"); //referencia de estado 178

179

d7408(); //display

180 181

if((PINC & 0x20)==0x20) // Escoger P para realizar la prueba 182 183 { 184 if((PINC & 0xC0)==0xC0) 185 { 186 estado=0x02; 187 } 188 else 189 { 190

//Escoger "AD"elante o "AT"ras 191

if((PINC & 0xC0)==0x80) //AD 192 {estado=0x03; 193 } 194 else 195

{estado=0x1B; //AT si se agregan 196

estados asignar este valor al ultimo estado 197 } 198 } 199 200 201 202

(57)

44 } 203 204 else 205 { 206

//funcion de Prueba o estado de prueba 207 uart_putstr("P---"); 208 prueba7408(); 209 estado=0x02; 210 } 211 212 } 213 break; 214

case 0x03: //En espera para pasar Prueba tres 215 { 216 217 //uart_putstr("tres-"); 218

if(((PINC & 0xC0)==0x80) | ((PINC & 0xC0)==0x40) | ((PINC 219 & 0xC0)==0x00)) 220 { 221 estado=0x03; 222 } 223 else 224 { 225 estado=0x04; 226 } 227 } 228 break; 229 230 /////////////////////////////////////////////////////////////////////// 231

//Prueba Numero Tres:7410 232 /////////////////////////////////////////////////////////////////////// 233 234 case 0x04: 235 { 236 d7410(); 237 // uart_putstr("cuatro-"); 238 239

if((PINC & 0x20)==0x20) // Escoger P para realizar la prueba 240 241 { 242 if((PINC & 0xC0)==0xC0) 243 { 244 estado=0x04; 245 } 246 else 247 { 248 249

//escoger adelante o atras 250

if((PINC & 0xC0)==0x80) //izq 251

{estado=0x05; 252

} 253

(58)

45 else 254 {estado=0x01; //der 255 } 256 } 257 258 } 259 260 else 261 { 262

//funcion de Prueba o estado de prueba 263 uart_putstr("P---"); 264 prueba7410(); 265 estado=0x04; 266 } 267 268 } 269 270 break; 271 272

case 0x05: //En espera para pasar prueba cuatro 273 { 274 275 //uart_putstr("cinco-"); 276

if(((PINC & 0xC0)==0x80) | ((PINC & 0xC0)==0x40) | ((PINC 277 & 0xC0)==0x00)) 278 { 279 estado=0x05; 280 } 281 else 282 { 283 284 estado=0x06; 285 286 } 287 } 288 break; 289 290 //////////////////////////////////////////////////////////////////////// 291

//Prueba Numero cuatro:7420 292 //////////////////////////////////////////////////////////////////////// 293 294 case 0x06: 295 { 296 d7420(); 297 uart_putstr("seis-"); 298 299

if((PINC & 0x20)==0x20) // Escoger P para realizar la prueba 300 301 { 302 303 304

(59)

46 if((PINC & 0xC0)==0xC0) 305 { 306 estado=0x06; 307 } 308 else 309 { 310

//escoger adelante o atras 311

if((PINC & 0xC0)==0x80) //izq 312 {estado=0x07; 313 } 314 else 315 {estado=0x03; //der 316 } 317 } 318 319 } 320 321 else 322 { 323

//funcion de Prueba o estado de prueba 324 uart_putstr("P---"); 325 prueba7420(); 326 estado=0x06; 327 328 } 329 330 } 331 332 break; 333

case 0x07: //En espera para pasar cinco 334 { 335 336 uart_putstr("siete-"); 337

if(((PINC & 0xC0)==0x80) | ((PINC & 0xC0)==0x40) | ((PINC 338 & 0xC0)==0x00)) 339 { 340 estado=0x07; 341 } 342 else 343 { 344 345 estado=0x08; 346 347 348 } 349 } 350 break; 351 352 //////////////////////////////////////////////////////////////////////// 353

//Prueba Numero cinco:7430 354

//////////////////////////////////////////////////////////////////////// 355

(60)

47 case 0x08: 356 { 357 d7430(); 358 uart_putstr("ocho-"); 359 360

if((PINC & 0x20)==0x20) // Escoger P para realizar la prueba 361 362 { 363 364 if((PINC & 0xC0)==0xC0) 365 { 366 estado=0x08; 367 } 368 else 369 { 370 371

//escoger adelante o atras 372

if((PINC & 0xC0)==0x80) //izq 373 {estado=0x09; 374 } 375 else 376 {estado=0x05; //der 377 } 378 } 379 380 } 381 382 else 383 { 384

//funcion de Prueba o estado de prueba 385 386 uart_putstr("P---"); 387 prueba7430(); 388 estado=0x08; 389 390 } 391 392 } 393 394 break; 395

case 0x09: //En espera para pasar Prueba seis 396 { 397 398 uart_putstr("nueve-"); 399

if(((PINC & 0xC0)==0x80) | ((PINC & 0xC0)==0x40) | ((PINC 400 & 0xC0)==0x00)) 401 { 402 estado=0x09; 403 } 404 else 405 { 406

(61)

48 estado=0x0A; 407 408 } 409 } 410 break; 411 412 //////////////////////////////////////////////////////////////////////// 413

//Prueba Numero seis: 7432 414 //////////////////////////////////////////////////////////////////////// 415 case 0x0A: 416 { 417 d7432(); 418 uart_putstr("diez-"); 419 420

if((PINC & 0x20)==0x20) // Escoger P para realizar la prueba 421 422 { 423 if((PINC & 0xC0)==0xC0) 424 { 425 estado=0x0A; 426 } 427 else 428 { 429 430

//escoger adelante o atras 431

if((PINC & 0xC0)==0x80) //izq 432 {estado=0x0B; 433 } 434 else 435 {estado=0x07; //der 436 } 437 } 438 439 } 440 441 else 442 { 443

//funcion de Prueba o estado de prueba 444 uart_putstr("P---"); 445 prueba7432(); 446 estado=0x0A; 447 448 } 449 450 } 451 452 break; 453 454

case 0x0B: //En espera para pasar Prueba seis 455

{ 456

(62)

49 uart_putstr("once-"); 458

if(((PINC & 0xC0)==0x80) | ((PINC & 0xC0)==0x40) | ((PINC 459 & 0xC0)==0x00)) 460 { 461 estado=0x0B; 462 } 463 else 464 { 465 466 estado=0x0C; 467 468 } 469 } 470 break; 471 472 //////////////////////////////////////////////////////////////////////// 473

//Prueba Numero siete:7474 474 //////////////////////////////////////////////////////////////////////// 475 case 0x0C: 476 { 477 d7474(); 478 uart_putstr("doce-"); 479 480

if((PINC & 0x20)==0x20) // Escoger P para realizar la prueba 481 482 { 483 if((PINC & 0xC0)==0xC0) 484 { 485 estado=0x0C; 486 } 487 else 488 { 489 490

//escoger adelante o atras 491

if((PINC & 0xC0)==0x80) //izq 492 {estado=0x0D; 493 } 494 else 495 {estado=0x09; //der 496 } 497 } 498 499 } 500 501 else 502 { 503

//funcion de Prueba o estado de prueba 504 505 uart_putstr("P---"); 506 prueba7474(); 507 estado=0x0C; 508

(63)

50 509 } 510 511 } 512 513 break; 514 515

case 0x0D: //En espera para pasar Prueba seis 516 { 517 518 uart_putstr("doce-"); 519

if(((PINC & 0xC0)==0x80) | ((PINC & 0xC0)==0x40) | ((PINC 520 & 0xC0)==0x00)) 521 { 522 estado=0x0D; 523 } 524 else 525 { 526 527 estado=0x0E; 528 529 } 530 } 531 break; 532 533 //////////////////////////////////////////////////////////////////////// 534

//Prueba Numero ocho:555 535 //////////////////////////////////////////////////////////////////////// 536 case 0x0E: 537 { 538 d_555(); 539 uart_putstr("trece-"); 540 541

if((PINC & 0x20)==0x20) // Escoger P para realizar la prueba 542 543 { 544 545 if((PINC & 0xC0)==0xC0) 546 { 547 estado=0x0E; 548 } 549 else 550 { 551 552

//escoger adelante o atras 553

if((PINC & 0xC0)==0x80) //izq 554 {estado=0x0F; 555 } 556 else 557 {estado=0x0B; //der 558 } 559

Figure

Updating...

References

Related subjects :