Como usar interrupções externas (hardware) do microcontrolador AVR (ATmega16) – (Parte 22/46)

Cómo utilizar interrupciones externas (hardware) del microcontrolador AVR (ATmega16) – (Parte 22/46)

Este artículo presenta el concepto de interrupciones y los diferentes tipos de interrupciones en el microcontrolador AVR (ATmega16). Interrumpir como sugiere el nombre, interrumpe la rutina actual del microcontrolador. El microcontrolador ejecuta instrucciones en una secuencia de acuerdo con los programas. A veces puede ser necesario abordar instantáneamente eventos planificados de mayor prioridad que pueden ocurrir durante las operaciones normales. Para hacer frente a este tipo de eventos, los microcontroladores AVR están equipados con Sistemas de Interrupción.
Cuando ocurre una interrupción, el microcontrolador suspende el flujo normal de instrucciones y se ejecuta el código correspondiente a la interrupción que ocurrió. Una vez ejecutado por completo el código correspondiente a la interrupción, la ejecución se reanuda desde la misma instrucción donde fue interrumpida.
Lo siguiente es lo que sucede cuando ocurre una interrupción:
1. El microcontrolador normalmente completa la instrucción que se está ejecutando.
dos. El control del programa se transfiere a la Rutina de Servicio de Interrupción (ISR). Cada interrupción tiene un ISR asociado, que es un fragmento de código que le dice al microcontrolador qué hacer cuando ocurre una interrupción.
3. La ejecución de ISR se realiza cargando la dirección de inicio del ISR correspondiente en el contador del programa.
4. La ejecución de ISR continúa hasta que se encuentra la instrucción de interrupción de retorno (RETI).
5. Cuando se completa la ISR, el microcontrolador reanuda el procesamiento donde lo dejó antes de que ocurriera la interrupción, es decir, el control del programa vuelve al programa principal.
Todo el proceso se puede visualizar en el siguiente diagrama de flujo:
Diagrama de blocos do processo de interrupção comum
Fig. 2: Diagrama de bloques del proceso de interrupción común
Cortes de Atmega16
El número de interrupciones disponibles varía según los diferentes microcontroladores de la familia AVR. El Atmega16 tiene un total de veintiún (21) interrupciones disponibles. Las interrupciones disponibles se clasifican en dos clases:
1. Interrupciones externas: de las veintiuna interrupciones disponibles, cuatro están presentes directamente en los pines del controlador para hacer frente a las interrupciones generadas por fuentes externas, por lo que se denominan interrupciones externas. Las cuatro interrupciones disponibles y sus respectivos pines se muestran en la siguiente figura en orden de prioridad:
Configuração de pinos de interrupções externas no AVR
Fig. 3: Configuración del pin de interrupción externo en el AVR
dos. Interrupciones internas: las diecisiete (17) interrupciones restantes están disponibles para uso interno y admiten el funcionamiento preciso y eficiente de varios periféricos como ADC, temporizadores y USART, etc. La siguiente tabla describe las interrupciones internas disponibles en orden de prioridad:
S. No.
INTERRUMPIR
DEFINICIÓN
1
COMP. TEMPORIZADOR2
Temporizador/Contador2 Comparar interrupción de inicio
dos.
TIMER2 OVF
Interrupción de desbordamiento del temporizador 2
3.
CAPITÁN DEL TIMER1.
Interrupción de evento de captura del temporizador/contador1
4.
COMPA. TEMPORIZADOR
Temporizador/Contador1 Comparar Coincidencia Una interrupción
5.
TEMPORIZADOR COMPL.
Interrupción de la correspondencia de comparación temporizador/contador B
6.
TIMER1 OVF
Interrupción por desbordamiento del temporizador/contador1
7.
TIMER0 OVF
Interrupción por desbordamiento del temporizador/contador0
8.
SPI, STC
Interrupción completa de la transferencia en serie.
9.
USART, RXC
USART recibe una interrupción total
10.
USART, UDRE
Interrupción vacía del registro de datos USART
11.
USART, TXC
Interrupción completa de la transmisión USART.
12.
CAD
Detención completa de la conversión de ADC
13.
EE_RDY
Interrupción lista para EEPROM
14.
ANA_COMP
Interrupción del comparador analógico
15.
TWI
Interrupción de interfaz serie de dos cables
dieciséis.
TIMER0 COMP.
Interrupción de inicio de comparación de temporizador/countrt0
17.
SPM_RDY
Almacenar interrupción de lectura en la memoria del programa
Fig. 4: Configuración del pin de interrupción interna en el AVR
Las interrupciones internas se discutirán con sus respectivos periféricos. En este artículo se centra principalmente en las interrupciones externas.
Registros de configuración de interrupción externa:
Para configurar una interrupción externa INT0, INT1 o INT2, es necesario inicializar la interrupción respectiva realizando la configuración de bits adecuada de los siguientes 4 registros. El alcance de este documento se limita a la explicación de los bits correspondientes únicamente a las interrupciones, la descripción detallada de los demás bits de estos registros se puede encontrar en la hoja de datos de Atmega16.
1. MCUCR (Registro de control de MCU)
Configuração de pinos de interrupções internas no AVR
Fig. 5: Valor del bit de registro MCUCR para configurar la interrupción externa del AVR
Bit0, Bit1, Bit2 y Bit3 del registro MCUCR determinan la naturaleza de la señal en la que se producirán las interrupciones 0 (INT0) y 1 (INT1).
dos. MCUCSR (Registro de estado y control de MCU)
Valor de bit do registro MCUCR para configurar a interrupção externa do AVR
Fig. 6: Valor del bit de registro MCUCSR para configurar la interrupción externa del AVR
El bit6 del registro MCUCSR determina la naturaleza de la señal en la que debe ocurrir la interrupción externa 2 (INT2). INT2 solo se activa por flanco, no se puede utilizar para activación por nivel como INT0 e INT1.
3. GICR (Registro General de Control de Interrupciones)
Valor de bit do registro MCUCSR para configurar a interrupção externa do AVR
Fig. 7: Valor de bit del registro GICR para habilitar/deshabilitar la interrupción respectiva en el AVR
Los registros GICR Bit5, Bit6 y Bit7, llamados máscaras de interrupción, se utilizan para habilitar/deshabilitar la interrupción respectiva. La interrupción se desactiva cuando el valor del bit se establece en 0 y se activa cuando el valor del bit se establece en 1. De forma predeterminada, todas las interrupciones están desactivadas.
Los tres registros mencionados anteriormente deben configurarse en consecuencia para inicializar una interrupción específica. También tenga en cuenta que, además de los registros mencionados anteriormente, el Ibit (Bit7, Global Interrupt Enable) del registro SREG también debe establecerse en 1. Si el bit de habilitación de interrupción global se establece en 0, ninguna de las interrupciones funcionará independientemente de otros registros. ajustes. La activación y borrado del bit I se realiza mediante instrucciones SEI y CLI.
Pasos de programación:
Para programar una interrupción se deben seguir los siguientes pasos:
1. Borre el bit de habilitación de interrupción global en el registro SREG.
dos. Inicialice la interrupción configurando correctamente los registros MCUCR, MCUCSR y GICR.
3. Establezca el bit de habilitación de interrupción global en el registro SREG.
4. Defina la rutina de servicio de interrupción (ISR) adecuada para la interrupción.
Hay dos formas de escribir ISR; por ejemplo, ISR para INT0 se puede escribir de las dos formas siguientes:
A. ISR (INT0_vector)
B. SEÑAL (SIG_INTERRUPT0)
Ejemplo: escribamos un código simple para hacer que una interrupción funcione. Inicialice INT0 para generar una interrupción en el disparador de flanco ascendente. La interrupción se genera a través de botones que alternan el estado de los LED conectados al PORTA. Las conexiones de los LED al controlador se muestran en el diagrama del circuito.
Por lo tanto, para habilitar INT0 es necesario configurar el Bit6 del registro GICR, es decir,
RCIC= (1<
Para el disparador de flanco ascendente INT0, el estado de Bit0 y Bit1 será:
ISC00 (Bit0) = 1
ISC01 (Bit1) = 1

Entonces, MCUCR=(3<

Código fuente del proyecto

###

 
//Programa para utilizar interrupciones externas (hardware) del microcontrolador AVR (ATmega16)
#incluir
#incluir #incluir /***** Función para inicializar puertos*****/ nulo init_ports { DDRA = 0xFF; PUERTO = 0x55; } /***** Función para inicializar interrupciones*****/ init_interrupts vacíos { cli; //Deshabilitar interrupciones globales GICR =(1< //Establece el Bit6 del GICR para desenmascarar la interrupción INT0. MCUCR =(3< //Configuración de MCUCR para interrupción de flanco ascendente para INT0 saber ; //Habilitar interrupciones globales } /***** Rutina de servicio de interrupción para INT0*****/ ISR (INT0_vector) { PUERTA = ~PUERTO; _delay_ms(100); } /***** Función principal *****/ int principal (vacío) { puertos_init; mientras(1) { init_interrupciones; } }

###

Diagramas de circuito

Diagrama de circuito de cómo utilizar interrupciones de hardware externas del microcontrolador AVR-ATmega16

Componentes del proyecto

  • ATmega16

Vídeo del proyecto

Conteúdo Relacionado

En cada vehículo hay una red de sensores integrada...
El controlador del motor es uno de los componentes...
ESP32-CAM es un módulo de cámara compacto que combina...
La evolución de los estándares USB ha sido fundamental...
SCHURTER anuncia una mejora de su popular serie SWZ...
Visual Communications Company (VCC) ha anunciado sus nuevos tubos...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Probablemente se haya encontrado con el término " resistencia...
Probablemente tenga un aislante de soporte si ha notado...
Probablemente haya visto un aislante colocado en postes de...
Probablemente hayas visto aisladores de grillete entronizados en postes...
Probablemente hayas experimentado situaciones en las que controlar un...
Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.