sexta-feira, 12 de agosto de 2016

Atividades com interrupções externas

Atividade 1

Mostrar o funcionamento das atividades em software e em hardware

Atividade 1.1

Implementar em hardware e software em linguagem C para o PIC18F4550 utilizando o exemplo “Exemplo de configuração e uso da INT0”

Atividade 1.2

Criar um projeto novo baseado no exemplo “Exemplo de configuração e uso da INT0”, implementar em hardware e software em linguagem C para o PIC18F4550 para que a ação da interrupção seja ascender um led em D1 e mantê-lo ligado por 5 segundos.

Atividades 1.3

Criar um projeto novo baseado no exemplo “Exemplo de configuração e uso da INT0”, implementar em hardware e software em linguagem C para o PIC18F4550 para que:

  • Programa que pisque um led em D4 com 1s ligado e 1s desligado
  • Ação da interrupção seja ascender um led em D1 e mantê-lo ligado por 5 segundos.

Atividade 1.4

Criar um projeto novo baseado no exemplo “Exemplo de configuração e uso da INT0”, implementar em hardware e software em linguagem C para o PIC18F4550 para que:

  • Configure para que o programa utilizar a INT1
  • Programa que pisque um led em D4 com 1s ligado e 1s desligado
  • Ação da interrupção seja ascender um led em D1 e mantê-lo ligado por 5 segundos.

_________________________________________________________________


Atividade 2



Tratamento de mais de uma interrupção

Quando temos mais de interrupção, é necessário testar qual FLAG está ativo para identificar qual interrupção aconteceu.
No exemplo abaixo temos a INT0 e a INT1 dentro da função de interrupção
Separa-se a função pelo teste (IF) do FLAG (INT0IF ou INT1IF) que está em 1, que vai indicar qual interrupção aconteceu.
=======================================================
void interrupt ISRH(void) { // o nome ISRH é escolhido
if (INTCONbits.INT0IF == 1){ // testa se o flag da INT0 está acionado
//
//  aqui vai o código relativo a INT0
//
INTCONbits.INT0IF = 0; // Limpa o flag bit da interrupção externa INT0
}
if (INTCON3bits.INT1IF == 1){ // testa se o flag da INT1 está acionado
//
//  aqui vai o código relativo a INT1
//
INTCON3bits.INT1IF = 0; // Limpa o flag bit da interrupção externa INT1
}
}

=======================================================

Atividade 2

Implementar hardware e software em linguagem C para o PIC18F4550 para as seguintes especificações:

  • Botão que zera uma variável a partir da Interrupção Externa 0 (INT0)
  • Botão que incrementa uma variável a partir da Interrupção Externa 1 (INT1)
  • Botão que decrementa uma varável a partir da Interrupção Externa 2 (INT2)
  • Mostrar o valor da variável no display LCD 2 x 16

Apresentação:

  • Programa com comentários em cada comando
  • Hardware em funcionamento

Hardware sugerido


_________________________________________________________________



Atividade 3



Interrupções Alta e Baixa Prioridade


Comportamento das interrupções com prioridade em eventos de alta (H) e baixa (L)


Ocorrendo um evento H e após um L (durante H)
A interrupção e alta (H) continua rodando e a interrupção de baixa (L) é escalonada para acontecer após a de alta (H) e ao fim desta (L) retornar ao código principal




Ocorrendo um evento L e após um H (durante L)
A interrupção de baixa (L) é parada e a interrupção de alta (H) é iniciada, ao seu término ela retorna ao código da interrupção de baixa (L) e ao fim deste retorna ao código principal 



Exemplo de função e interrupção de alta prioridade controlada pela INT0

void interrupt int_alta(void) { // o nome int_alta é escolhido
//
//  aqui vai o código
//
INTCONbits.INT0IF = 0; // Limpa o flag bit da interrupção externa INT0
}



Exemplo de função e interrupção de baixa prioridade controlada pela INT1

void interrupt low_priority int_baixa(void) { // o nome int_baixa  é escolhido
//
//  aqui vai o código
//
INTCON3bits.INT1IF = 0; // Limpa o flag bit da interrupção externa INT1
}


=============================================================


Atividades 3



Implementar hardware e software em linguagem C para o PIC18F4550 para as seguintes especificações:


  • Botão que aciona a Interrupção Externa 0 (INT0)
  • Botão que aciona a Interrupção Externa 1 (INT1) com alta prioridade
  • Botão que aciona a Interrupção Externa 2 (INT2) com baixa prioridade
  • LED 0 para indicação de atividade da Interrupção Externa 0
  • LED 1 para indicação de atividade da Interrupção Externa 1
  • LED 2 para indicação de atividade da Interrupção Externa 2
  • LED 3 “piscante” como atividade principal do programa - while(1)
  • Mostrar ações no display LCD 2 x 16

Ações na Interrupção


  • Interrupção de alta prioridade
    • INT0 – Pisca o LED 0, 8 vezes com tempos de on/off de 0,5s
    • INT1 – Pisca o LED 1, 4 vezes com tempos de on/off de 1s
  • Baixa Prioridade
    • INT2 – Pisca o LED 2, 2 vezes com tempos de on/off de 2s

Obs.: piscar 1 vez significa um cliclo completo de on/off

Mostrar no LCD


  • Indicar no LCD o estado de onde se encontra o programa
  • Programa principal, piscando o LED 3
  • INT0 em H, piscando o LED 0
  • INT1 em H, piscando o LED 1
  • INT2 em L, piscando o LED 2

Apresentação:


  • Programa com comentários em cada comando
  • Hardware em funcionamento
_________________________________________________________________

Nenhum comentário:

Postar um comentário