Está en la página 1de 4

MICROPROCESADORES II 1

Informe I. Compuertas lógicas


Andrés C. López Meza1 , Edwin L. Jaimes Patiño1
1 Tecnologı́a en Electrónica Industrial, Facultad de Ingenierı́a, Unidades Tecnológicas de Santander, Bucaramanga,
Colombia.

Abstract—This report presents the analysis of the results los placas de Arduino mas usadas es la nano debido a tamaño
obtained when programming logic gates such as AND, OR and y capacidad (Figura 1).
XOR using C language in an arduino nano with an Atmega 328p
microcontroller. Similarly, a comparison of different interruption
functions is presented and it is evaluated whether the time
stipulated in the code corresponds to the time obtained. Finally
the times of the rising and falling flanks are measured.
Index Terms—Logic gates, language C, Atmega 328p, inter-
ruptions, flanks,
Resumen– En el presente informe se presentan el análisis
de los resultados obtenidos al programar compuertas
lógicas como AND, OR y XOR usando lenguaje C en
un arduino nano con un microcontrolador Atmega 328p.
De igual manera se presenta una comparación de difer- Fig. 1. Disposición de pines Arduino nano.
entes funciones de interrupción y se evalúa si el tiempo
estipulado en el código corresponde al tiempo obtenido. Los registros de puertos permiten una manipulación
Finalmente se miden los tiempos de los flancos ascendentes más rápida y de menor nivel de los pines de E/S del
y descendentes. microcontrolador en una placa Arduino. Los chips utilizados
Palabras clave–Compuertas lógicas, lenguaje C, Atmega en la placa Arduino (ATmega8 y ATmega168) tienen tres
328p, interrupciones, flancos, puertos:

I. I NTRODUCCI ÓN • B (digital pin 8 to 13)


• C (analog input pins)
E L Arduino es un microcontrolador muy popular en el
mercado de aficionados. Su programación se basa en
un C++ modificado. Si bien esto es bueno para algunas
• D (digital pins 0 to 7)
Cada puerto está controlado por tres registros, que también
manipulaciones de nivel superior, en muchos casos es muy son variables definidas en el idioma arduino. El registro DDR
ineficiente para el control directo del hardware. determina si el pin es una ENTRADA o SALIDA. El registro
Los diseños de las placas Arduino usan diversos microcon- PORT controla si el pin es ALTO o BAJO, y el registro PIN
troladores y microprocesadores. Generalmente el hardware lee el estado de los pines INPUT configurados para ingresar
consiste de un microcontrolador Atmel AVR, conectado bajo con pinMode (). Los registros DDR y PORT pueden escribirse
la configuración de ”sistema mı́nimo” sobre una placa de y leerse. Los registros PIN corresponden al estado de las
circuito impreso a la que se le pueden conectar placas de entradas y solo pueden leerse.
expansión (shields) a través de la disposición de los puertos de
entrada y salida presentes en la placa seleccionada. Las shields A. Compuertas logicas
complementan la funcionalidad del modelo de placa empleada, Las compuertas lógicas son circuitos electrónicos diseñados
agregando circuiteria, sensores y módulos de comunicación para obtener resultados booleanos (0,1), los cuales se obtienen
externos a la placa original. La mayorı́a de las placas Arduino de operaciones lógicas binarias (suma, multiplicación).
pueden ser alimentadas por un puerto USB o un puerto barrel Dichas compuertas son AND, OR, NOT, NAND, NOR, XOR,
Jack de 2.5mm. La mayorı́a de las placas Arduino pueden ser XNOR. A continuación se dara una breve explicación de las
programadas a través del puerto serie que incorporan haciendo compuertas lógicas que se usaran
uso del Bootloader que traen programado por defecto. El
software de Arduino consiste de dos elementos: un entorno Compuerta AND: Para la compuerta AND, La salida
de desarrollo (IDE) (basado en el entorno de processing y en estará en estado alto de tal manera que solo si las dos
la estructura del lenguaje de programación Wiring), y en el car- entradas se encuentran en estado alto. Por esta razón podemos
gador de arranque (bootloader, por su traducción al inglés) que considerar que es una multiplicación binaria (Tabla I).
es ejecutado de forma automática dentro del microcontrolador
en cuanto este se enciende. Las placas Arduino se programan Compuerta OR: la compuerta OR, la salida estará en
mediante un computador, usando comunicación serie. Uno de estado alto cuando cualquier entrada o ambas estén en estado
MICROPROCESADORES II 2

TABLE I que se asignara como una salida. Seguidamente se asignaron


TABLA DE VERDAD COMPUERTA AND los valores de PORB = 0x00 que permite que al iniciar el
A B out programa todos los puertos estén en bajo y se asignaron
0 0 0 valores a variables que nos servirán para simplificar el código.
0 1 0
1 0 0
1 1 1 En la segunda parte del código se asigna un valor de
condición, en este caso para que la condición sea verdadera
si las dos entradas están en alto (PORTB=0x03) y por
alto. De tal manera que sea una suma lógica (Tabla II). consiguiente la salida quedara en alto (PORTB=0x04), en
caso de que la sentencia sea falsa el valor de la salida sera
bajo ((PORTB=0xFB).
TABLE II
TABLA DE VERDAD COMPUERTA OR

A B out
0 0 0
0 1 1
1 0 1
1 1 1

Compuerta XOR: La compuerta XOR Su salida estará en


estado bajo cuando las dos entradas se encuentren en estado
bajo o alto. Al mismo tiempo podemos observar que entradas
iguales es cero y diferentes es uno. (Tabla III) [1].

TABLE III
TABLA DE VERDAD COMPUERTA XOR

A B out
0 0 0
0 1 1
1 0 1
Fig. 2. Diagrama de flujo compuerta AND.
1 1 0

Para el caso de la figura 3 se muestra el diagrama de


En el presente informe se presentan los datos obtenidos al
flujo para la compuerta OR. En donde solamente se vario
programar compuertas lógicas AND, OR y XOR en un micro-
el valor de la condición, que para este caso seria que si el
porcesador Atmega 328P usando lenguaje de programación C.
PORTB=0x00 hacer que la el PORB=0xFB que indica que
De igual manera se compararon los cambios de frecuencia que
la salida sera baja, si no hacer que PORTB=0x04 donde la
tiene la señal de salida al usar las funciones delay(), millis()
salida estará en alto.
y micros(). Finalmente se verifico el tiempo toma en hacer un
cambio de estado.

II. M ATERIALES Y M ÉTODOS


En esta sección se ilustrara y explicara la forma en que se
programaron las compuertas lógicas AND, OR y XOR usando
lenguaje AVR en un arduino nano con un microprocesador At-
mega 328P. De igual manera se presentaran los las respuestas
en voltaje a la salida de del circuito al variar los tiempos de
espera usando diferentes funciones. Finalmente se mostraran
el comportamiento de los flacos ascendentes y descendentes.

A. Compuertas lógicas AND, OR y XOR


Como se explico en el inicio del informe las compuertas
lógicas permiten comparar dos valores y a partir de estos
dar una respuesta. En la figura 2 se muestra el diagrama
de flujo usado para programar una compuerta AND en
el microprocesador. Donde inicialmente se declaran las Fig. 3. Diagrama de flujo compuerta OR.
variables a usar, en este caso habilitamos el uso del puerto B
como DDRB |=0x04, que indica que que todos los puertos se Finalmente para el caso de la compuerta XOR, la progra-
asignaran como entradas a excepción del puerto 10 de arduino mación se sigue por el diagrama de flujo de la figura 4. Que al
MICROPROCESADORES II 3

igual que en los casos anteriores la unica sentencia que varia los estados de las entradas y de las salidas, que están en alto
es la del condicional, que para este caso sera PORB==0x00 ó únicamente si las dos entradas están en alto y con esto se
PORB==0x03 la salida sera en bajo, de lo contrario la salida corrobora la tabla de verdad para esta compuerta.
sera alta. En la figura 6 se observan los resultados para la compuerta
OR. Donde la salida es alta siempre y cuando alguna de las
entradas este en alto.

(a) in=00 - out=0 (b) in=01 - out=1

(c) in=10 - out=1 (d) in=11 - out=1


Fig. 4. Diagrama de flujo compuerta XOR. Fig. 6. Compuerta OR

Para el caso de la compuerta XOR que se muestra en la


B. Comparación de interrupciones figura 7 se tiene que si las entradas son iguales la salida
estara en bajo, de lo contrario la salida estará en alto.
Para este caso y con el fin de evidenciar la variación en las
frecuencias de la señal de salida al hacer una interrupción con
las funciones delay(), millis() y micros(). Para esto se uso un
osciloscopio digital y un programa que que asignaba en alto
una salida PORTD=0x04.

C. Determinación del tiempo de un flanco


Para determinar el tiempo que toma una señal en pasar
(a) in=00 - out=0 (b) in=01 - out=1
de un estado alto a uno bajo se uso un osciloscopio digital.
Y un programa previamente cargado en la comparación de
interrupciones.

III. A N ÁLISIS DE RESULTADOS


En esta sección se muestra el análisis de los datos obtenidos.
En la figura 5 se muestra el circuito implementado para (c) in=10 - out=1 (d) in=11 - out=0
corroborar la lógica programada AND. En este se evidencia Fig. 7. Compuerta XOR

Seguidamente y con el fin de determinar la variación


del tiempo de interrupción programado con el obtenido, se
midieron diferentes respuestas con diferentes funciones, como
se ilustra en la figura 8. En las subfiguras 8a, 8b y 8c se uso
la función delay() para hacer la interrupción de la señal se
salida, y como se observa la máxima variación es del 3%
(a) in=00 - out=0 (b) in=01 - out=0 para el tiempo de 2 segundos.

En el caso de las subfiguras 8d, 8e y 8f se uso la función


micros() para controlar el tiempo de la interrupción, y se
observa que el porcentaje de error para un tiempo de 100 µs
es del 14% y para 1 µs es del 1.6%.

(c) in=10 - out=0 (d) in=11 - out=1 En las subfiguras 8g, 8h y 8i se uso la función milis() para
Fig. 5. Compuerta AND hacer las interrupciones y se observa que la variación de los
MICROPROCESADORES II 4

(a) 100 (ms) (b) 1 (s) (c) 2 (s)

(d) 100 (µ s) (e) 1 (µ s) (f) 2 (µ s)

(g) 100 (ms) (h) 1 (s) (i) 2 (ms)


Fig. 8. Señal de salida al usar diferentes interrupciones

tiempos programados a los obtenidos es de cero para cada • Se determino el tiempo que hay al haber un flanco
caso. ascendente o descendente.

Finalmete y con el fin de determianr el tiempo que le toma R EFERENCES


a una señal de pasar de un estado alto a un estado bajo se [1] J. Bayle, C programming for Arduino. Packt Publishing Ltd, 2013.
analizaron los diferentes flancos mostrados en la figura 9.

(a) Flaco ascendente (b) Flanco descendente


Fig. 9. Tiempo de respuesta de los flancos

Para el caso del flaco ascendente 5 se tiene que el tiempo


es de 10 ns y para el flanco descendente el tiempo es de 200
ns

IV. C ONCLUSIONES
• Se comprobó el comportamiento logico de las compuertas
AND, OR y XOR.
• Se determino la variación entre el tiempo de interrupción
programado con el obtenido al usar las funciones deñay(),
micros() y millis(), siendo esta ultima la mas exacta.

También podría gustarte