interrupções e timers - utfpr
TRANSCRIPT
Interrupções e timers
Guilherme Luiz Moritz1
1 DAELT - Universidade Tecnológica Federal do Paraná
21 de maio de 2014
Moritz, G.L. Interrupções e Timers
Objetivos
Compreender o funcionamento de um display de setesegmentos
Compreender o sistema de interrupções do PIC
Compreender a arquitetura de Timers do PIC
Moritz, G.L. Interrupções e Timers
Display de Sete Segmentos
Figura : Display de 7 segmentos (cátodo comum)
Moritz, G.L. Interrupções e Timers
Multiplexação de displays de 7 segmentos
Moritz, G.L. Interrupções e Timers
74HC4511
Moritz, G.L. Interrupções e Timers
Introdução
Vivemos num mundo controlado pelo tempo
Muitas das ações que um microcontrolador toma devemser regradas pelo tempo
O sistema de timers e interrupções provê maneiras domicrocontrolador responder em tempo aos estímulos dosistema
Moritz, G.L. Interrupções e Timers
Interrupções
Interrupções
Moritz, G.L. Interrupções e Timers
Conceito de interrupção
Uma interrupção de um processador funciona de maneiraanáloga a uma interrupção do mundo real
Num processador, ela é atendida de maneira urgente.
É importante salvar o contexto antes de atender ainterrupção
Moritz, G.L. Interrupções e Timers
O que gera uma interrupção no PIC?
Escrita na EEPROM
Comparador
UART RX e TX
Timer 1 (Capture e Match e Overflow)
Timer 2 (Match)
Interrupções externas (GPIO)
Outros chips possuem outras fontes
Moritz, G.L. Interrupções e Timers
Como configurar uma interrupção no PIC
INTCON -> Liga ou desliga as diferentes interrupções(mascara)PIE1 -> Peripheral enable IRQsHabilite a geração de interrupção do periférico!
Moritz, G.L. Interrupções e Timers
Como configurar uma interrupção no PIC
Figura : Sistemas de interrupção do PIC
Moritz, G.L. Interrupções e Timers
O que acontece quando o PIC detecta umainterrupção?
Completa a instrução corrente
Salva o Program Counter
Limpa o GIE
Executa o código na posição correspondente a interrupção(0x0004)
No fim o programa usa uma instrução especial querestaura o Program counter, continuando daonde oprograma parou
Moritz, G.L. Interrupções e Timers
O que acontece quando o PIC detecta umainterrupção?
Figura : Ilustração de interrupção do PIC
Moritz, G.L. Interrupções e Timers
Salvamento de contexto
O estado dos registradores do PIC devem ser salvos paraexecução da interrupção
O MicroC faz este trabalho
Se for usar assembly, deve ser feito no código
Moritz, G.L. Interrupções e Timers
Regiões Críticas
Regiões onde o processador não pode parar para realizaroutra tarefa
Mascaramento de interrupções
Moritz, G.L. Interrupções e Timers
Como fazer no MicroC?
void interrupt() {counter++;TMR0 = 96;INTCON = 0x20;
}
Moritz, G.L. Interrupções e Timers
Como fazer no MicroC?
void interrupt() {if (INTCON.TMR0IF){counter++;TMR0 = 96;INTCON.TMR0IF = 0;
}else if (INTCON.RBIF){counter++;TMR0 = 96;INTCON.RBIF = 0;
}}
Moritz, G.L. Interrupções e Timers
Contadores
Contadores
Moritz, G.L. Interrupções e Timers
O que é um contador?
Figura : Contador digital
Moritz, G.L. Interrupções e Timers
Usos do contador
Contar tempo [com o auxílio do módulo decapture/compare/pwm (será estudado na aula sobrePWM)]
Contar eventos
Moritz, G.L. Interrupções e Timers
Timer1 do PIC
Figura : Timer 1 do PIC16f628A
Olhar datasheet!
Moritz, G.L. Interrupções e Timers
Timer 1 - Passo a passo
O Prescaler sempre está ativo: Deve se configurar suataxa (T1CKPS1 e T1CKPS0) no T1CON
Selecione o modo: TMR1CS (0: externo, 1: interno)
Ative T1OSCEN: O oscilador começa a contar e o valor deTMR1H e TMR1L são incremendados a cada ciclo declock
Quando a contagem estoura, a flag TMR1IF é setada (egera uma interrupção caso a mesma esteja configurada)
Moritz, G.L. Interrupções e Timers
Outros Timers
Timer 0 - WatchDog timer
Timer 2 - Base de tempo para o PWM e o CCP
Moritz, G.L. Interrupções e Timers
Timer 0 do PIC
Figura : Timer 0 do PIC16f628A
Olhar datasheet!Moritz, G.L. Interrupções e Timers
Contando tempo com o Timer 0
Tempo de estouro (8bits) = ciclo de máquina * prescaler *(256 - TMR0)Ciclo de máquina = 1
Fosc/4
Prescaler: PS< 2 : 0 >
Valor de contagem é carregado em TMR0
Como fica para o estouro de 16 bits?
Moritz, G.L. Interrupções e Timers
Timer 0 - Passo a passo
Selecione o modo do timer no OPTIONREG (T0CS: 0 =timer e 1 = counter)Caso se desejar utilizar o prescaler, o mesmo deve serhabilitado com o bit PSA do OPTIONREG. O valor doprescaler é configurado em PS2-PS0Se a interrupção for utilizada, GIE e T0IE devem serconfigurados no INTCONPara contar tempo
Escreva o valor de TMR0 (condição inicial)Lendo-se TMR0 tem se o número de ciclos passados (oque pode ser convertido em tempo)A flag de interrupção TMR0IF do INTCON é setada todavez que TMR0 estoura.
Para contar pulsosA polaridade dos pulsos em RA4 deve ser selecionada peloTOSE do option regO número de pulsos é contado em TMR0, as interrupçõesfuncionam normalmente
Moritz, G.L. Interrupções e Timers