·

Engenharia Elétrica ·

Sistemas Digitais

Send your question to AI and receive an answer instantly

Ask Question

Preview text

ROTEIRO DE PRÁTICA LABORATORIAL Nº 9190 98 2 Componente curricular Sistemas Digitais Microcontrolados Título do roteiro de aula prática USO DO TIMER0 E ENTRADA DIGITAL E DE INTERRUPÇÃO EXTERNA NO MICROCONTROLADOR PIC COM DISPLAY DE 7 SEGMENTOS Tempo p revisto 2 h oraaula Objetivos Conhecer o funcionamento e implementar o timer0 Funcionamento da entrada e saída digital Implementação de um display 7 segmentos Uso da função de interrupção externa em um microcontrolador PIC Referencial t eórico A interrupção externa é muito utilizada para execução de um conjunto instruções em um determinado momento de forma assíncrona Quando a entrada de interrupção externa recebe um sinal o ciclo de execução principal do programa é parado e nesse instante o conjunto de instruções préestabelecido é executado Posteriormente a execução do programa principal retorna a ser processada do lugar onde foi interrompida Nos microcontroladores PIC a interrupção externa está localizada no pino RB0 e essa interrupção pode ocorrer de duas formas na borda de subida nível 0 para nível 1 ou na borda de descida nível 1 para nível 0 de acordo com a configuração feita no código Já a interrupção pelos temporizadores timers são síncronas respeitando um intervalo fixo de tempo podendo controlar uma sequência de eventos Timer não é um controlador do tempo nos microcontroladores PIC ele consiste em um contador interno para gerenciar o tempo de execução de instruções Existem basicamente quatro tipos de temporizadores são eles Timer0 Timer1 Timer2 WatchDog O Timer0 é o timer mais utilizado por estar presente em todos os microcontroladores PIC disponíveis atualmente Esse temporizador possui um prescaler divisor de frequência do clock e um contador de 8 bits isso significa que sua contagem interna irá até 255 0xFF antes de ocorrer o estouro overflow Podemos através de funções específicas escolher o ponto inicial da contagem com isso é possível ajustar precisamente o estouro do temporizador Prescaler em microcontroladores é a parte que divide a frequência de oscilação do clock Postscaler escolhe quantas vezes o estouro deve ocorrer para executar a chamada da interrupção Podemos alterar o valor do prescaler X pelos seguintes valores 1 2 4 8 16 32 64 128 e 256 Para calcularmos o intervalo da chamada intervalo de chamada interrupção do TIMER0 prescaler 256 InicialTMR0 4 Frequência O timer0 possui uma estrutura chamada registro OPTIONREG de 8 bits RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 Bit 7 Bit 0 A função de cada um desses bits é descrita abaixo T0CS Timer0 Clock Source Select Determina o uso do clock interno ou externo Para bit nível baixo T0CS 0 a fonte é o clock interno do PIC caso contrário a fonte é o clock externo pino T0CKI T0SE Timer0 Soure Edge Select Determina se o timer0 vai responder na borda de subida ou de descida Para bit nível baixo será incrementado na transição baixaparaalta caso contrário será incrementando na transição altaparabaixa PSA Prescaler Assignment Determina se a préescala será utilizada para o Watchdog ou para o timer0 Para o bit nível baixo o valor de préescala será utilizado para o timer0 c aso contrário ele será utilizado para o Watchdog PS2 à PS0 Prescaler Rate Select Esses bits determinam o valor da préescala divisão da frequência de acordo com a tabela abaixo Tabela 1 Configuração dos bits para o timer0 ou Watchdog Valor dos bits PS2 PS1 PS0 Escala do timer0 Escala do Watchdog 0 0 0 1 2 1 1 0 0 1 1 4 1 2 0 1 0 1 8 1 4 0 1 1 1 16 1 8 1 0 0 1 32 1 16 1 0 1 1 64 1 32 1 1 0 1 128 1 64 1 1 1 1 256 1 128 O bit sinalizador TMR0IF Timer 0 Overflow Interrupt Flag é ativado quando o registro TMR0 8 bits 2 8 256 ou seja 0 a 255 é estourado de 0xFF para 0x00 Podemos utilizar o componente LED para diversos recursos em aplicações utilizando um microcontrolador PIC Na F igura 1 é exposto o símbolo do LED diodo emissor de luz sendo a extremidade da base do triângulo o anodo e a extremidade do traço o catodo Figura 1 Símbolo do LED diodo emissor de luz O display de 7 segmentos é a composição de 8 LEDs sendo 7 LEDs compridos identificado por uma letra de a à g e 1 LED para indicação de um ponto Podemos trabalhar em nossos projetos com dois tipos de displays de 7 segmentos um sendo cátodo comum e o outro sendo ânodo comum conforme ilustrado na Figura 2 Figura 2 Ligação de um display cátodo comum a e um display ânodo comum b O display de 7 segmentos catodo possui o pino terra Gnd em comum com todos os LEDS e o display ânodo tem a alimentação positiva Vcc em comum com todos os LEDS Normalmente o pino comum Gnd ou Vcc é o pino central do display de 7segmentos Observe a Figura 2 novamente cada pino de entrada é identificado com uma letra correspondendo ao LED que irá ser acionado Portanto para formamos um número arábico é necessário energizar os LEDS correspondentes conforme a Tabela 2 Tabela 2 Sinal de entrada nos pinos do display catodo comum e o número correspondente B0 B1 B2 B3 B4 B5 B6 GRUPO B a b c d e f g Número Decimal Saída no Display 1 1 1 1 1 1 0 63 0 0 1 1 0 0 0 0 6 1 1 1 0 1 1 0 1 91 2 1 1 1 1 0 0 1 79 3 0 1 1 0 0 1 1 102 4 1 0 1 1 0 1 1 109 5 0 0 1 1 1 1 1 31 6 1 1 1 0 0 0 0 7 7 1 1 1 1 1 1 1 127 8 1 1 1 0 0 1 1 103 9 Na ligação do display de 7 segmentos entre o microcontrolador e os pinos de cada LED do display devese inserir um resistor em série com um valor de 270Ω Caso esteja utilizando um microcontrolador com poucas portas ou esteja desenvolvendo um projeto com diversos dispositivos será necessário economizar as portas do microcontrolador Para isso podemos utilizar o recurso de um circuito integrado CI o conversor BCD para display 7 segmentos Existe duas versões desse CI sendo um para o display de 7 segmentos com cátodo comum CD4511 e o outro para o display de 7 segmentos ânodo comum 7447 Para maiores informações desse recurso consultar o datasheet desses componentes Equipamentos necessários Tabela 3 Relação de equipamentos e componentes eletrônicos utilizados na aula prática Item Quant Descrição 1 01 Microcomputador com acesso à internet software mikroC e PicsimLab Figura 3 Componentes utilizados na aula prática www www 1 1 Insumos necessários Nest e experimento não são necessários insumos Procedimentos e xperimentais Execut ar o software mikroC e criar um projeto utilizando o PIC 16F628A com um clock externo de 4 MHz e com o WatchDog desabilitado Ajuste o timer0 para mostrar a sequência dos números de 0 a 9 em um intervalo de um segundo entre cada número E quando chegar no número 9 reiniciar a contagem Ao pressionar o botão A1 será feita a inversão da contagem ou seja caso esteja contando na ordem crescente passará a contar de forma decrescente Configure o grupo A das entradas e saídas como TRISA 0b11111110 e o grupo B como TRISB 0b00000000 de acordo com o projeto eletrônico da placa Inicialize as portas com valor zero PORTA PORTB 0x00 Configure a interrupção síncrona do timer0 dentro da função principal main 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Interrupção Timer0 Freq 100000 Hz Período 0001000 segundos OPTIONREG T0CS 0 bit 5 Fonte de referência Clock Interno CLKO OPTIONREG T0SE 0 bit 4 Transição do Timer0 baixaparaalta OPTIONREG PSA 0 bit 3 Seleciona o Prescaler para o Timer0 OPTIONREG PS2 0 OPTIONREG PS1 1 bits 20 PS2PS0 Taxa do Prescaler 010 18 OPTIONREG PS0 0 TMR0 131 Inicia o contador Timer0 no valor 131 Registros de Interrupção INTCON 0 Limpa o registro de controle de interrupção INTCON TMR0IE 1 bit 5 Habilita a Interrupção do Timer0 Overflow INTCON TMR0IF 0 bit2 Limpa o sinalizador de interrupção do timer0 INTCON GIE 1 bit7 Habilita Interrupção Global INTCON INTF 0 Limpa as Flags de interrupção A função de interrupção que executará os comandos ciclicamente fica fora e antes da função principal 1 2 3 4 5 6 7 8 9 10 11 12 void interrupt Função para Interrupção Externa e TMR0 if INTCON TMR0IF 1 INTERRUPÇÃO DO TIMER0 timer0cnt Incrementa 1 unidade a cada 0001 segundos if timer0cnt 500 Contabiliza 05 segundo para inverter valor do bit CÓDIGO A SER IMPLEMENTADO timer0cnt 0 Zera o contador INTCON TMR0IF 0 Limpa o sinalizador INTCON TMR0IE 1 Habilita novamente a interrupção TMR0 131 Inicia o contador Timer0 no valor 131 Implemente dentro do laço infinito da função principal a recepção do comando do botão A1 que fará a inversão do sentido do contador Quadro 1 Sugestão de códigofonte para prática 0 2 Sequência numérica em destaque precisa ser revista 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 UNIUBE Prática 2 Configurando TMRO com préescala define BTORDEM PORTARA1 Vetor com valores constantes para os números do Display Catodo comum unsigned char VetorConst Disp 238 40 205 79 238 109 238 7 127 103 0123456759 char ordem 0 unsigned int timer0cnt 0 int valorcontagem 0 void interrupt Função para Interrupção Externa e TMR0 if INTCONTMR0IF 1 INTERRUPÇÃO DO TIMER0 timer0cnt Incrementa 1 unidade a cada 0001 segundos if timer0cnt 500 Contabiliza 05 segundo para inverter valor do bit if ordemf3 0 Determina o sentido da contagem crescentedescrescente valorcontagem else valorcontagem if valorcontagem 9 ordemf3 0 Reinicia a contagem crescente valorcontagem 0 else if valorcontagem 0 ordemf3 1 Reinicia a contagem decrescente valorcontagem 9 PORTB VetorConstDispvalorcontagem Liga ou desliga as saídas do grupo D timer0cnt 0 Zera o contador INTCONTMR0IF 0 Limpa o sinalizador INTCONTMR0IE 1 Habilita novamente a interrupção TMR0 131 Inicia o contador Timer0 no valor 131 void main TRISA 0b11111110 TRISB 0b00000000 PORTA PORTB 0x00 Interrupção Timer0 Freq 100000 Hz Período 0001000 segundos OPTIONREGT0CS 0 bit 5 Fonte de referência Clock Interno CLKO OPTIONREGT0SE 0 bit 4 Transição do Timer0 baixaparaalta OPTIONREGPSA 0 bit 3 Seleciona o Prescaler para o Timer0 OPTIONREGPS2 0 OPTIONREGPS1 1 bits 20 PS2PS0 Taxa do Prescaler 010 18 OPTIONREGPS0 0 TMR0 131 Inicia o contador Timer0 no valor 131 Registros de Interrupção INTCON 0 Limpa o registro de controle de interrupção INTCONTMR0IE 1 bit 5 Habilita a Interrupção do Timer0 Overflow INTCONTMR0IF 0 bit2 Limpa o sinalizador de interrupção do timer0 INTCONGIE 1 bit7 Habilita Interrupção Global INTCONINTE 1 Habilita a INTERRUPÇÃO EXTERNA INTCONINTF 0 Limpa as Flags de interrupção while 1 if BTORDEM 0 ordemf 3 ordemf3 Sentido do contador crescente decrescente Compil ar a lógica de interrupção externa e grav ar o arquivo compilado extensão hex no microcontrolador Em seguida carregar no simulador utilizando o modelo McLab1 Figura 4 Simulação do projeto Parte 2 Implemente essa mesma lógica utilizando a placa McLab2 com o microcontrolador PIC 16F877A O botão a ser pressionado para realizar a inversão na contagem será o S1 pino B0 com a função de interrupção externa O código da interrupção externa é implementado dentro da função de interrupção no mesmo lugar do timer0 igual exemplificado no quadro abaixo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 void interrupt Função para Interrupção Externa e TMR0 if INTCON INTF 1 INTERRUPÇÃO EXTERNA CÓDIGO A SER IMPLEMENTADO P INT EXTERNA INTCON INTF 0 Limpa as Flags de interrupção if INTCON TMR0IF 1 INTERRUPÇÃO DO TIMER0 timer0cnt Incrementa 1 unidade a cada 0001 segundos if timer0cnt 500 Contabiliza 05 segundo para inverter valor do bit CÓDIGO A SER IMPLEMENTADO P INT TIMER0 timer0cnt 0 Zera o contador INTCON TMR0IF 0 Limpa o sinalizador INTCON TMR0IE 1 Habilita novamente a interrupção TMR0 131 Inicia o contador Timer0 no valor 131 Além disso é necessário ativálo dentro da função principal com o comando INTCONINTE 1 Observe o resultado da junção do timer0 com a interrupção externa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 OPTIONREG INTEDG 0 Conf borda de INT Rising Edge 0 HTOL 1 LTOH Interrupção Timer0 Freq 100000 Hz Período 0001000 segundos OPTIONREG T0CS 0 bit 5 Fonte de referência Clock Interno CLKO OPTIONREG T0SE 0 bit 4 Transição do Timer0 baixaparaalta OPTIONREG PSA 0 bit 3 Seleciona o Prescaler para o Timer0 OPTIONREG PS2 0 OPTIONREG PS1 1 bits 20 PS2PS0 Taxa do Prescaler 010 18 OPTIONREG PS0 0 TMR0 131 Inicia o contador Timer0 no valor 131 Registros de Interrupção INTCON 0 Limpa o registro de controle de interrupção INTCON TMR0IE 1 bit 5 Habilita a Interrupção do Timer0 Overflow INTCON TMR0IF 0 bit2 Limpa o sinalizador de interrupção do timer0 INTCON GIE 1 bit7 Habilita Interrupção Global INTCON INTE 1 Habilita a INTERRUPÇÃO EXTERNA INTCON INTF 0 Limpa as Flags de interrupção Além disso é necessário ativálo dentro da função principal com o comando INTCONINTE 1 Observe o resultado da junção do timer0 com a interrupção externa Ao completar a ligação devese energiz ar o sistema Para inverter a contagem pression ar o botão S1 e permanecer segurando o mesmo por 2 segundos e solteo Pressione outra veze o botão e repar e o funcionamento da lógica Quadro 2 Sugestão de códigofonte para prática 02 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 UNIUBE Prática 2 Interrupção externa assíncrona e Configurando TMRO com préescala define TRUE 1 É possível criar apelidos a constantes ou portas define FALSE 0 define BTORDEM PORTBRB0 Vetor com valores constantes para os números do Display Catodo comum unsigned char VetorConst Disp 63 6 91 79 102 109 125 7 127 103 0123456759 char ordem 0 unsigned int timer0cnt 0 int valorcontagem 0 void interrupt Função para Interrupção Externa e TMR0 if INTCON INTF 1 INTERRUPÇÃO EXTERNA ordem f 3 ordem f3 Sentido do contador crescente decrescente INTCON INTF 0 Limpa as Flags de interrupção if INTCON TMR0IF 1 INTERRUPÇÃO DO TIMER0 timer0cnt Incrementa 1 unidade a cada 0001 segundos if timer0cnt 500 Contabiliza 05 segundo para inverter valor do bit if ordem f3 FALSE Determina o sentido da contagem crescentedescrescente valorcontagem else valorcontagem if valorcontagem 9 ordem f3 FALSE Reinicia a contagem crescente valorcontagem 0 else if valorcontagem 0 ordem f3 TRUE Reinicia a contagem decrescente valorcontagem 9 PORTD VetorConstDisp valorcontagem Liga ou desliga as saídas do grupo D RB1bit RB1bit Inverte a saída B1 LED piscando lógica executando timer0cnt 0 Zera o contador INTCON TMR0IF 0 Limpa o sinalizador INTCON TMR0IE 1 Habilita novamente a interrupção TMR0 131 Inicia o contador Timer0 no valor 131 void main TRISA TRISC TRISD 0x00 Configura o Grupo A C e D como saída TRISB 0x 01 Configura apenas o portBB 0 como entrada PORTA PORTB PORTC PORTD 0x00 Inicializa os valores para A B C e D OPTIONREG INTEDG 0 Conf borda de INT Rising Edge 0 HTOL 1 LTOH Interrupção Timer0 Freq 100000 Hz Período 0001000 segundos OPTIONREG T0CS 0 bit 5 Fonte de referência Clock Interno CLKO OPTIONREG T0SE 0 bit 4 Transição do Timer0 baixaparaalta OPTIONREG PSA 0 bit 3 Seleciona o Prescaler para o Timer0 OPTIONREG PS2 0 OPTIONREG PS1 1 bits 20 PS2PS0 Taxa do Prescaler 010 18 OPTIONREG PS0 0 TMR0 131 Inicia o contador Timer0 no valor 131 Registros de Interrupção INTCON 0 Limpa o registro de controle de interrupção INTCON TMR0IE 1 bit 5 Habilita a Interrupção do Timer0 Overflow INTCON TMR0IF 0 bit2 Limpa o sinalizador de interrupção do timer0 INTCON GIE 1 bit7 Habilita Interrupção Global INTCON INTE 1 Habilita a INTERRUPÇÃO EXTERNA INTCON INTF 0 Limpa as Flags de interrupção RB7bit 1 while 1 Agora modificação no código e simule n ovamente a lógica no PIC Alterar a linha 1 do quadro acima de OPTIONREGINTEDG 0 para OPTIONREGINTEDG 1 Compil ar e simule a lógica no PIC Vamos refazer os testes anteriores P ression ar o botão S1 interrupção externa e permanecer segurando o mesmo por 2 segundo e solteo Pression e outra veze e repar ar a contagem do display de 7 segmentos Cálculos e análises de r esultados Critérios para desenvolvimento Ao utilizar o software o nome do projeto deve conter o seu número do Registro Acadêmico RA A imagem utilizada no relatório o número do RA deve estar visível na imagem Não é permitido retirar imagem da transmissão Caso seja detectado qualquer tipo de plágio o relatório será penalizado Cada aluno deve desenvolver a sua resposta a Escrever quais são as instruções necessárias para configurar a interrupção externa do microcontrolador PIC para trabalhar com inversão de estado 0 para 1 b Qual a diferença de fazermos o incremento da contagem utilizando o timer0 e utilizando o comando de atraso delayms c Com base nos conhecimentos adquiridos sobre interrupção externa escrev er uma breve descrição como ocorre u o funcionamento da lógica antes da alteração da linha 1 e após a alteração da linha 1 Comando OPTIONREGINTEDG d Sabendo que os temporizadores podem ser utilizados pa ra diversas aplicações descrever uma aplicação para o Timer0 e Utilizando a fórmula do intervalo de chamada interrupção do TIMER0 vista na parte teórica desse roteiro de prática calcule e preench a a primeira coluna da Tabela 2 de acordo com os parâmetros das demais colunas Tabela 2 Cálculo do Intervalo de chamada da interrupção do Timer0 Intervalo de Chamada da Interrupção do Timer0 s Prescaler Frequência do Clock Iniciar Contagem em 4 4 MHz 6 8 20 MHz 156 2 4 MHz 0 8 10 MHz 56 4 8 Mhz 6 e Anexe imagens da simulação Referências Microchip Technology Inc PIC16F87XA Data Sheet httpww1microchipcomdownloads enDeviceDoc39582bpdf Acesso em 16022018 2100 MikroElektronika doo httpswwwmikroecommikrocpic Acesso em 16022018 2100 Elaboração do roteiro Prof Me Eduardo Mangucci de Oliveira Data 03032018 Revisão Prof Me Plauto Riccioppo Filho Data 13032018 Organização Prof Me Plauto Riccioppo Filho Data 13032018