- Tipos de interrupções
- Interrupções no Arduino
- Usando interrupções no Arduino
- Componentes necessários
- Diagrama de circuito
- Programação de interrupção do Arduino
- Demonstração de interrupção do Arduino
Considere um carro em movimento rápido, se de repente for atingido por outro carro na direção oposta, a primeira coisa que acontece é que, o sensor do acelerômetro presente no carro detecta uma desaceleração repentina e dispara uma interrupção externa no microcontrolador presente em o carro. Então, com base nessa interrupção, o microcontrolador produz um sinal elétrico para disparar os airbags imediatamente. Os microcontroladores presentes no carro monitoram muitas coisas simultaneamente, como sentir a velocidade do carro, verificar outros sensores, controlar a temperatura do ar condicionado etc. Então, o que faz uma abertura repentina de um airbag em segundos? A resposta é interrupções, um sinal de interrupção é usado aqui e tem a maior prioridade de todos.
Outro exemplo simples de interrupções são os telefones celulares com tela de toque que têm a maior prioridade para o sentido de “toque”. Quase todo dispositivo eletrônico tem algum tipo de interrupção para 'interromper' o processo regular e fazer algumas coisas de maior prioridade em um determinado evento. O processo normal é retomado após servir a Interrupção.
Então, tecnicamente, Interrupts é um mecanismo pelo qual uma E / S ou instrução pode suspender a execução normal do processador e ser atendido como se tivesse maior prioridade. Por exemplo, um processador fazendo uma execução normal pode ser interrompido por algum sensor para executar um determinado processo que está presente no ISR (Interrupt Service Routine). Depois de executar, o processador ISR pode retomar novamente a execução normal.
Tipos de interrupções
Existem dois tipos de interrupções:
Interrupção de hardware: Acontece quando um evento externo ocorre como um pino de interrupção externa muda seu estado de LOW para HIGH ou HIGH para LOW.
Interrupção do software: Acontece de acordo com as instruções do software. Por exemplo, as interrupções do temporizador são interrupções de software.
Interrupções no Arduino
Agora veremos como usar interrupções na placa Arduino. Possui dois tipos de interrupções:
- Interrupção Externa
- Pin Change Interrupt
Interrupção Externa:
Essas interrupções são interpretadas pelo hardware e são muito rápidas. Essas interrupções podem ser definidas para disparar no evento de níveis de AUMENTO, QUEDA ou BAIXO.
Placa Arduino |
Pinos de interrupção externa: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Interrupções de mudança de pino:
Os Arduinos podem ter mais pinos de interrupção habilitados usando interrupções de mudança de pino. Em placas Arduino baseadas em ATmega168 / 328, quaisquer pinos ou todos os 20 pinos de sinal podem ser usados como pinos de interrupção. Eles também podem ser acionados usando bordas RISING ou FALLING.
Usando interrupções no Arduino
Para usar interrupções no Arduino, os conceitos a seguir precisam ser compreendidos.
Rotina de serviço de interrupção (ISR)
Rotina de serviço de interrupção ou um manipulador de interrupção é um evento que contém um pequeno conjunto de instruções. Quando ocorre uma interrupção externa, o processador primeiro executa esse código que está presente no ISR e retorna ao estado em que deixou a execução normal.
ISR tem a seguinte sintaxe no Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, modo);
digitalPinToInterrupt (pin): No Arduino Uno, NANO, os pinos usados para interrupção são 2,3 e mega 2,3,18,19,20,21. Especifique o pino de entrada que é usado para interrupção externa aqui.
ISR: É uma função que é chamada quando uma interrupção externa é feita.
Modo: tipo de transição para acionar, por exemplo, queda, subida, etc.
- RISING: Para disparar uma interrupção quando o pino transita de LOW para HIGH.
- FALLING: Para disparar uma interrupção quando o pino passa de HIGH para LOW.
- CHANGE: Para disparar uma interrupção quando o pino transita de LOW para HIGH ou HIGH para LOW (ou seja, quando o estado do pino muda).
Algumas condições durante o uso de interrupção
- A função Interrupt Service Routine (ISR) deve ser o mais curta possível.
- A função Delay () não funciona dentro do ISR e deve ser evitada.
Neste tutorial do Arduino Interrupt, um número é incrementado de 0 e dois botões são usados para acionar a interrupção, cada um conectado a D2 e D3. Um LED é usado para indicar a interrupção. Se um botão for pressionado, o led acende e o display mostra interrupção2 e apaga, e quando outro botão é pressionado, o led apaga e o display mostra interrupção1 e apaga.
Componentes necessários
- Placa Arduino (neste tutorial, o Arduino NANO é usado)
- Botão de pressão - 2
- LED - 1
- Resistor (10K) - 2
- LCD (16x2) - 1
- Tábua de pão
- Fios de conexão
Diagrama de circuito
Conexão de circuito entre Arduino Nano e display LCD 16x2:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Para o PIN do centro do potenciômetro Para controlar o contraste do LCD |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
UMA |
+ 5V |
K |
GND |
Dois botões são conectados ao Arduino Nano nos pinos D2 e D3. Eles são usados para usar duas interrupções externas, uma para ligar o LED e outra para desligar um LED. Cada botão de pressão tem um resistor pull down de 10k conectado ao aterramento. Portanto, quando o botão é pressionado, é lógico HIGH (1) e quando não pressionado é lógico LOW (0). Um resistor pull down é obrigatório, caso contrário, haverá valores flutuantes nos pinos de entrada D2 e D3.
Um LED também é usado para indicar que uma interrupção foi acionada ou um botão foi pressionado.
Programação de interrupção do Arduino
Neste tutorial, um número é incrementado de 0 que é exibido continuamente no LCD (16x2) conectado ao Arduino Nano, sempre que o botão esquerdo (pino de interrupção D3) é pressionado, o LED acende e o display mostra Interrupção 2, e quando o botão direito (interromper o pino D2) é pressionado, o LED apaga e o display mostra Interromper1.
Código completo com um vídeo de trabalho é fornecido no final deste tutorial.
1. Primeiro, o arquivo de cabeçalho do display LCD é incluído e, em seguida, os pinos LCD que são usados na conexão com o Arduino Nano são definidos.
#incluir
2. Dentro da função void setup (), primeiro exiba alguma mensagem introdutória no display LCD. Saiba mais sobre a interface do LCD com o Arduino aqui.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUITO DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); atraso (3000); lcd.clear ();
3. Então, na mesma função void setup (), os pinos de entrada e saída devem ser especificados. O pino D13 é conectado ao ânodo do LED, portanto este pino deve ser definido como saída.
pinMode (13, OUTPUT);
4. Agora, a parte principal e importante na programação é a função attachInterrupt (), que também está incluída dentro do void setup ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Aqui é especificado que o pino 2 é para interrupção externa, e a função buttonPressed1 é chamada quando há RISING (LOW to HIGH) no pino D2. E o pino 3 também é para interrupção externa e a função buttonPressed2 é chamada quando há RISING no pino D3.
5. Dentro do loop void (), um número (i) é incrementado de zero e impresso no LCD (16x2).
lcd.clear (); lcd.print ("CONTADOR:"); lcd.print (i); ++ i; atraso (1000);
No mesmo loop vazio (), digitalWrite () é usado no pino D13 onde o ânodo do LED está conectado. Dependendo do valor na saída variável, o LED irá ligar ou desligar
digitalWrite (13, saída);
6. A parte mais importante é criar uma função de tratamento de interrupção de acordo com o nome que é usado na função attachInterrupt () .
Como dois pinos de interrupção são usados, 2 e 3, dois ISR são necessários. Aqui nesta programação os seguintes ISR são usados
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Interrupção 1"); }
Esta função é executada quando o botão no pino D2 é pressionado (RISING EDGE). Esta função altera o estado da saída para BAIXO, fazendo com que o LED se desligue e imprima a “interrupção 1” no visor LCD.
buttonPressed2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupção 2"); }
Esta função é executada quando o botão no pino D3 é pressionado. Esta função altera o estado da saída para ALTO, fazendo com que o LED LIGUE e imprima a “interrupção 2” no visor LCD.
Demonstração de interrupção do Arduino
1. Quando PUSH BUTTON no lado esquerdo é pressionado, o LED acende e o LCD exibe Interrupt2.
2. Quando o BOTÃO PUSH no lado direito é pressionado, o LED apaga e o LCD exibe Interromper1
É assim que uma interrupção pode ser útil para acionar qualquer tarefa importante entre a execução normal.