Você está na página 1de 30

Delays

Curso Engenharia de Controle e Automao

Alex Vidigal Bastos www.decom.ufop.br/alex/ alexvbh@gmail.com

Agenda
Introduo Osciladores Funes de Atraso Ciclo de Clock Calculando Ciclo de Instruo Biblioteca Delay.h

Introduo - Delays

Na programao de Microcontroladores muitas vezes necessrio criar funes para contagem de tempo.

Qual componente ligado ao Microcontrolador gera a base de tempo do processador? Sua frequncia conhecida?

Introduo - Delays

Na programao de Microcontroladores muitas vezes necessrio criar funes para contagem de tempo.

Qual componente ligado ao Microcontrolador gera a base de tempo do processador? Sua frequncia conhecida?

Osciladores

Os microcontroladores necesssitam de uma fonte de clock para que posssam processar informaes, sendo a velocidade de processamento proporcional a frequncia fornecida pela fonte de clock; A CPU do microcontrolador do PIC18 suporte trs fontes de clock, cuja seleo feita atravs dos bits OSCCON<1:0>, os quais permitem as seguintes configuraes; OSCCON<1:0> = 1x : oscilador interno OSCCON<1:0> = 10 : oscilador TIMER 1 OSCCON<1:0> = 00 : oscilador primrio

Oscilador Interno

Existem duas fontes de clock associadas ao bloco do oscilador interno; A principal sada desse oscilador um clock de 8MHz (INTOSC), que pode ser usado diretamente para fornecer sinal de clock para a CPU, ou ento pode ser derivado em outras frequncias conforme tabela;

Oscilador Interno
OSCCON<6:4> 111 110 101 100 011 010 001 000 DESCRIO 8 MHz (INTOSC) 4 MHz (INTOSC) 2 MHz (INTOSC) 1 MHz (INTOSC) 500 KHz (INTOSC) 250 KHz (INTOSC) 125 KHz (INTOSC) 31 KHz (INTOSC | INTRC)

Oscilador Secundrio

O TIMER 1 pode operar em dois nveis de consumo, sendo modo de baixo consumo (low-power) ou em um nvel de consumo maior que low-power; Exemplo: #pragma config LPT1OSC = ON // LP #pragma config LPT1OSC = OFF

Oscilador Primrio

O microcontrolador PIC suporta diversos tipos de osciladores externos, e dentre os mais conhecidos esto HS, XT, intRC e EC. HS (High Speed); XT (Xtal); intRC (Internal Resistor e Capacitor); EC (External Oscilator);

Funes de Atraso - Delays

Um problema que necessita de contagem de tempo: Ex: Seu projeto precisa ter um LED que fica piscando numa frequncia 2 Hz, ou seja, uma vez a cada segundo.

Como podemos contar esse tempo e saber o momento de ligar/desligar o LED?

Ciclo de Clock ou Ciclo de Instruo


Os Microcontroladores PIC18 executam um ciclo (perodo) de INSTRUO a cada 4 ciclos de CLOCK. Um ciclo de Instruo (TCY Time of Instruction Cycle) o tempo gasto que a CPU gasta para executar uma instruo.

Ciclo de Clock ou Ciclo de Instruo


Os Microcontroladores PIC18 executam um ciclo (perodo) de INSTRUO a cada 4 ciclos de CLOCK. Um ciclo de Instruo (TCY Time of Instruction Cycle) o tempo gasto que a CPU gasta para executar uma instruo.

Calculando o Ciclo de Instruo


Um ciclo de INSTRUO 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 instrues por segundo FCY = 12 MIPS(Instructions Per Second)

Calculando o Ciclo de Instruo


ATENO Exemplo da frequncia de CLOCK da CPU
de 40 MHz, apesar do cristal externo ser de 20MHz! Existe um circuito interno multiplicador para alcanar os 48MHz.

Calculando o Ciclo de Instruo


Qual o nmero N de ciclos de instruo necessrios para contar o tempo de 0,5s? N = tempo desejado / TCY N = 0,5 / 83,33ns = 6 milhes ciclos de instruo. Assim aps 6 milhes de ciclos de instruo da CPU ter passado apenas 0,5s!!!

Exemplo de como contar tempo


Para contar tempo baseando-se no ciclo de instruo (TCY) da CPU precisamos mandar a CPU executar a quantidade de instrues que equivalem ao gasto de tempo desejado. Que tal criar uma funo que faa a CPU repetir uma mesma instruo N vezes e gastar um tempo determinado? E porque no criar uma biblioteca para aproveitar essa funo em vrios projetos?

Bibliotecas do compilador C18

Onde esto localizadas as bibliotecas do compilador C18?

C:\mplabc18\h

Onde buscar ajuda?

C:\mplabc18\doc

Biblioteca delays.h
Tem as seguintes caractersticas:

Base de tempo de um ciclo de instruo (TCY Time of Instruction Cycle); No Kit: 1 TCY 83,33ns. Funes Disponveis:

Biblioteca delays.h

Biblioteca delays.h

Biblioteca delays.h
Qual o nmero mximo de ciclos de instruo para gerar uma espera ocupada atravs da biblioteca C18 delays.h?

Biblioteca delays.h
Qual o nmero mximo de ciclos de instruo para gerar uma espera ocupada atravs da biblioteca C18 delays.h? void Delay10KTCYx(0): //atraso de 2.560.000 ciclos

Biblioteca delays.h
Qual o nmero mximo de ciclos de instruo para gerar uma espera ocupada atravs 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 nmero mximo de ciclos de instruo para gerar uma espera ocupada atravs 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 nmero mximo de ciclos de instruo para gerar uma espera ocupada atravs 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 nmero mximo de ciclos de instruo para gerar uma espera ocupada atravs 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 funo vrias vezes!!!

Qual funo vou usar?


As funes da biblioteca C18 delays.h usam com base de tempo 1TCY e seus mltiplos: 10, 100, 1K e 10K. Para contar o tempo de 200ms precisamos esperar 2.400.00 TCY. 2.400.000=> mltiplos de 10.000 TCY, usar:

Qual funo vou usar?


As funes da biblioteca C18 delays.h usam com base de tempo 1TCY e seus mltiplos: 10, 100, 1K e 10K. Para contar o tempo de 200ms precisamos esperar 2.400.00 TCY. 2.400.000=> mltiplos de 10.000 TCY, usar:

Qual funo vou usar?


As funes da biblioteca C18 delays.h usam com base de tempo 1TCY e seus mltiplos: 10, 100, 1K e 10K. Para contar o tempo de 200ms precisamos esperar 2.400.00 TCY. 2.400.000=> mltiplos de 10.000 TCY, usar: Delay10KTCYx(240); //atraso de 200ms

Perguntas

Você também pode gostar