Escolar Documentos
Profissional Documentos
Cultura Documentos
CONTROLE DE INTERRUPÇÕES
COM ATMEGA328
Luis Claudio
Definição
● Em nível de hardware, uma interrupção é um sinal de algum
dispositivo ou software que indica à CPU quando interromper o
processo que está executando e passe a executar um outro
processo.
● Geralmente, um ISR deve ser tão curto e rápido quanto possível. Se um programa tem vários ISRs , apenas um
pode ser executado de cada vez, outras interrupções serão executadas depois que o atual terminar em uma ordem que
depende da prioridade que eles possuem.
● Variáveis tipicamente globais são usadas para passar dados entre um ISR e o programa principal. Para garantir que as
variáveis compartilhadas entre um ISR e o programa principal sejam atualizadas corretamente, declare-as como
volatile (diretiva de compilação que instrui o compilador a carregar a variável direto da RAM, ao invés de um
registrador; é usada quando o seu valor pode ser mudado por algo além do controle da seção de código na qual ela
pertence, como uma thread paralela - https://www.arduino.cc/en/pmwiki.php?n=Reference/Volatile).
● Obs:
– Em Ansi C, uma variável volatile pode ter seu conteúdo alterado (via ponteiro) por comandos que fazem parte de
outros programas, sem otimização do compilador; esta diretiva pode ser usada para definir endereços de memória
associados a periféricos físicos, cujo valor pode mudar independente do programa (um teclado ou porta serial, por
exemplo)
– Dentro da função que será chamada na interrupção, a função delay() não funcionará (pois depende de interrupções)
e a função millis() não será incrementada
– delayMicroseconds() não usa nenhum contador, portanto ela funcionará normalmente durante uma interrupçao
– (https://www.arduino.cc/reference/pt/language/functions/external-interrupts/attachinterrupt/)
Sintaxe
attachInterrupt (digitalPinToInterrupt (pino), ISR, modo); // recomendado
● pino: o número do pino conectado (no Arduino Uno só poderá ser os pinos 2 e 3);
● ISR: o ISR para ligar quando ocorrer a interrupção; Esta função não deve ter
parâmetros e não devolve nada (void).
● modo: define quando a interrupção deve ser acionada. Quatro constantes são
predefinidas como valores válidos: LOW, HIGH, CHANGE, RISING, FALLING.
Modos (triggers)
● LOW: dispara a interrupção sempre que o pino tiver nível baixo;
● HIGH: dispara a interrupção sempre que o pino tiver nível alto;
● CHANGE: dispara a interrupção quando houver mudança no estado do
pino;
● RISING: dispara a interrupção quando o pino tiver uma mudança do estado
LOW para HIGH, apenas;
● FALLING: dispara a interrupção quando o pino tiver uma mudança do
estado HIGH para LOW, apenas;
Exemplo:
Implementar um projeto que
acione em sequência 3 leds e
espere 1 segundo entre cada
acionamento.