Baixe o app para aproveitar ainda mais
Prévia do material em texto
3 UNIVERSIDADE FEDERAL DO MARANHÃO DEPARTAMENTO DE ENGENHARIA ELÉTRICA PROFESSOR: DR. DENIVALDO LOPES DISCIPLINA: LABORATÓRIO DE APLICAÇÕES COM MICROCOMPUTADORES RELATÓRIO III WESLEY SOUZA LEITE / Cód.: EE09120-76 NARANA MILHOMEM / Cód. EE09140-80 SÃO LUÍS – MA Julho/2011 WESLEY SOUZA LEITE / Cód.: EE09120-76 NARANA MILHOMEM / Cód. EE09140-80 RELATÓRIO III Relatório apresentado à disciplina Laboratório de Aplicações com Microcomputadores, ministrada pelo Prof. Dr. Denivaldo Lopes, para obtenção parcial de nota referente ao primeiro semestre de 2011. São Luís - MA 11 Julho/2011 introdução Este relatório refere-se ao experimento realizado através do Guia de Laboratório Nº 03 da disciplina Laboratório de Aplicações com Microcomputadores. Proporciona o aprimoramento das técnicas de manuseio da plataforma FreeScale, uma vez que é proposto o desenvolvimento de programas envolvendo a utilização de um temporizador. Dessa forma, concatenaram-se os conhecimentos absorvidos na disciplina Introdução à Arquitetura de Computadores para desenvolvimento de sistemas microprocessados objetivando o gerenciamento de problemas que envolvem a necessidade de temporizadores. 1. OBJETIVOS Estudar, ensaiar e montar programas voltados para aplicações específicas de computadores e microcontroladores. 2. Conhecimentos a serem desenvolvidos Configuração de dispositivos de entrada e saída, métodos de armazenamento de instruções, programação em linguagem C para programação de microcontroladores, desenvolvimento da lógica de programação dos discentes, inspeção de registradores etc. 3. METODOLOGIA A programação deu-se em linguagem C, utilizando-se o microcontrolador S12. O desenvolvimento do código foi auxiliado pela IDE CodeWarrior, que tem comunicação direta com o kit em hardware da FreeScale. A programação foi realizada na IDE, com inclusão das funções por ela disponibilizadas e a própria IDE foi responsável por apagar e reprogramar (gravar o novo software) o microcontrolador. 4. MATERIAIS UTILIZADOS Computador; IDE CodeWarrior; Microcontrolador FreeScale MC9S12C128; Chaves; LED’s; Botões de pressão; 5. DESCRIÇÃO DAS FUNÇÕES Função variavel_ClrVal(): fixa o estado de variavel em 0, o que, no caso do LED, ocasiona seu acendimento. Função variavel_GetVal(): retorna o valor de variavel. Função variavel_SetVal(): fixa o estado de variável em 1, o que, no caso do LED, ocasiona seu desligamento. Função variavel_NegVal (): nega o estado atual de variavel. 6. ATIVIDADES Tabela I Tabela de Associações Componente Nome da porta no programa Elemento SW1 PP0 SC SW2 PP1 SPCP SW3_1 PB0 SVT SW3_2 PB1 SVD SW3_3 PB2 TC SW3_4 PB3 B LED1 PB4 AT LED2 PB5 AM LED3 PB6 EP e EM LED4 PB7 Sinalizador Obs: a configuração da IDE obedece à tabela I. Desenvolva programas na linguagem C para resolver os seguintes problemas: 6.1 Crie um contador de 0 a 15 em binário (oito bits)mostrando o resultado nos LEDS (LED1, LED 2, LED 3, LED 4), sendo que no inicio a contagem é crescente e cada 500 ms, mas se o botão SW1 for pressionado, a contagem ocorre a cada 1 s.Se o botão SW2 for pressionado, a contagem ocorre a cada 2s. Solução: Código 1 - Questãoo1_main Código 2 - Questão01_events Comentários: O Código 01 apaga os LED’s, inicialmente, e ativa a interrupção que ocorrerá de meio em meio segundo. O Código 02 trata da lógica da interrupção. Inicialmente, a variação do número a ser exibido nos LED’s (variável contador) ocorre a cada 500 ms (variável num_t = 1). O tempo de espera para que a variável contador seja atualizada é de num_t*500 ms. Ou seja, se pressionarmos uma das chaves do problema (SW1 ou SW2), a variável num_t se modifica e o tempo de atualização do número também muda. Assim, apesar de a interrupção ocorrer sempre a cada 500 ms, nem sempre a atualização do número exibido nos LED’s ocorrerá. Quando a variável contador chega a 15 (representação de 4 bits), a contagem é reiniciada. Para a extração binária dos bits correspondentes à variável contador A variável k é responsável por contar quantas vezes a interrupção já ocorreu sem a atualização da contagem. Assim, quando se chega ao número de ocorrências requeridas, o if passa a ter uma condição de teste verdadeira e há a atualização do número. 6.2. Um automóvel possui um sistema embarcado responsável por controlar o painel do veiculo. Digamos que o limpador de pára-brisas seja acionado pela chave SW3(bit1), direção direta acionado pela chave SW1(bit 2) e a direção esquerda é acionado pela chave SW3 (bit 3). O limpador de pára-brisas possui 4 velocidades, 1s, 2s, 4s, 8s. Incialmente, o limpador de pára-bridas começa com a velocidade 8s. Estando SW3(bit 1) ativado SW1 for pressionado, então o limpador de pára-brisa aumenta a velocidade, passando para 4s, pressionado mais uma vez, passa para 2s,e pressionado outra vez passsa para 1s. A chave SW2 faz o processo inverso, ou seja, estando em 1s, se for pressionado passa para 2s, pressionado SW2 outra vez passa para 4s, e, pressionado, para 8s. SW1 serve aumentar a freqüência do limpador de pára-brisa e SW2 serve para diminuir a freqüência do limpador de para-brisa. No caso do sinalizador de direção, então a freqüência é 1s. Utilize o Led 1 para sinalizar a freqüência do limpador pára-brisa. Utilize o Led 2 para indicar a seta de direção esquerda, e o Led 2 para indicar a seta de direção direita. Comentário: Essa questão segue a mesma lógica da Questão 01. Para tratar três eventos que ocorrem de forma independente, utilizaremos três temporizadores. Um para o pára-brisa e outros dois para cada seta de direção. O Código 03 mostra a ativação ou desativação de cada uma das duas interrupções. Deve-se atentar para o fato de que a interrupção apenas é ativada caso esteja desabilitada. Além disso, é desativada apenas se estiver ativa. Esse controle é feito pela variável state_xx. O Código 04 revela os códigos das interrupções. As setas de direção, quando ativas, apenas fazem piscar o LED correspondente à direção, ou seja, configura-se uma interrupção periódica simples. No caso da interrupção do pára-brisas, a lógica da interrupção é a mesma da questão 01. A diferença se resume no fato de que o temporizador é de 1000 ms e, além disso, num_t tem seu valor alterado pelos botões não mais de forma fixa e sim de acordo com uma PG de razão ½ ou 2. Dessa forma, caso se aumente a frequência, o tempo de atualização reduz-se pela metade e, caso se diminua a frequência, o tempo de atualização é duplicado. Isso está de acordo com a relação fundamental: aonde f é a frequência e T é o período. A variável k, mais uma vez, conta o número de vezes que a interrupção ocorre sem que haja atualização do evento (movimento do pára-brisa). Quando a variável atinge a quantidade de tempos requeridos (num_t*1000ms), o pára-brisa inverte a sua direção (o valor do LED é negado). Código 3 - Questão 02_main Código 4 - Questão 02_events CONSIDERAÇÕES FINAIS A configuração dos temporizadores revelou-se bastante simples e eficaz. Cada uma das interrupções ocorreu conforme o esperado pela teoria. No caso da questão 01, o contador foi atualizado de acordo com a opção do usuário e com extensão normal e periódica durante toda a simulação. O mesmo ocorreu para a questão 02. A periodicidade foi obedecida e os eventos foram tratados pelas interrupções tal como requerido nas questões. REFERÊNCIAS [1 ]Datasheet domicrocontrolador MC9S12C128CFUE da Freescale. [2] William Stallings, "Arquitetura e Organização de Computadores", 5a Ed., Prentice Hall. [3] Ronald J. Tocci e Neal S. Widmer, Sistemas Digitais: Princípios e Aplicações,8a edição, Pearson -Prentice Hall, 2004. [4] Herbert Taub, Circuitos Digitais e Microprocessadores, McGraw-Hill, 1a ed, 1984. [5] Thomas L. Floyd, Sistemas Digitais: Fundamentos e Aplicações, Bookman, 2007.
Compartilhar