Está en la página 1de 20

UNIVERSIDAD AUTÓNOMA DE

NUEVO LEÓN
FACULTAD DE INGENIERÍA MECÁNICA Y
ELÉCTRICA

Laboratorio de Microcontroladores
Práctica 7: Interrupciones Externas

Equipo 5
Matricula Alumno N.º l.
1910105 Ana Guadalupe Alvarado Romero 11
1924388 Joaquín Abdiel Coronado Vazquez 14

Docente: M. I. Jesús Daniel Garza Camarena


Semestre: enero – junio 2021
Día y hora: lunes – V4

San Nicolás de los Garza, N.L. a 06 de abril de 2022


Objetivo
Comprender el funcionamiento de las máquinas de estado por medio de la
implementación de un motor paso a paso unipolar (stepper motor).
Introducción ¿Qué son las interrupciones externas en los
microcontroladores?
Las interrupciones externas sirven para detectar un estado lógico o un cambio de
estado en alguna de las terminales de entrada de un microcontrolador, con su uso
se evita un sondeo continuo en la terminal de interés. Son útiles para monitorear
interruptores, botones o sensores con salida a relevador
Las interrupciones externas pueden configurarse para detectar un nivel bajo de
voltaje o una transición, ya sea por un flanco de subida o de bajada. Con
excepción de INT2, que sólo puede activarse por flancos. Las interrupciones
pueden generarse aun cuando sus respectivas terminales sean configuradas
como salidas.
Imagen del Diagrama de Bloques

Lista de materiales utilizados


• ATMEGA328P
• Resistencias
• Arduino Uno (Programador)
• Protoboard
• Cable jumper
• Push button
• Cargador 5V
• Cable cobre 22WGA
• Terminal Block
• Display 7 segmentes Cátodo Común
• Leds
• Circuito Integrado 7414
• Circuito Integrado 7448
Marco Teórico
• Atmega328P
Microcontrolador ATMEGA328P fabricado por Atmel (Microchip). Pertenece a la
familia AVR con arquitectura RISC de 8 bits. Cuenta
con poderosas instrucciones que se ejecutan en su
mayoría en un solo ciclo de reloj, por lo que puede
alcanzar un desempeño cercano a 1 MIPS por cada 1
Mhz en la frecuencia de reloj.
Características:
Microcontrolador arquitectura de 8 bits de la familia AVR
Hasta 23 pines I/O disponibles
Memoria de programa flash de 32 kB
SRAM de 2 kB
EEPROM de datos de 1 kB
Velocidad max. de la CPU 20 MIPS
Oscilador externo hasta 20 MHz
Voltaje de operación 1.8 V a 5.5 V
ADC de 10 bits y 6 canales
2 timers/contadores/comparadores de 8 bits
1 timer/contador/comparador/Captura de 16 bits
6 canales PWM
USART Full duplex
SPI
• Resistencias
La resistencia es una medida de la oposición al flujo de corriente en un circuito
eléctrico.
La resistencia se mide en ohmios, que se
simbolizan con la letra griega omega (Ω). Se
denominaron ohmios en honor a Georg Simon
Ohm (1784-1854), un físico alemán que estudió la
relación entre voltaje, corriente y resistencia. Se le
atribuye la formulación de la ley de Ohm.
• Arduino Uno
La placa Arduino UNO es la mejor placa para iniciar con la programación y la
electrónica. Si es tu primera experiencia con la plataforma Arduino, la Arduino
UNO es la opción más robusta, más usada y con mayor cantidad de
documentación de toda la familia Arduino.
Arduino UNO es una placa basada en el microcontrolador ATmega328P. Tiene 14
pines de entrada/salida digital
(de los cuales 6 pueden ser
usando con PWM), 6 entradas
analógicas, un cristal de 16Mhz,
conexión USB, conector jack de
alimentación, terminales para
conexión ICSP y un botón de
reinicio. Tiene toda la
electrónica necesaria para que
el microcontrolador opere,
simplemente hay que
conectarlo a la energía por el
puerto USB ó con un
transformador AC-DC.
• Protoboard
¿Qué es una Protoboard?
Una Protoboard o breadboard es una tabla rectangular de plástico con un montón
de pequeños agujeros en ella. Estos agujeros permiten insertar fácilmente
componentes electrónicos para hacer un prototipo (es decir, construir y probar una
versión temprana de) un circuito
electrónico, como por ejemplo con una
batería, un interruptor, una resistencia y un
LED (diodo emisor de luz).
Es una herramienta simple que se utiliza
para conectar fácilmente los componentes
eléctricos y los cables entre sí. Sólo ciertos
tipos de componentes y cables son
aplicables para el uso de la protoboard.
Siempre que los componentes tengan
pasadores con agujeros pasantes (a
diferencia del montaje en superficie),
probablemente sean aplicables para las
protoboard.

• Push Button
Un pulsador o interruptor, es un dispositivo simple con dos posiciones, ON y OFF,
un ejemplo es el interruptor de la luz.
Estos pequeños pulsadores son de un 1/4 por cada lado, tienen 4 pastillas por lo
que se puede pensar que hay 4 cables, pero son dos de cada lado unidos, por tanto,
este pulsador es solamente de 2 cables.
Características
Utilizado como switch o interruptor al momento de ser presionado.
Funciona como contacto normalmente abierto (NA).
Infinito número de aplicaciones.
• Cables jumper
Un jumper o saltador es un elemento que permite cerrar el circuito eléctrico del
que forma parte dos conexiones.
La función del cable macho-hembra es con frecuencia
usado en el tablero protoboard haciendo posible la
conexión de dos elementos, uno ingresado en dicho
tablero y el extremo opuesto al sensor (normalmente).
Se conoce como macho-hembra debido al fragmento
que sobresale de un extremo del cable y la superficie
creada para el ingreso de un pin.
• Cable cobre 22WGA
Estos cables son de tipo estándar UL1007. Son de material conductor de cobre
estañado y material aislante de PVC. Se utilizan para realizar
diferentes conexiones de dispositivos electrónicos, así como
facilitar las conexiones de circuitos eléctricos o electrónicos.
Ideales para conducir electricidad de un extremo a otro y
conectar todo tipo de proyectos ya sea para fuente de
alimentación, conexión de motores, cable para llevar señales ya
sea para proyectos de robótica, mecatrónica y más.
• Terminal Block
Los bloques terminales son conectores rentables que pueden unir dos o más cables
mediante la sujeción mecánica de un tornillo para asegurar una
parte pelada de un cable. Los tornillos sujetan un metal expuesto
de un cable a un canal de metal inferior que se conecta a otro
tornillo, lo que forma la otra conexión terminal. También es
posible realizar varias uniones de conexión en el mismo bloque,
de manera similar a los pines en otros componentes de
conectores.
Display 7 segmentos
Los displays de 7 segmentos son dispositivos electrónicos de visualización
utilizados como una forma fácil de representar numerales decimales y una
alternativa a los displays de matriz de puntos más complejos. Los displays de 7
segmentos empezaron a usarse de forma generalizada como una forma popular
para visualizar números. Se llaman displays de segmentos porque están
compuestos por varios segmentos que se encienden y apagan para dar la
apariencia del glifo deseado. Los segmentos
generalmente son LED individuales o cristales
líquidos. Los displays de siete segmentos se
emplean ampliamente en relojes digitales, medidores
electrónicos, calculadoras básicas, pantallas de
electrodomésticos, coches, y muchos otros
dispositivos que muestran información numérica.
En el tipo de cátodo común, todos los cátodos están conectados a un pin común,
en este caso generalmente la conexión a tierra, y los LED los controla el estado de
los ánodos con la conexión a tierra apagada y la potencia encendida. Los displays
de 7 segmentos pueden usar pantallas de cristal líquido (LCD), un diodo emisor de
luz (LED) para cada segmento u otras técnicas de control o generación de luz
como la descarga de gas de cátodo frío (Panaplex), fluorescente vacío, filamentos
incandescentes (Numitron) y otros.
Motor a pasos
El motor paso a paso es un motor de corriente continua sin escobillas en el que la
rotación se divide en un cierto número de pasos resultantes
de la estructura del motor. Normalmente, una revolución
completa del eje de 360° se divide en 200 pasos, lo que
significa que se realiza una sola carrera del eje cada 1,8°.
También hay motores donde la carrera del eje se realiza
cada 2; 2,5; 5, 15 o 30°.La funcionalidad descrita es posible
gracias a la construcción especial del motor paso a paso, que
se discutirá más adelante en el texto. El motor paso a paso
está compuesto por rotor y estator. El estator es una parte estacionaria, mientras
que el rotor montado en el eje con un cojinete gira siguiendo el campo magnético
giratorio creado alrededor del estator. El estator, hecho de acero u otro metal, es el
marco de un conjunto de electroimanes, que son bobinas montadas en lugares
específicos alrededor del rotor. Cuando la corriente fluye a través de las bobinas del
estator, se crea un campo magnético a su alrededor. Los flujos magnéticos
particulares tienen una dirección e intensidad que dependen de la intensidad y la
dirección de la corriente que fluye a través de una bobina determinada.
Circuito integrado 7414
Circuito integrado TTL 74LS14. Seis inversores schmitt trigger. El 74LS14 es un
Hex Schmitt-trigger inversor, con compensación de
temperatura y puede ser disparado desde la más lenta
de las rampas de entrada y siguen dando señales de
salida limpias, sin trepidación.Cada circuito funciona
como un inversor, pero debido a la acción de Schmitt,
que tiene diferentes niveles de umbral de entrada para
lapositiva continua (VT +) y señales (VT-negativo) en
curso.
Especificaciones
C INVERTER HEX, SCHMITT TRIGGER, 1I / P, 22 ns, DIP14
Tipo lógico: Puerta del inversor
Salida de corriente: 8 mA
N º de entradas: 1
Min Supply Voltage: 4.75 V
Supply Voltage Max: 5.25 V
Tipo de Familia: LS
Tipo de la lógica: Puerta del inversor
Operación de bordes muy lento
Características mejoradas de recibir su alineación
Alta inmunidad al ruido
Aplicaciones: Procesado de señal
Tipo de familia: LS
Encapsulado DIP

Circuito Integrado 7448


El 7448 es un circuito integrado que convierte el código binario de entrada en
formato BCD a niveles lógicos que permiten activar un display de 7 segmentos de
cátodo común en donde la posición de cada barra forma el número decodificado.
Características:
Lógica del circuito: Decodificador/Driver BCD a 7 segmentos.
Tensión de alimentación mínima: 4.75 V.
Tensión de alimentación máxima: 5.25 V.
Rango corriente de salida baja (a to g): 2 a 6 mA.
Rango corriente de salida baja BI/ RBO : 1.6 a 3.2
mA.
Temperatura de operación mínima: 0°C.
Temperatura de operación máxima: 70°C.
Encapsulado: DIP.
16 pines.

Imagen del Diagrama Esquemático hecho en un software EDA


Imagen del circuito en una protoboard en TINKERCAD con los nombres de
sus integrantes
Imagen del diagrama de flujo del programa
Imagen del código en lenguaje C
/*
* Nombres: Ana Guadalupe Alvarado Romero
* Joaquín Abdiel Coronado Vázquez
* Hora clase: V4
* Día: Lunes
* N° de lista: #11, #14
* N° de Equipo: #5
* Dispositivo: ATMEGA328P
* Rev: 1.0
* Propósito de la actividad: Aprender sobre el uso de
* interrupciones externas en los microcontroladores.
* Fecha: 05/05/2022
*/

//Bibliotecas y constantes.
#include <avr/io.h> //Biblioteca E/S AVR atmega328P.
#define F_CPU 1000000UL //1 MHz.
#include <util/delay.h> //Biblioteca de retardos.
#include <avr/interrupt.h> //Biblioteca de interrupciones.

//Etiquetas y macros.
#define TIME 500
//-Salidas.
//--Display.
#define DISPLAY PORTC
//--LEDS.
//--Puerto LED.
#define LEDS_PORT PORTB
//---LED0.
#define LED0 PORTB0
#define LED0_ON LEDS_PORT |= _BV(LED0)
#define LED0_OFF LEDS_PORT &= ~_BV(LED0)
//---LED1.
#define LED1 PORTB1
#define LED1_ON LEDS_PORT |= _BV(LED1)
#define LED1_OFF LEDS_PORT &= ~_BV(LED1)
//---LED2.
#define LED2 PORTB2
#define LED2_ON LEDS_PORT |= _BV(LED2)
#define LED2_OFF LEDS_PORT &= ~_BV(LED2)
//---LED3.
#define LED3 PORTB3
#define LED3_ON LEDS_PORT |= _BV(LED3)
#define LED3_OFF LEDS_PORT &= ~_BV(LED3)

//-Entradas.
//--Switches.
#define SWITCHES PIND
//---SW0_INT0.
#define SW_INT0 PIND2
//---SW1_INT1.
#define SW_INT1 PIND3

//-Declaración de funciones.
void init_ports(void);
void init_extInt(void);
void autofantastico(void);

//-Arreglo.
// 0 1 2 3 4 5 6 7
8 9
// uint8_t numeros[10] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; //Sin
decodificador.
uint8_t numeros[10] = {0,1,2,3,4,5,6,7,8,9}; //Con decodificador.
uint8_t numeros_leds[4] = {1,2,3,4}; // Secuencia de leds

//-Variable global.
volatile uint8_t contador = 0;
volatile uint8_t contador_leds = 0;

int main(void)
{
cli();
init_ports();
init_extInt();
sei();
while (1)
{
DISPLAY = numeros[contador];
contador_leds = 0;
autofantastico();
} // Fin while
} // Fin main

//Función que inicializa E/S.


void init_ports(void)
{
//-Salidas.
//--LEDS.
DDRB |= (1<<LED3)|(1<<LED2)|(1<<LED1)|(1<<LED0); //Indica que son salidas.
LEDS_PORT &= ~((1<<LED3)|(1<<LED2)|(1<<LED1)|(1<<LED0)); //Inician apagados.
//--Display.
DDRC |= (1<<DDC0)|(1<<DDC1)|(1<<DDC2)|(1<<DDC3); //Declara las salidas.
DISPLAY &= ~((1<<DDC0)|(1<<DDC1)|(1<<DDC2)|(1<<DDC3)); //Inicia apagado.
//-Entradas.
DDRD &= ~((1<<SW_INT1)|(1<<SW_INT0)); //Indica que son entradas.
PORTD |= (1<<SW_INT1)|(1<<SW_INT0); //Activa PULL-UP.
} // Fin init ports

void autofantastico(void)
{
for(uint8_t i= 0; i<=3; i++)
{
LEDS_PORT = _BV(i);
_delay_ms(100);

}
for(uint8_t i=3; i<=3; i--)
{
LEDS_PORT = _BV(i);
_delay_ms(100);

}
} // Fin AutoFantastico

//Función que inicializa las interrupciones.


void init_extInt(void)
{
//-INT0
//LOW level
EICRA &= ~_BV(ISC00);
EICRA &= ~_BV(ISC01);
//Enable
EIMSK |= _BV(INT0);

//-INT1
//LOW level
EICRA &= ~_BV(ISC10);
EICRA &= ~_BV(ISC11);
//Enable
EIMSK |= _BV(INT1);
} // Fin init_extInt

//Vectores de interrupción
ISR (INT0_vect)
{
if(contador >= 9)
{
contador = 9;
}
else
{
contador++;
}
DISPLAY = numeros[contador];
} //Fin ISR INT0

ISR (INT1_vect)
{
if(contador <= 0)
{
contador = 0;
}
else
{
contador--;
}
DISPLAY = numeros[contador];
} //Fin ISR INT1
Fotografía del circuito armado en físico
Conclusión
Ana Guadalupe Alvarado Romero
Conseguir la ejecución de una tarea principal y una secundaria por medio de las
interrupciones externas ha resultado un poco más difícil de lo esperado debido a la
combinación de tareas que había que integrar en el código de programación. Sin
embargo, parte de las cosas pedidas ya se habían hecho en prácticas anteriores
por separado, como lo es el contador manual o la secuencia del auto fantástico
(aunque esta última se actualizó para hacer uso de la estructura for). En esta
práctica se recurrió al hardware para evitar los rebotes de los switches de las
interrupciones, esto fue complicado de conectar en Tinkercad a comparación de
en Proteus, donde las conexiones fueron sencillas de interpretar.
Joaquín Abdiel Coronado Vázquez
Al finalizar al finalizar la práctica puedo concluir que fue un poco difícil tanto la
programación como el armado en físico la nueva experiencia de las interrupciones
externas los cuales tienen mucho que ver en cuestión para eliminar los tiempos
que existen entre una pulsada en un botón, tanto es así que en la del circuito físico
hubo pequeñas complicaciones para el armado las cuales se verán cuando se
vaya a revisión por lo tanto solamente se subirá el circuito en simulador.
Bibliografías

UAEH. (2021). Pulsadores (Push Button) | Arduino. Retrieved February 21, 2022, from

Uaeh.edu.mx website:

http://ceca.uaeh.edu.mx/informatica/oas_final/OA4/pulsadores_push_button.html

Arduino UNO | Arduino.cl - Compra tu Arduino en Línea. (2019, January 14). Retrieved

February 15, 2022, from Arduino.cl - Compra tu Arduino en Línea website:

https://arduino.cl/arduino-uno/

de, C. (2022). Conectores de Bloques Terminales. Retrieved February 28, 2022, from

Arrow.com website: https://www.arrow.com/es-

mx/categories/connectors/specialized-connectors/connector-terminal-blocks

Cable Eléctrico Calibre 22 AWG 1 Metro Diferentes Colores - UNIT Electronics. (2022,

February 28). Retrieved February 28, 2022, from UNIT Electronics website:
https://uelectronics.com/producto/cable-electrico-calibre-22-awg-1-metro-diferentes-

colores/

Display Technology - Seven Segment Display| Newark. (2020). Retrieved March 22, 2022,

from Newark.com website: https://mexico.newark.com/display-seven-segment-

display-technology

También podría gustarte