Você está na página 1de 26

Interrupes e timers

Guilherme Luiz Moritz1


1

DAELT - Universidade Tecnolgica Federal do Paran

4 de dezembro de 2013

Moritz, G.L.

Interrupes e Timers

Objetivos

Compreender o funcionamento de um display de sete


segmentos

Compreender o sistema de interrupes do PIC

Compreender a arquitetura de Timers do PIC

Moritz, G.L.

Interrupes e Timers

Display de Sete Segmentos

Figura : Display de 7 segmentos (ctodo comum)

Moritz, G.L.

Interrupes e Timers

Multiplexao de displays de 7 segmentos

Moritz, G.L.

Interrupes e Timers

74HC4511

Moritz, G.L.

Interrupes e Timers

Introduo

Vivemos num mundo controlado pelo tempo

Muitas das aes que um microcontrolador toma devem


ser regradas pelo tempo

O sistema de timers e interrupes prov maneiras do


microcontrolador responder em tempo aos estmulos do
sistema

Moritz, G.L.

Interrupes e Timers

Interrupes

Interrupes

Moritz, G.L.

Interrupes e Timers

Conceito de interrupo

Uma interrupo de um processador funciona de maneira


anloga a uma interrupo do mundo real

Num processador, ela atendida de maneira urgente.

importante salvar o contexto antes de atender a


interrupo

Moritz, G.L.

Interrupes e Timers

O que gera uma interrupo no PIC?

Escrita na EEPROM
Comparador
UART RX e TX
Timer 1 (Capture e Match e Overflow)
Timer 2 (Match)
Interrupes externas (GPIO)
Outros chips possuem outras fontes

Moritz, G.L.

Interrupes e Timers

Como configurar uma interrupo no PIC


INTCON -> Liga ou desliga as diferentes interrupes
(mascara)
PIE1 -> Peripheral enable IRQs
Habilite a gerao de interrupo do perifrico!

Moritz, G.L.

Interrupes e Timers

Como configurar uma interrupo no PIC

Figura : Sistemas de interrupo do PIC

Moritz, G.L.

Interrupes e Timers

O que acontece quando o PIC detecta uma


interrupo?

Completa a instruo corrente


Salva o Program Counter
Limpa o GIE
Executa o cdigo na posio correspondente a interrupo
(0x0004)
No fim o programa usa uma instruo especial que
restaura o Program counter, continuando daonde o
programa parou

Moritz, G.L.

Interrupes e Timers

O que acontece quando o PIC detecta uma


interrupo?

Figura : Ilustrao de interrupo do PIC

Moritz, G.L.

Interrupes e Timers

Salvamento de contexto

O estado dos registradores do PIC devem ser salvos para


execuo da interrupo

O MicroC faz este trabalho

Se for usar assembly, deve ser feito no cdigo

Moritz, G.L.

Interrupes e Timers

Regies Crticas

Regies onde o processador no pode parar para realizar


outra tarefa

Mascaramento de interrupes

Moritz, G.L.

Interrupes e Timers

Como fazer no MicroC?

void interrupt() {
counter++;
TMR0 = 96;
INTCON = 0x20;
}

Moritz, G.L.

Interrupes 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.

Interrupes e Timers

Contadores

Contadores

Moritz, G.L.

Interrupes e Timers

O que um contador?

Figura : Contador digital

Moritz, G.L.

Interrupes e Timers

Usos do contador

Contar tempo [com o auxlio do mdulo de


capture/compare/pwm (ser estudado na aula sobre
PWM)]

Contar eventos

Moritz, G.L.

Interrupes e Timers

Timer1 do PIC

Figura : Timer 1 do PIC16f628A

Olhar datasheet!
Moritz, G.L.

Interrupes e Timers

Timer 1 - Passo a passo

O Prescaler sempre est ativo: Deve se configurar sua


taxa (T1CKPS1 e T1CKPS0) no T1CON
Selecione o modo: TMR1CS (0: externo, 1: interno)
Ative T1OSCEN: O oscilador comea a contar e o valor de
TMR1H e TMR1L so incremendados a cada ciclo de
clock
Quando a contagem estoura, a flag TMR1IF setada (e
gera uma interrupo caso a mesma esteja configurada)

Moritz, G.L.

Interrupes e Timers

Outros Timers

Timer 0 - WatchDog timer

Timer 2 - Base de tempo para o PWM e o CCP

Moritz, G.L.

Interrupes e Timers

Timer 0 do PIC

Figura : Timer 0 do PIC16f628A


Moritz, G.L.
Interrupes e Timers
Olhar
datasheet!

Contando tempo com o Timer 0


Tempo de estouro (8bits) = ciclo de mquina * prescaler *
(256 - TMR0)
Ciclo de mquina =

1
Fosc/4

Prescaler: PS< 2 : 0 >


Valor de contagem carregado em TMR0

Como fica para o estouro de 16 bits?


Moritz, G.L.

Interrupes 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 ser
habilitado com o bit PSA do OPTIONREG. O valor do
prescaler configurado em PS2-PS0
Se a interrupo for utilizada, GIE e T0IE devem ser
configurados no INTCON
Para contar tempo
Escreva o valor de TMR0 (condio inicial)
Lendo-se TMR0 tem se o nmero de ciclos passados (o
que pode ser convertido em tempo)
A flag de interrupo TMR0IF do INTCON setada toda
vez que TMR0 estoura.

Para contar pulsos


A polaridade dos pulsos em RA4 deve ser selecionada pelo
TOSE do option reg
O nmero de pulsos contado em TMR0, as interrupes
funcionam normalmente
Moritz, G.L.

Interrupes e Timers