Você está na página 1de 4

Universidade Federal de Mato Grosso - UFMT

Faculdade de Arquitetura, Engenharia e Tecnologia - FAET


Departamento de Engenharia Elétrica
Microprocessadores – 2018/1

Laboratório 8: Contador de giros e interrupções externas


Objetivo: Entender os procedimentos para projetar e implementar aplicações para monitoramento
de eventos externos. Primeiramente será implementado um contador de giros de um motor, sendo
o TMR0 utilizado como contador. Logo será implementado o mecanismo de interrupções por
mudança de nível nos pinos RB4, RB5, RB6 ou RB7. Finalmente será implementado o mecanismo
para acordar o PIC do estado de SLEEP usando interrupção externa através do pino RB0/INT.
Testes experimentais devem ser realizados utilizando o módulo didático PIC-2377.

1) Motor DC e sensor de rotação


Integrado ao módulo didático existe um motor DC cujo eixo está acoplado a um disco perfurado.
Esse disco ao rodar corta o feixe de luz de um sensor óptico ligado ao TMR0 do PIC através do
pino RA4/T0CKI da porta A, permitindo assim implementar um tacômetro (conta-giros) e, a partir
dele, pode-se medir a velocidade, número de voltas, etc. Assim, o sensor óptico fornece os pulsos
digitais (clock) para TMR0. O motor DC é acionado pelo driver transistorizado em ponte H, que
permite definir o giro do motor nos dois sentidos e o controle da rotação por, apenas, dois pinos
digitais da porta B (RB4 e RB5).

+5V 330
RD0 Sensor
PIC16F877A

RD1 RA4

RD2 Vcc Motor Vcc


DC
RD3

RD4
RB4
RD5 Ponte H
RD6
RB5
RD7
LEDs
Figura 1 – Configuração do motor DC e sensor de rotação.

2) Setup de jumpers e chaves


Dispositivo Jumper Chaves ON (para cima) Desligadas
Tacômetro J1–B, J3–A, J4–A CH2(5), CH4(1–8), CH5(5–6) Restante
Interrupção externa RB0/INT J1–off, J3–B, J4–off CH3(1–3), CH4(1–8), CH5(1), CH6(1–4) Restante
Interrupções via RB4-RB7 J1–off, J3–off, J4–off CH1(6) Restante

3) Projeto 1: Tacômetro – Contador de giros do motor DC


Este projeto tem como objetivo explorar recursos do motor DC e do sensor de rotação do módulo
PIC-2377. A rotação do eixo do motor, independente do sentido, é monitorada pelo sensor de
rotação ligado a TMR0 através do pino RA4/T0CKI, portanto, cada incremento de TMR0 depende
dos pulsos digitais presentes no pino RA4/T0CKI. De acordo com o chaveamento da tensão de
controle da ponte, deve-se definir a velocidade de rotação do motor. TMR0 armazena o número
de voltas e seu valor é mostrado nos 8 LEDs ligados na PORTD.
No programa principal, é realizado a configuração dos periféricos do PIC e do sistema em geral.
Apenas o pino RA4 do PORTA é configurado como entrada de dados, as outras portas do PIC
são configuradas como saídas. Como medida de segurança a fim de aumentar a confiabilidade
do programa, o estado lógico inicial de cada pino é definido para garantir que nenhum pino de
saída possa a vir acionar qualquer periférico de maneira errônea. O valor atribuído no registrador
OPTION_REG, define o incremento do TMR0 pela borda de descida do sinal gerado no pino
RA4/T0CKI e o prescaler de 1:1 (sem prescaler).
No loop principal, o acionamento da ponte H e a leitura do sensor são realizados. Primeiramente,
habilita-se um dos ramos da ponte H (seta RB4 para giro anti-horário). Ocorre um tempo de
espera controlado, através da chamada da rotina de atraso delay_4ms. O outro ramo deve
permanecer inativo. Com o fim do atraso, desabilita-se o ramo em questão, ocorrendo um novo
tempo de espera chamando delay_10ms. No final desse ciclo é lido o valor do TMR0, cujo valor
invertido é colocado nos 8 LEDs. Enfim, o laço se fecha e o ciclo de varredura recomeça. Dessa
forma, obtém-se uma onda quadrada para o controle do driver, cujo ciclo ativo determina a
velocidade de rotação do motor DC. Caso se deseje a rotação no sentido inverso ao apresentado,
o procedimento é o mesmo, mudando apenas o ramo da ponte H em atividade.
Roteiro: Projeto 1 em Assembly
 Crie o Projeto 1 usando os arquivos compactados em Lab-08_p1_Tacometro_asm.rar. O
arquivo do programa principal é Lab-08_Tacometro_p1.asm
 Para simular, use o esquemático do arquivo Lab-08_p1_Modulo_didatico_PIC-2377.dsn
 Grave o PIC e teste o programa no módulo didático.
 Implemente a mudanças necessárias para alterar o ciclo ativo do sinal que aciona o motor, a
fim obter: (a) 1/3, (b) 1/2, (c) 5/6 e (d) 10/11.
Roteiro: Projeto 1 em C
 Crie o Projeto 1 usando os arquivos compactados em Lab-08_p1_Tacometro_c.rar. O
arquivo do programa principal é Lab-08_Tacometro_p1.c
 Para simular, use o esquemático do arquivo Lab-08_p1_Modulo_didatico_PIC-2377.dsn
 Grave o PIC e teste o programa no módulo didático.

4) Projeto 2: Interrupção externa via RB0/INT


Nos sistemas baseados em microprocessador, têm-se o recurso de solicitação de interrupção,
para executar uma função específica. Esse recurso permite que o sistema não necessite ficar
constantemente verificando a condição de um evento determinado, assim na operação do
sistema, o programa principal fica encarregado de executar as configurações dos recursos e os
processos principais, enquanto que a rotina de serviço de interrupção ficará encarregada do
processamento de uma função especifica, quando “disparada” por um evento determinado.
No PIC16F877 o pino RB0/INT é usado para a conexão de uma solicitação de interrupção
externa. A transição do sinal, presente no pino, será evento que provocará a solicitação de
interrupção. O tipo transição (bora de subida ou descida) é definido pelo bit INTEDG do registro
OPTION_REG. A habilitação para o atendimento da interrupção é realizada através do bit INTE
do registro INTCON.
No módulo PIC-2377, o pino RB0 se encontra ligado à coluna de teclas: [on], [1], [4] e [7], no
entanto, serão usadas apenas as teclas [1], [4] e [7] para simular uma solicitação de interrupção.
Assim, toda a vez que ocorrer uma solicitação de interrupção, na rotina para o atendimento da
interrupção é incrementada o apontador para atualizar a contagem apresentada no Display 1.
No exemplo, se não existir um mecanismo para evitar as oscilações, "anti bounce", na utilização
das teclas, então, as mesmas poderão gerar vários pulsos, se não pressionadas firmemente, o
que provocará várias solicitações de interrupção ao mesmo tempo.
Finalmente, nota-se que na aplicação é utilizada a instrução SLEEP, que ao executá-la o
processador entra no modo de repouso, ou de baixo consumo. Esta instrução é recomendada
para aplicações onde há longos períodos de inatividade. No repouso, as linhas configuradas
como saída permanecem no estado atual, as instruções não são executadas e o temporizador
não irá operar.
A saída do repouso irá ocorrer quando uma das condições seguintes ocorrer; quando houver a
atuação em um teclado ligado aos pinos RB4-RB7, ou seja, pelas mudanças nestes pinos; pelo
reset externo aplicado ao pino MCLR; pela atuação do cão de guarda ou ainda pela interrupção
externa solicitada através do pino RB0. No entanto, diferente do reset pelo pino MCLR, que vai
para o início do programa, as demais interrupções reativam o processador para continuar a
executar a instrução logo após a instrução SLEEP.
Roteiro: Projeto 2 em Assembly
 Crie o Projeto 2 usando os arquivos compactados em Lab-08_p2_Int_ext_asm.rar. O
programa principal se encontra em Lab-08_Int_ext_Contador_p2.asm
 Para simular, use o esquemático do arquivo Lab-08_p2_Modulo_didatico_PIC-2377.dsn
 Grave o PIC e teste o programa no módulo didático. Anotes suas observações.
 Na rotina de interrupção, apague o caractere “;” que se encontra no começo da linha de
instrução “call delay_50ms”, a fim de habilitar a instrução. Teste o programa no módulo
didático. Anotes suas observações.
Roteiro: Projeto 2 em C
 Crie o Projeto 2 usando os arquivos compactados em Lab-08_p2_Int_ext_c.rar. O programa
principal se encontra em Lab-08_Int_ext_Contador_p2.c
 Para simular, use usando o esquemático do arquivo Lab-08_p2_Modulo_didatico_PIC-2377.dsn
 Grave o PIC e teste o programa no módulo didático.

5) Projeto 3: Uso de interrupções por mudança de nível nos pinos RB4, RB5, RB6 e RB7
O projeto anterior apresentou a possibilidade de gerar interrupções externas através de um pino
do processador (RB0). Existe, ainda, outra possibilidade de gerar uma outra interrupção externa,
porém através dos quatro pinos mais significativos da PORTB, RB4-RB7.
Este tipo de interrupção é ativado pela mudança de estado em uma dessas entradas, ou seja,
se a entrada mudar de zero para um, ou de um para zero. Quando ocorrer uma mudança de
estado, o bit RBIF de INTCON é ativado, solicitando o vetor de interrupção.
Esta aplicação poderá, por exemplo, ser a de um alarme residencial, que será ativado, quando
uma porta, ou uma das três janelas, tiver a sua condição alterada.
Na rotina de serviço da interrupção, deverá ser identificada qual destes pinos foi o responsável
pela ativação da mesma. Esse processo pode, ainda, ser mais complicado, quando esses pinos
estão ligados botoeiras e não chaves, pois as mesmas irão voltar aos seus estados iniciais após
suas liberações, ativando um novo evento de interrupção.
Uma vez atendida a interrupção, o bit RBIF deverá ser retornado para zero, a fim de permitir uma
nova solicitação.
O programa irá implementar a operação de alarme, através do pino de saída RA4, que será
acionado quando houver uma mudança em um dos pinos que geram a interrupção.
Assim, este tipo de recurso do processador pode ter muitas aplicações, como por exemplo a
leitura de um teclado matricial, que ao ser pressionada uma tecla, solicita uma interrupção, para
a identificação da mesma.
Roteiro: Projeto 3 em Assembly
 Crie o Projeto 3 usando os arquivos compactados em Lab-08_p3_Int_RB_asm.rar. O
programa principal se encontra em Lab-08_Int_RB_p3.asm
 Para simular, use o esquemático do arquivo Lab-08_p3_Modulo_didatico_PIC-2377.dsn
 Grave o PIC do módulo didático. Para testar, primeiramente confira que as chaves CH1(4–5)
e CH5(5–6) se encontrem desligadas, em seguida, utilizando um fio, conecte com GND os
pinos RB4-RB7, um pino por vez. Anotes suas observações.
Roteiro: Projeto 3 em C
 Crie o Projeto 3 usando os arquivos compactados em Lab-08_p3_Int_RB_c.rar. O programa
principal se encontra em Lab-08_Int_RB_p3.c
 Para simular, use usando o esquemático do arquivo Lab-08_p3_Modulo_didatico_PIC-2377.dsn
 Grave o PIC e teste o programa no módulo didático.
6) Exercício – tarefa:
Exercício 1: Baseado no projeto do contador de giros (tacômetro), escreva um programa em
Assembly, para mostrar, no LCD, o número de giros realizados pelo motor DC. O tacômetro
deverá mostrar valores de, no mínimo, 16 bits. A velocidade angular do motor deverá ser alterado
cada vez que uma interrupção externa, RB0/INT, acontecer. Para isso, o duty cycle da tensão
aplicada ao motor deverá ser alterado entre os seguintes valores: 50%  75%  100%  50%,
em forma cíclica. Considere-se como duty cycle inicial 50%. Considere desprezível os atrasos
devidos ás sub-rotinas utilizadas.
7) Exercícios – desafio:
Exercício 2: Escreva um programa em C, que de solução ao Exercício 1.
Exercício 3: Escreva um programa em C, que de solução ao Exercício 2.
Exercício 4: Escreva um programa em Assembly, para exibir no LCD, uma leitura atualizada do
Voltímetro ou Termômetro, implementado no Lab-07, porém como resultado de um evento de
interrupção por mudança de nível presente nos pinos RB4–RB7. Para isso, o PIC deverá ser
tirado do estado de sleep apenas para realizar a leitura de um dos sensores e mostrar a grandeza
correspondente no LCD, depois disso deverá permanecer em sleep. Se o evento de interrupção
é disparado pelos pinos RB4 ou RB5 deverá ser exibido uma leitura atualizada do Voltímetro, no
entanto, se o evento de interrupção é disparado pelos pinos RB6 ou RB7 deverá ser exibido uma
leitura atualizada do Termômetro.
Exercício 5: Escreva um programa em Assembly para calcular e mostrar, no LCD, o número de
voltas/min do motor DC. No código, considere-se a opção para definir, como dado de entrada, o
valor do duty cyle.
8) Avaliação do aprendizado:
No dia da aula prática em que será realizado o Laboratório 9, cada aluno deve apresentar:
a) O programa solução do Exercício 1 enunciado no item 6. Tal exercício deverá ser
apresentado funcionando no módulo didático para ser avaliado pelo professor.
b) Um relatório a manuscrito, incluindo:
 O fluxograma do programa do Exercício 1 enunciado no item 6.
 Um ressumo, sucinto e objetivo, do algoritmo do programa.
 Observações e comentários pertinentes.
Nota: relatórios incompletos NÃO serão avaliados ficando com nota ZERO nesse item.

BOM TRABALHO!!

Você também pode gostar