• Nenhum resultado encontrado

Atividade de laboratório 004. Prof: Carlos Eduardo de Brito Novaes 6 de maio de Alunos RA Nome Curso Semestre

N/A
N/A
Protected

Academic year: 2021

Share "Atividade de laboratório 004. Prof: Carlos Eduardo de Brito Novaes 6 de maio de Alunos RA Nome Curso Semestre"

Copied!
5
0
0

Texto

(1)

Atividade de laboratório 004

Prof: Carlos Eduardo de Brito Novaes

6 de maio de 2016

Alunos

RA Nome Curso Semestre

Resumo

Atividade da unidade curricular: Laboratório Integrado de Microprocessadores e Microcontroladores. O objetivo desta atividade é verificar o uso de interrupções em uma aplicação mais prática, a leitura de um encoder incremental.

Parte I

Descrição

No link https://123d.circuits.io/circuits/2076667-leitor-de-encoder-incremental esta disponível uma monta-gem com o Arduíno Uno. Vamos utilizar essa montamonta-gem para trabalhar com interrupções externas.

O seguinte código já esta programado no Arduíno Rotinas setup() e loop()

(2)

' & $ % / / E s t e p r o g r a m a f a z u s o de i n t e r r u p ç õ e s p a r a m o n i t o r a r um / / e n c o d e r i n c r e m e n t a l l i g a d o a o s p i n o s 2 e 3 do A r d u í n o UNO. / / Ao o c o r r e r uma mudança , a v a r i á v e l e n c o d e r é a t u a l i z a d a / / e a i n f o r m a ç ã o é d i s p o n i b i l i z a d a na p o r t a s e r i a l / / v a r i á v e i s g l o b a i s e v o l á t e i s / / e n c o d e r a r m a z e n a o v a l o r da p o s i ç ã o do e n c o d e r / / c a n a l _ a a r m a z e n a o e s t a d o l ó g i c o a n t e r i o r do c a n a l A / / c a n a l _ b a r m a z e n a o e s t a d o l ó g i c o a n t e r i o r do c a n a l B / / c h a n g e s i n a l i z a s e h o u v e mudança de e s t a d o , u s a d a / / a p e n a s p a r a a t u a l i z a r a i n f o r m a ç ã o na p o r t a s e r i a l v o l a t i l e l o n g i n t e n c o d e r = 0 ; v o l a t i l e b y t e c a n a l _ a = LOW; v o l a t i l e b y t e c a n a l _ b = LOW; v o l a t i l e b y t e c h a n g e = LOW; / / r o t i n a de s e t u p v o i d s e t u p ( ) { / / C o n f i g u r a a p o r t a s e r i a l p a r a m o n i t o r a r m o s / / C o n f i g u r a m o s uma t a x a de 9600 b a u d s S e r i a l . b e g i n ( 9 6 0 0 ) ; / / Mensagem de a p r e s e n t a ç ã o do p r o g r a m a S e r i a l . p r i n t l n ( ” ” ) ; S e r i a l . p r i n t l n ( ” T e s t e E n c o d e r : ” ) ; / / c o n f i g u r a a s i n t e r r u p ç õ e s n o s p i n o s / / p i n o 2 −> c a n a l A / / p i n o 3 −> c a n a l B a t t a c h I n t e r r u p t ( d i g i t a l P i n T o I n t e r r u p t ( 2 ) , i s r _ c a n a l _ a , CHANGE ) ; a t t a c h I n t e r r u p t ( d i g i t a l P i n T o I n t e r r u p t ( 3 ) , i s r _ c a n a l _ b , CHANGE ) ; } / / r o t i n a p r i n c i p a l v o i d l o o p ( ) { i n t a = 0 ; / / s e h o u v e mudança , e n v i a novo v a l o r p a r a p o r t a s e r i a l i f ( c h a n g e == HIGH ) { S e r i a l . p r i n t ( ” e n c o d e r = ” ) ; S e r i a l . p r i n t l n ( e n c o d e r ) ; c h a n g e = LOW; } a = 2 0 ; a = 3 0 ; a = 4 0 ; a = 5 0 ; a = 6 0 ; }

(3)

Rotinas de serviço de interrupção (ISRs ou Interrupt Service Routines) ' & $ % / / r o t i n a s de s e r v i ç o de i n t e r r u p ç ã o I S R s v o i d i s r _ c a n a l _ a ( ) { c h a n g e = HIGH ; i f ( c a n a l _ a == LOW) { i f ( c a n a l _ b == LOW) { / / AB e r a 00 e f o i p a r a 1 0 , d e c r e m e n t a o e n c o d e r e n c o d e r−−; c a n a l _ a = HIGH ; } e l s e { / / AB e r a 01 e f o i p a r a 1 1 , i n c r e m e n t a o e n c o d e r e n c o d e r + + ; c a n a l _ a = HIGH ; } } e l s e { i f ( c a n a l _ b == LOW) { / / AB e r a 10 e f o i p a r a 0 0 , i n c r e m e n t a o e n c o d e r e n c o d e r + + ; c a n a l _ a = LOW; } e l s e { / / AB e r a 11 e f o i p a r a 0 1 , d e c r e m e n t a o e n c o d e r e n c o d e r−−; c a n a l _ a = LOW; } } } v o i d i s r _ c a n a l _ b ( ) { c h a n g e = HIGH ; i f ( c a n a l _ a == LOW) { i f ( c a n a l _ b == LOW) { / / AB e r a 00 e f o i p a r a 0 1 , i n c r e m e n t a o e n c o d e r e n c o d e r + + ; c a n a l _ b = HIGH ; } e l s e { / / AB e r a 01 e f o i p a r a 0 0 , d e c r e m e n t a o e n c o d e r e n c o d e r−−; c a n a l _ b = LOW; } } e l s e { i f ( c a n a l _ b == LOW) { / / AB e r a 10 e f o i p a r a 1 1 , d e c r e m e n t a o e n c o d e r e n c o d e r−−; c a n a l _ b = HIGH ; } e l s e { / / AB e r a 11 e f o i p a r a 1 0 , i n c r e m e n t a o e n c o d e r e n c o d e r + + ; c a n a l _ b = LOW; } } }

(4)

1

Verifique o comportamento do programa

Acesse a montagem disponível emhttps://123d.circuits.io/circuits/2076667-leitor-de-encoder-incremental. Na atividade de hoje não será necessário duplicar o o projeto para sua conta pois não será necessário editar nada. De toda maneira, você ainda pode duplicar o projeto caso queira experimentar um pouco e modificar o funcionamento do projeto. O programa escrito vai escrever resultados na porta serial do Arduíno UNO, o resultado deve ser visualizado usando o “monitor serial”, acessível de dentro do editor de código.

A plataforma de simulação não conta com um encoder isolado (apenas integrado a motores), de forma que vamos simular os pulsos do encoder utilizando duas chaves do tipo liga/desliga. Antes de iniciar a simulação verifique se ambas as chaves estão desligadas (para baixo)

1.1

Inicie a simulação e responda:

1. O que é escrito no monitor serial?

2. O que é escrito no monitor serial ao mudar a primeira chave (da esquerda) para a posição ligada (para cima)?

3. O que é escrito no monitor serial ao mudar a segunda chave (da direita) para a posição ligada (para cima)?

4. O que é escrito no monitor serial ao mudar a primeira chave de volta para a posição desligada (para baixo)?

5. O que é escrito no monitor serial ao mudar a segunda chave de volta para a posição desligada?

6. Se tudo seguiu corretamente, o monitor serial deve apresentar a mensagem “encoder = 4”, indicando que a contagem dos pulsos ocorreu de forma crescente. Seguindo a lógica de funcionamento do encoder, qual deve ser a sequencia para retornar o valor para zero? Em outras palavras, qual chave deve ser mudada para qual posição até que o monitor serial apresente novamente o texto “encoder = 0”

• encoder=3: A chave _________________ deve ser ________________ • encoder=2: A chave _________________ deve ser ________________ • encoder=1: A chave _________________ deve ser ________________ • encoder=0: A chave _________________ deve ser ________________

2

Verificando a interrupção do fluxo normal de um programa

Vamos verificar como ocorre a interrupção do processamento normal de um programa. Para isso, insira um ponto de parada na linha 46, onde ocorre uma atribuição “a=20” e inicie a simulação.

1. Execute algumas vezes uma instrução de cada vez e verifique o fluxo normal do programa. Verifique as atribuições sucessivas feitas à variável “a”.

2. Continue executando uma instrução de cada vez até que a linha de número 46 (que faz a atribuição “a=20”) seja destacada. Nesse momento verifique qual é o valor presente na variável “a”

(5)

3. Execute a instrução da linha 46. Nesse momento verifique qual é o valor presente na variável “a”

4. Mude a posição de uma das chaves e execute a instrução da linha 47. Nesse momento verifique qual é o valor presente na variável “a”

5. Note que a instrução da linha 47 terminou de ser executada e a linha 48 ficou destacada. Execute novamente apenas um passo e verifique o que ocorre. Por qual motivo a linha 48 não foi executada?

6. Note que a instrução da linha 47 terminou de ser executada e a linha 48 ficou destacada. Execute novamente apenas um passo e verifique o que ocorre. Por qual motivo a linha 48 não foi executada?

7. Qual o valor presente na variável global “encoder”?

8. Execute passo a passo a rotina de interrupção até o final (linha 81 ou linha 110, conforme a chave acionada). Qual o valor presente na variável global “encoder”?

Referências

Documentos relacionados

 Condições insalubres no ambiente de trabalho  Superexploração do trabalho feminino e infantil  Ausência completa de qualquer assistência

Se você tiver, no mínimo, três anos de vinculação ao Plano, terá direito ao Benefício Proporcional Diferido (BPD), que consiste em manter o saldo de Conta de

Measurements of the corneal front keratometry values (K flat , K steep , and K max ), central corneal thickness, corneal apex thickness, thinnest corneal thickness, corneal

Keywords: Retinal vein occlusion; Macular edema; Lens implanta- tion, intraocular; Tomography, optical coherence; Dexamethasone/ administration & dosage; Drug

Methods: Retrospective chart review of patients diagnosed with Acanthamoeba keratitis with pro- gressive corneal melting who were treated with accelerated collagen cross-linking..

We infer that fourth nerve palsy could be associated with pseudotumor cerebri syndrome; therefore, clinicians should consider rare ocular motor nerve palsies, even bilaterally,

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

apresentar documentação falsa para o certame, ensejar o retardamento da execução de seu objeto, não mantiver a proposta, não celebrar o contrato ou instrumento equivalente, falhar