eng-1450 microcontroladores e sistemas embarcadosabranco/eng1450/lab02/lab02.pdf · interrupções...

Post on 20-Nov-2018

229 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ENG-1450Microcontroladores e Sistemas Embarcados

– Lab02 – Apresentação Kit PicGenios

Interrupção e Timers

Atividades

1. Executar tarefas da aula anterior no kit

2. Exemplo1:

1.Acionar o LED por interrupção de botão

3. Exemplo2:

1.Acionar o LED por interrupção de temporizador

Kit PicGenios

● Ver manual PDF: manual_picgenios.pdf

Operação do Kit PicGenios

● Conectar cabo serial– Computador – conector db9 no painel traseiro

– Kit – conector db9 ao lado da “ventoinha”

● Fonte– Conector oposto ao conector serial.

● Programa para carga de código.– WinPic800

Conector Serial

Fonte alimentaçãoCabo serial

WinPic800

1⁰1⁰ 2⁰2⁰

Interrupções

Interrupção no Microcontrolador

● Mecanismo para interromper a execução do programa principal

● Desvia a execução para um endereço especial

● Retorna para a execução principal no local que tinha interrompido.

Execução da interrrupção

Execuçãoda rotinaprincipal

Execuçãoda rotina deinterrupção

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

1 2 3 4

Interrupção

Execução da interrrupção no PIC

Execuçãoda rotinaprincipal

Execuçãoda rotina deinterrupção

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

1 2 3 4

Interrupção (High/Low priority)

PIC:High → &000008h → Low → &000018h →

MikroC:void interrupt(void);void interrupt_low(void);

Ajuda do MikroC

Manual do PIC

Tem uma cópia no computador do laboratório e no computador no dia da prova.

Interrupções no PIC (pg 73)

● Externa– INT[0,1,2] (B0,B1,B2)

● Transição em um pino digital: (0 → 1) ou (1 → 0)

– RB (B4 .. B7)● Alguma mudança nos 4 pinos digitais

● Interna– Timer[0,1,2]

– Outros periféricos

● Parallel Slave Port Read/Write● A/D Converter● USART Receive● USART Transmit● Master Synchronous Serial Port● Data EEPROM/FLASH Write Operation● Bus Collision● Low Voltage Detect

Procedimento (pg 75)

● Configurar os registradores relacionados com as interrupções.– INTCON, INTCON2, INTCON3, etc..

– Bits: ● xxxIF – Interrupt Flag ● xxxIE - Interrupt Enable● xxxIP – Interrupt Priority● INTEDGEx – Interrupt Edge Select

● Implementar as funções– void interrupt(void);

– void interrupt_low(void); // se necessário

● A função de interrupção deverá verificar os bits de interrupção (xxxIF==1) para saber qual foi a origem da mesma.

● No final deverá limpar (zerar) o xxxIF.

INTCON Registers (pag.75)

PIR Registers (pag.78)

Exemplo: Chave/Int0/B0, Led/D0www.inf.puc-rio.br/~abranco/eng1450/Lab02/Int0.c

// High priority int.function

void interrupt(void){

if (INTCON.INT0IF == 1){

PORTD.RD0 = ~PORTD.RD0;

INTCON.INT0IF=0;

}

}

void main() {

// Global Interrupt Enable

INTCON.GIE = 1;

// Int0/PORTB0 interrupt config

TRISB.RB0 = 1; // digital input

INTCON.INT0IF = 0;

INTCON.INT0IE = 1;

INTCON2.INTEDG0 = 0; // falling edge (1->0)

// Int0 priority is always high

// LED config

TRISD.RD0 = 0; // digital output

PORTD.RD0 = 0; // LED Off

}

TemporizadoresTimers

Temporizadores no PIC

● Contador programável● Entrada de clock configurável● Pode gerar interrupção no overflow● Exemplo

– Clock = 1Mhz → 1µs– Contador de 16bits– Carregar contador com 55.535 (65.535 – 10000)

– Gera overflow com 10.000 pulsos => 10ms

0xFFFF

Contador/Temporizador

Prescaler Timer/Counter

Data Bus

Timer Overflowinterrupt

InputClock

1:2, 1:4, …, 1:256

Principais pontos de atenção

● Combinação do Prescale x Counter– Prescale pequeno

● Permite passos pequenos (maior resolução)● Limita o tempo máximo● Ex: 0,5µs * 65535 => 65,535ms

– Prescale grande● Possibilita maior tempo máximo● Passo grande (menor resolução)● Ex: 256µs * 65535 => 16,77696 seg

Tempos maiores???

● Combinação: 2 ou mais timers– Combinação variável (Flexível & Complicado)

● Prescale0 + Counter0 + Prescale1 + Counter1

– Relógio: Fixo + variável (Restrito & Fácil)● Fixo: Prescale0 + Counter0 => 1ms● Variável: Prescale1 + Counter1 => X * 1ms● Exemplo: www.inf.puc-rio.br/~abranco/eng1450/Lab02/Timer0_1.c

● Combinação: Timer + Software● Fixo: Prescale0 + Counter0 => 1ms● Contador por software

– Hora, min., seg., ms– Dia, mês, ano

Timers [0...3] no PIC18F(pags. 105, 109, 113, 115)

● Timer0 module: – 8-bit/16-bit timer/counter

– with 8-bit programmable prescaler

● Timer1 module: – 16-bit timer/counter

● Timer2 module: – 8-bit timer/counter

– with 8-bit period register (time-base for PWM)

● Timer3 module: – 16-bit timer/counter

Registradores: Timers 0 & 1

Registradores: Timers 2 & 3

Timer0 + Timer1Timer 0

Timer 1

PORTC.RC0

// Timer 1 ConfigurationT1CON.RD16 = 8; // Read/Write in two 8 bits operT1CON.T1OSCEN = 0; // Disable internal OscilatorT1CON.TMR1CS = 1; // External clock from RC0T1CON.T1SYNC = 1; // Do not synchronize ext clock

Ligação internano PIC.

PORTC.RC0 = ~PORTC.RC0; => Timer0/2

Exemplo: Timer + LEDwww.inf.puc-rio.br/~abranco/eng1450/Lab02/Timer0.c

● Calcular o valor do timer– Scale * (65535 – count) => ???

– Ex: (8MHz / 4 ) / 2 => 1us ... 1000x => 1ms

● Função de interrupção– Testar TMR0IF

– Redefinir TMR0H e TMR0L

– Limpar TMR0IF

● Main()– Configurar Timer0

– Configurar Interrupção do Timer0

– Iniciar o Timer0

top related