Delays [Modo de Compatibilidade] - DECOM-UFOP · • C:\mplabc18\doc. Bibliotecadelays.h...
Transcript of Delays [Modo de Compatibilidade] - DECOM-UFOP · • C:\mplabc18\doc. Bibliotecadelays.h...
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
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