30
Delays Curso Engenharia de Controle e Automação Alex Vidigal Bastos www.decom.ufop.br/alex/ [email protected] 1

Delays [Modo de Compatibilidade] - DECOM-UFOP · • C:\mplabc18\doc. Bibliotecadelays.h Temasseguintescaracterísticas:

  • Upload
    hanhu

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

DelaysCurso Engenharia de Controle e Automação

Alex Vidigal Bastoswww.decom.ufop.br/alex/[email protected]

1

Agenda

• Introdução

• Osciladores

• Funções de Atraso

• Ciclo de Clock

• Calculando Ciclo de Instrução

• Biblioteca Delay.h

2

Introdução - Delays

• Na programação de Microcontroladores muitas vezes é

necessário criar funções para contagem de tempo.

• Qual componente ligado ao Microcontrolador gera a base de

tempo do processador? Sua frequência é conhecida?

Introdução - Delays

• Na programação de Microcontroladores muitas vezes é

necessário criar funções para contagem de tempo.

• Qual componente ligado ao Microcontrolador gera a base de

tempo do processador? Sua frequência é conhecida?

Osciladores

• Os microcontroladores necesssitam de uma fonte de clock

para que posssam processar informações, sendo a velocidadede processamento proporcional a frequência fornecida pelafonte de clock;

• A CPU do microcontrolador do PIC18 suporte três fontes declock, cuja seleção é feita através dos bits OSCCON<1:0>, osquais permitem as seguintes configurações;

OSCCON<1:0> = 1x : oscilador interno

OSCCON<1:0> = 10 : oscilador TIMER 1

OSCCON<1:0> = 00 : oscilador primário

Oscilador Interno

• Existem duas fontes de clock associadas ao bloco do oscilador

interno;

• A principal saída desse oscilador é um clock de 8MHz(INTOSC), que pode ser usado diretamente para fornecer sinalde clock para a CPU, ou então pode ser derivado em outrasfrequências conforme tabela;

Oscilador InternoOSCCON<6:4> DESCRIÇÃO

111 8 MHz (INTOSC)

110 4 MHz (INTOSC)

101 2 MHz (INTOSC)

100 1 MHz (INTOSC)

011 500 KHz (INTOSC)

010 250 KHz (INTOSC)

001 125 KHz (INTOSC)

000 31 KHz (INTOSC | INTRC)

Oscilador Secundário

• O TIMER 1 pode operar em dois níveis de consumo, sendo

modo de baixo consumo (low-power) ou em um nível deconsumo maior que low-power;

• Exemplo:

#pragma config LPT1OSC = ON // LP

#pragma config LPT1OSC = OFF

Oscilador Primário

• O microcontrolador PIC suporta diversos tipos de osciladores

externos, e dentre os mais conhecidos estão HS, XT, intRC eEC.

HS (High Speed);

XT (Xtal);

intRC (Internal Resistor e Capacitor);

EC (External Oscilator);

Funções de Atraso - Delays

• Um problema que necessita de contagem de tempo:

• Ex: Seu projeto precisa ter um LED que fica piscando numafrequência 2 Hz, ou seja, uma vez a cada ½ segundo.

• Como podemos contar esse tempo e saber o momento deligar/desligar o LED?

Ciclo de Clock ou Ciclo de

Instrução

� Os Microcontroladores PIC18 executam um ciclo (período) de

INSTRUÇÃO a cada 4 ciclos de CLOCK.

� Um ciclo de Instrução (TCY – Time of Instruction Cycle) é o

tempo gasto que a CPU gasta para executar uma instrução.

Ciclo de Clock ou Ciclo de

Instrução

� Os Microcontroladores PIC18 executam um ciclo (período) de

INSTRUÇÃO a cada 4 ciclos de CLOCK.

� Um ciclo de Instrução (TCY – Time of Instruction Cycle) é o

tempo gasto que a CPU gasta para executar uma instrução.

Calculando o Ciclo de Instrução

� Um ciclo de INSTRUÇÃO para o PIC18 é dado por:

� Fckl = 48 MHz Tckl = 20,8 * 10-9

� TCY = 4 * (1/Fckl) = 4 * Tckl

� TCY = 4*(1/48MHz) = 83,33*10-9 = 83,33ns

� FCY = Fckl/4 = 48MHz/4 = 12*106 instruções por segundo

� FCY = 12 MIPS(Instructions Per Second)

Calculando o Ciclo de Instrução

� ATENÇÃO – Exemplo da frequência de CLOCK da CPU é

de 40 MHz, apesar do cristal externo ser de 20MHz!

� Existe um circuito interno multiplicador para alcançar os 48MHz.

Calculando o Ciclo de Instrução

� Qual o número N de ciclos de instrução necessários para contar o

tempo de 0,5s?

N = tempo desejado / TCY

N = 0,5 / 83,33ns = 6 milhões ciclos de instrução.

� Assim após 6 milhões de ciclos de instrução da CPU terá passadoapenas 0,5s!!!

Exemplo de como contar tempoPara contar tempo baseando-se no ciclo de instrução (TCY) da CPU

precisamos mandar a CPU executar a quantidade de instruções queequivalem ao gasto de tempo desejado.

� Que tal criar uma função que faça a CPU repetir uma mesmainstrução N vezes e gastar um tempo determinado?

� E porque não criar uma biblioteca para aproveitar essa função emvários projetos?

Bibliotecas do compilador C18

• Onde estão localizadas as bibliotecas do compilador C18?

• C:\mplabc18\h

• Onde buscar ajuda?

• C:\mplabc18\doc

Biblioteca delays.h

Tem as seguintes características:

– Base de tempo de um ciclo de instrução (TCY – Time of

Instruction Cycle);

No Kit: 1 TCY – 83,33ns.

– Funções Disponíveis:

Biblioteca delays.h

Biblioteca delays.h

Biblioteca delays.h

Qual é o número máximo de ciclos de instrução para gerar uma

espera ocupada através da biblioteca C18 delays.h?

Biblioteca delays.h

Qual é o número máximo de ciclos de instrução para gerar uma

espera ocupada através da biblioteca C18 delays.h?

void Delay10KTCYx(0): //atraso de 2.560.000 ciclos

Biblioteca delays.h

Qual é o número máximo de ciclos de instrução para gerar uma

espera ocupada através da biblioteca C18 delays.h?

void Delay10KTCYx(0): //atraso de 2.560.000 ciclos

Qual é o tempo equivalente a esse delay?

Biblioteca delays.h

Qual é o número máximo de ciclos de instrução para gerar uma

espera ocupada através da biblioteca C18 delays.h?

void Delay10KTCYx(0): //atraso de 2.560.000 ciclos

Qual é o tempo equivalente a esse delay?

2.560.000*83,33ns=213,33ms

Biblioteca delays.h

Qual é o número máximo de ciclos de instrução para gerar uma

espera ocupada através da biblioteca C18 delays.h?

void Delay10KTCYx(0): //atraso de 2.560.000 ciclos

Qual é o tempo equivalente a esse delay?

2.560.000*83,33ns=213,33ms

Se eu precisar de mais tempo... O que posso fazer?

Biblioteca delays.h

Qual é o número máximo de ciclos de instrução para gerar uma

espera ocupada através da biblioteca C18 delays.h?

void Delay10KTCYx(0): //atraso de 2.560.000 ciclos

Qual é o tempo equivalente a esse delay?

2.560.000*83,33ns=213,33ms

Se eu precisar de mais tempo... O que posso fazer?

Chamar a função várias vezes!!!

Qual função vou usar?As funções da biblioteca C18 delays.h usam com base de tempo 1TCY

e seus múltiplos: 10, 100, 1K e 10K.

Para contar o tempo de 200ms precisamos esperar 2.400.00 TCY.

2.400.000=> múltiplos de 10.000 TCY, usar:

Qual função vou usar?As funções da biblioteca C18 delays.h usam com base de tempo 1TCY

e seus múltiplos: 10, 100, 1K e 10K.

Para contar o tempo de 200ms precisamos esperar 2.400.00 TCY.

2.400.000=> múltiplos de 10.000 TCY, usar:

Qual função vou usar?As funções da biblioteca C18 delays.h usam com base de tempo 1TCY

e seus múltiplos: 10, 100, 1K e 10K.

Para contar o tempo de 200ms precisamos esperar 2.400.00 TCY.

2.400.000=> múltiplos de 10.000 TCY, usar:

Delay10KTCYx(240); //atraso de 200ms

Perguntas