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

Olhar datasheet!
Moritz, G.L. Interrupes e Timers
Contando tempo com o Timer 0

Tempo de estouro (8bits) = ciclo de mquina * prescaler *


(256 - TMR0)
1
Ciclo de mquina = 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

Você também pode gostar