dicas & truques de otimização de pinos e software com mcus microchip

54
© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 1 Dicas & Truques de otimização de Pinos e Software com MCUs Microchip (TPS)

Upload: nando

Post on 16-Nov-2014

545 views

Category:

Documents


3 download

DESCRIPTION

Famílias de 8 e 14 pinosMicrochip MCUs de Alto desempenhoDC a 20 MHz (em breve até 32MHz!!) 8 níveis de pilhaMemória de programa FLASH Reprogramáveis Capacidade de gravação In-Circuit (ICSP™) Breve – Self-Programming!! Baixo consumo de corrente Operação em baixa tensão com capacidade de escritaem EEPROM em todo o range (2V-5.5V

TRANSCRIPT

Page 1: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 1

Dicas & Truques de otimização de Pinos e Software com MCUs

Microchip

(TPS)

Page 2: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 2

O que esperar desta aula...

InteratividadeInteratividade!!!!!!

IdIdééiasias

TruquesTruques

DicasDicas

Page 3: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 3

Agenda

� Dicas e Truques de Hardware

� Dicas e Truques de Software emAssembly

� Dicas e Truques de Software em C (Hi-Tech)

Page 4: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 4

Famílias de 8 e 14 pinos Microchip

� MCUs de Alto desempenho� DC a 20 MHz (em breve até 32MHz!!)� 8 níveis de pilha

� Memória de programa FLASH� Reprogramáveis� Capacidade de gravação In-Circuit (ICSP™)� Breve – Self-Programming!!

� Baixo consumo de corrente� Operação em baixa tensão com capacidade de escrita

em EEPROM em todo o range (2V-5.5V)

Page 5: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 5

Dicas e Truques com Hardware

Page 6: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 6

Multiplexação de I/Os

1 2

3 4

3V

GP0

GP1

GP2

PIC12F6XX

5 6

GPIO LEDs0 1 2 1 2 3 4 5 6

0 0 0 0 0 0 0 0 00 1 Z 1 0 0 0 0 01 0 Z 0 1 0 0 0 0Z 0 1 0 0 1 0 0 0Z 1 0 0 0 0 1 0 00 Z 1 0 0 0 0 1 01 Z 0 0 0 0 0 0 10 0 1 0 0 1 0 1 00 1 0 1 0 0 1 0 00 1 1 1 0 0 0 1 01 0 0 0 1 0 0 0 11 0 1 0 1 1 0 0 01 1 0 0 0 0 1 0 11 1 1 0 0 0 0 0 0

Exemplo - 6 LEDs em 3 pinos de I/O

Nº LEDs = nº I/Os * (nº I/Os - 1) (1)

Nota 1: nº LEDs também limitado pelo IOL, IOH de cada pino e máxima corrente do item.

Page 7: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 7

PIC® MCUI/O

Ler 3 estados em 1 pino

� Lendo estado Z� Pino como saída em 1� Muda para entrada� Lê 1� Muda para saída em 0� Muda para entrada� Lê 0

� Lendo estado 0� Lê 0 na entrada

� Lendo estado 1� Lê 1 na entrada

estado Pino 0 Pino 1

0 curto aberto1 aberto curtoZ aberto aberto

5v

0v

Pin 1

Pin 0

Page 8: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 8

Teclado 4x4 em uma entrada

GP0/AN0

PIC12F6XX

VDD

Resistores configurados para tensões únicas

Usar o A/D para medir a tensão do botão

Obs.: necessário tolerâncias 1%

Page 9: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 9

Multiplexando teclas e DIP SwitchesMultiplexando teclas e DIP Switches

� quando GP4=1 e não há teclas pressionadas, lê DIP Switch (p.Ex.: ID de placa)

� Quando GP4=0, lê teclas

GP0

GP4

GP1

GP2

GP3

VDD

Page 10: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 10

Lendo 4 chaves com um comparador e dois pinos

� Configurar CVref para verificar cada nível válido

� Chavear entrada para ler segundo par

CVref

PIC16F630

COUT

VDD

Page 11: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 11

Usando o comparador interno como Amp Op

� R3 e C2 – filtro passa baixa. Fcorte = 2*Fsinal� R1 e R2 – circuito de ganho� Para calcular C1 e C2:

SaídaEntrada

R1

R2

C1C2

R3

Fcorte = 12*pi*R3*C2

Fcorte = 12*pi*(R1 || R2)*C1

Ganho = R1+R2

R2

Page 12: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 12

Usando o comparador interno como Amp Op

� Pode ser configurado como inversor� R1 e R2 – circuito de ganho� Cálculo de C1 e C2 é o mesmo:

Saída

Entrada

Vdd

RR

R1

R2R3

C1C2

Fcorte = 12*pi*R3*C2

Fcorte = 12*pi*(R1 || R2)*C1

Ganho = R1

R2

Page 13: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 13

Criando histerese entre entradas do comparador

� Realimentação (R3) cria histerese� Evita de comparador “oscilar”

SaídaEntrada

R1

R2

R3

Vmed = Vdd*VtlVdd–Vth+Vtl

Vmed = Vdd*R2R1+R2

R3 = Req* Vdd -1Vth-Vtl

Req = R1*R2R1+R2

[( ) ]

Page 14: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 14

Amostrando sinais muito rápidos

� Circuito “one-shot”� Transforma glitches

e sinais curtos, em sinais mais longos para amostragem

� Calcular histerese para ficar pouco abaixo de 0.7V

� Com glitch, saida do comparador =1 e carrega C1

Entrada

R1

R2

R4

Tpulse = R2*C1*ln(Vth/Vtl)4

Vdd

Vdd

R5

R3

C1

C2

Saída

Page 15: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 15

Alimentação e dados em 1 pino

� Dados em uma única direção� Transistor “puxa” linha de dados para 0 com

GPIO do transmissor� Capacitor estabiliza VDD quando linha de

dados está em 0

GP0 GP0

TransmissorReceptor

VDD VDD

VDD - 0.7V

Page 16: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 16

Gerando tensões mais altas que VddGerando tensões mais altas que Vdd

�� CLKOUT gera frequência para o charge CLKOUT gera frequência para o charge pumppump

�� Baixo custoBaixo custo�� NNúúmero mmero míínimo de componentesnimo de componentes

PIC12F6XXw/ RCCLKOUT

CLKOUTVout max = (2 * VDD) - (2 * Vdiodo)

CpumpCfiltro

VDD

Page 17: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 17

Circuito de Auto-Desligamento(vulgo “PIC suicida”)

Funcionamento:Funcionamento:� Pressionando botão liga PIC® MCU� Ao executar SLEEP desliga PIC MCU (se suicida…)� Baixo custo(usa FET canal N)� Confiável� Nenhum I/O adicional requerido

PIC12F6XX

CLKOUT

VDD

VDD

VDD VBATVDD

Page 18: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 18

Limitador de corrente inteligente usando A/D

� Controle de motor e fontes podem precisar de limitadores de corrente

� Controle inteligente pode ser usado para:� Corrente In-rush� Limitação de corrente� Proteção de sobre-corrente� circuit breaker inteligente

Page 19: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 19

Usando o A/D do PICmicro®

MCU A/D para limitador de corrente inteligente

� Detecta corrente em Rsense

� Capacitor de filtro opcional

� Diversos níveis de resposta de sobre-corrente podem ser criados por software

Rsense

10K Carga ou Motor

PIC12F6XX

AN0

Page 20: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 20

1. Método de temporização RC com resistor de referência

2. Criando A/D delta-sigma

Lendo sensor analógico sem ter A/D (vulgo “A/D de

pobre”)

Page 21: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 21

1. Método de temporização RC:

Resposta ao degrau simples em RC

Vc(t) = VDD * (1 - e -t/(RC))

t = -RC ln(1 - Vth/VDD)

Vth/VDD é constante

R2 = (t2/t1) * R1t = 0 t = t1

Vth

Vc(t)

Timet = t2

R1 R2

“A/D de pobre”

Page 22: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 22

Do Data Sheet do PIC12F508:Qual pino deve ser escolhido? TTL ou Schmitt Trigger?

“A/D de pobre”

Page 23: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 23

alternativa: comparador de tensão no PIC12F6XX

1. configura GP1 e GP2 como entradas, e

GP0 para saída em 0 para descarregar C.2. configura GP0 como entrada e GP1 para saída em 1.3. Medir tRsen (GP0 muda para 1).4. Repetir passo 1.5. Configura GP0 para entrada e GP2 para saída em nível 1.6. Medir tRref (GP0 muda para 1).7. Capacitor de filme de propileno!8. Rsen = x RreftRsen

tRref

Rref

RsenGP2

GP1

GP0

PIC12F6XX

1. Método de temporização RC

“A/D de pobre”

Page 24: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 24

1. Tensão média em GP1 = CVref2. Base de tempo será taxa de amostragem3. No fim de cada período:

-Se GP1 > CVref, GP2 =0.- Se GP1 < CVref, GP2=1.

4. Acumula as saídas de GP2 em diversas amostras.5. Número de amostras determina a resolução do A/D.

PIC12F6XX

Vin

CVref

GP2

GP1COUT

Softwarefecha o circuito

Conversor Delta-Sigma

Page 25: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 25

Conversor Delta-Sigma

� Pros:� Alta resolução� Boa imunidade a ruído� Facilmente escalonável

e offset configurável, mesmo muito acima de VDD e abaixo do VSS

� Linear e monotônico por natureza

� Requer poucos componentes externos (2 R’s & 1 C)

� Contras:� Requer bloco de

firmware� Conversão lenta� Quanto mais bits, mais

lenta� Precisão absoluta

requer fonte estável

Page 26: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 26

10K

Rsen

GP2

GP1

AN0 (A/D)

PIC12F6XX100K

1. Resistores de 10K e 100K usados para ajustar o range2. Configura pino para resistor escolhido como saída em ‘1’, outros como entradas.3. Vref para A/D = VDD.4. Calculo de Rsen independente de VDD.5. Count = Rsen/(Rsen+Rref) x 2556. Não esqueça de configurar o tempo de aquisição do A/D

Usado para ajustar dinamicamente o range de leitura.

Ler sensor com resolução maior

Page 27: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 27

Dicas Gerais de otimização de consumo

• Controlar desligamento de circuitos externos• Se tiver disponibilidade de pinos, alimentar circuitos externos

pelos I/Os• Quando não estiver em uso, desligar circuitos externos para

minimizar consumo

Page 28: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 28

Dicas Gerais de otimização de consumo

• Calcular consumo mínimo• Permite fazer estimativa de vida útil de bateria• Informações necessárias no Data Sheet• Basta multiplicar o tempo que passa em cada estado de

consumo a cada loop de aplicação. Ex: para o circuito anterior:

Page 29: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 29

Dicas Gerais de otimização de consumo

Modo Tempo em modo CorrenteSleepMcu sleepSensor desligadoEeprom desligada

1990 ms 50uA00

Amostra sensorMCU ligadoSensor ligadoEEPROM desligada

1 ms48uA16,5 uA0

ProcessandoMCU ligadoSensor desligado EEPROM desligada

1ms48uA00

ArmazenandoMCU ligadoSensor desligadoEEPROM ligada

8ms48uA01mA

Imed = [(0.199*50u)+(0.001 *64.5u)+(0.001*48u)+(0.008*1048u)]/2 = 9.22uA

Page 30: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 30

Dicas Gerais de otimização de consumo

• Pinos não usados: • se flutuante, deixar como saída alta ou baixa.• Senão, deixar como entrada, com pull-up de alto

valor (+/- 10k) para terra ou Vdd• Modo de menor consumo: entrada analógica

• Buffers de corrente estão desligados

• Usar, sempre que possível, níveis mais baixos de Vdd• Perda nos transistores é menor

• Chaveamento de clock• Itens mais novos (ex: PIC12F635) permitem chaveamento de

clock em operação• Registrador OSCCON• Manter em frequência alta apenas quando desempenho é

necessário

Page 31: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 31

Dicas Gerais de otimização de consumo

• Chaveamento de clock• Itens mais novos (ex: PIC12F635) permitem chaveamento de

clock em operação• Registrador OSCCON• Manter em frequência alta apenas quando desempenho é

necessário• Em micros que não tenham esse recurso:

Page 32: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 32

Oscilador RC dual-speed

PIC12F6XX

GP0

OSC1

+5V

R1 R2

C

1. Ap1. Apóós Reset, os pinos de I/O estão em s Reset, os pinos de I/O estão em Alta impedância (a baixa frequência)Alta impedância (a baixa frequência)2. configurar o pino em sa2. configurar o pino em saíída alta no I/Oda alta no I/O3. R1, R2 e C determinam Fosc3. R1, R2 e C determinam Fosc4. Funciona tamb4. Funciona tambéém com capacitores m com capacitores adicionaisadicionais

Page 33: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 33

Oscilador RC dual-speed

Freq = 2.1 MHz

Duty Cycle = 91%

Freq = 4.3 MHz

Duty Cycle = 90%

Page 34: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 34

Dicas Gerais de otimização de consumo

• Ultra Low Power Wake Up• Micros mais novos (ex PIC12F635) possuem ULPWU• Fonte de corrente e comparador permitem que um simples

capacitor externo acorde o micro de tempos em tempos• Consome menos do que WDT

Page 35: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 35

Dicas e truques com software

Page 36: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 36

NOPNOP ;2 instructions, 2 cycles

CALL Rtrn ;1 instruction, 4 cycles. . .

Rtrn RETURN

GOTO $+1 ;1 instruction, 2 cycles

Técnicas de Delay

� Usar GOTO “next instruction” ao invés de 2 NOPs.� Usar CALL Rtrn no lugar de 4 NOPs (aonde “Rtrn” é

o label de saída de subrotina).

Page 37: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 37

Otimizando o Destino

� Bit de destino define W ou F para resultado� observe a movimentação dos dados e reestruture

Exemplo: A + B => A

MOVF B,WADDWF A,F

2 instruções

MOVF A,WADDWF B,WMOVWF A

3 instruções

Page 38: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 38

Otimizando chamadas de funções

Subroutine . . . ; Faz algoRETURN

. . .CALL Subroutine ; 2 instruções, 4 ciclosRETURN

. . .GOTO Subroutine ; 1 instrução, 2 ciclos

� Substitua uma instrução CALL seguida imediatamente por um RETURN por uma instrução GOTO

Page 39: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 39

Trocar dados entre W e F

A macro abaixo troca os valores de W com REG sem usar um segundo registrador

SWAP MACRO REGXORWF REG,FXORWF REG,WXORWF REG,FENDM

Usa: 0 registradores TEMP3 Instruções3 Tcy

0x55inicialmenteW = 1010 1010REG = 0101 0101

0101 01011111 1111 (REG)1010 10100101 0101 (W)1111 11111010 1010 (REG)

Page 40: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 40

Rotacione um byte pelo Carry sem usar RAM para contagem de loop:

� Facilmente adaptado para protocolos seriais.� O bit de carry é setado uma vez no início da

rotação� Bit de carry é limpo(exceto no último ciclo) e

o ciclo se repete até o bit zero indicar o fim.

Rotação de bits usando Carry

Page 41: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 41

Rotação de bits usando Carry

1

C

Z = 1

2ª Rotação

1ª Rotação

Rotação final

1 0 1 0 1 0 1 0

7 0

1 0 1 0 1 0 1 0

10 0 1 0 1 0 1 0

01 0 0 0 0 0 0 0

1

Page 42: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 42

Dicas para otimização em C –Compilador Hi-Tech PICC10/12/16

Page 43: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 43

Dicas Gerais de otimização em C

• Movimentar variáveis do mesmo banco juntos• Verificar ordem da declaração das variáveis – o compilador tenta

alocar as variáveis em ordem (banco0, banco1, banco 2...)

• Sempre tentar usar aritmética com bytes em vez de words

• Uso de ponteiros para os elementos de um array é mais eficiente do que usar o índice• Considerando char *p e char array[100]• p = array;

• *p = valor;

• p++;

• Obs: Válido para grandes loops apenas!!

• Melhor do que• array[i]=valor;

• i++;• Melhor do que

Page 44: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 44

Dicas Gerais de otimização em C

• Em alguns casos, uma série de if- else if gera código mais otimizado do que um switch-case

• Procurar sempre usar constantes sequenciais (sem saltos) em switch-case

• Sempre dar preferência a incrementar, decrementar e limpar variáveis (atribuir valores usam 2 instruções assembly)

Page 45: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 45

Dicas Gerais de otimização em C

• Existe um overhead para chamadas de funções• Vale mais a pena trocar chamadas a

funções pequenas por macros• Por outro lado, blocos grandes de código

duplicado devem ser trocados por funções• Evitar variáveis Signed!!

Sempre revisar o código já escrito• muitas vezes, o código já foi tão modificado

que as otimizações anteriores não valem mais a pena

Page 46: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 46

Dicas de otimização em C

• Dois modos diferentes de executar loops:• for(i=0;i<250;i++) do_func(); /* executa do_func()

250 vezes */

• for(i=250;i!=0;i--) do_func(); /* executa do_func() 250 vezes */

• Qual dos dois trechos gera menos código, e éexecutado mais rápido? E porque?

Page 47: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 47

Dicas de otimização em C

• Dois modos diferentes de executar loops:• for(i=0;i<250;i++) do_func(); /* executa do_func() 250

vezes, em 3.25 ms */

• 1617 01B8 clrf 0x381618 260F call 0x60F1619 0AB8 incf 0x38161A 3008 movlw 0xFA161B 0238 subwf 0x38,W161C 1C03 btfss 0x3,0x0161D 2E18 goto 0x618

• for(i=250;i!=0;i--) do_func(); /* executa do_func() 250 vezes , em 2.5 ms*/

• 1621 3008 movlw 0xFA 1622 00B8 movwf 0x38 1623 260F call 0x60F 1624 0BB8 decfsz 0x381625 2E23 goto 0x623

• Certa a resposta!!

Page 48: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 48

Dicas Gerais de otimização em C

• Loops de timeout• Para loops longos (>256 repetições):• unsigned int timeout;

#define hibyte(x) ((unsigned char)(x>>8)) #define lobyte(x) ((unsigned char)(x&0xff))

• //modo mais lento e “gordo”

• for(timeout=20000;timeout!=0;timeout--) do_func(); //320011 ciclos |

• //modo mais “enxuto”

• timeout=(20000/0x100)*0x100; /* mantém lobyte(timeout)==0, mais rápido de atribuir valor */for(;hibyte(timeout)!=0;timeout--) do_func(); //295704 ciclos

• Conclusão:• Teste apenas o Byte mais significativo de um loop

com contador de 16 bits

Page 49: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 49

Dicas Gerais de otimização em C

• Loops de timeout• Mas sempre que possível, usar os timers do pic para

timeout:

• //set up tmr0 to set flag T0IF high when it rolls over

• while(RA0==0 && !T0IF); //wait until port goes high

• Rápido, enxuto e preciso!!

Page 50: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 50

Dicas Gerais de otimização em C

• Switch-Case://lento e ineficientec=getch();switch(c){

case 'A':{

do_something();break;

} case 'H':{

do_something();break;

}case 'Z':{

do_something();break;

}}

//rápido e eficientec=getch();switch(c){

case 0:{

do something();break;

} case 1:{

do something();break;

}case 2:{

do something();break;

}}

Page 51: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 51

Dicas Gerais de otimização em C• Multiplicação em C:• No Hi-Tech, qualquer divisão matemática usa de 13 a 23 bytes do banco

0, além de bom trecho de código

Occorrência Uso de RAM/ Uso de ROM / flash

Correção

Qualquer multiplicação matemática usando variáveis ‘long’, mesmo que nem todas estejam no banco 0.

23 bytes no banco zero 0large, tem que incluir rotinas ldiv

Usar combinação de bit shifts, ex: x=x*6 substituido por x1=x;x2=x;

x=x1<<2 + x2<<1

Qualquer multiplicação matemática usando variáveis unsigned int’, mesmo que nem todas estejam no banco 0.

13 bytes no banco 0, tem que incluir rotinas ldiv

Usar combinação de bit shifts

Qualquer divisão envolvendo potências de 2, ex: x=x/64;

Pouco uso de recursos

Usar combinação de bit shifts

Qualquer divisão envolvendo divisores que não são potência de 2, ex: x=x/65;

Alto uso de recursos Procurar fazer com que o divisor seja potência de 2, ex: 2^5=32.

Page 52: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 52

Referências

� AN512 - Implementing Ohmmeter/Temperature Sensor

� AN611 - Resistance and Capacitance Meter Using a PIC16C622

� AN683 - A Comparator Based Slope ADC� AN700 – Make a Delta-Sigma Converter

Using a Microcontroller's Analog Comparator Module

� Tips and Tricks Booklet� LCD PICmicro MCU Tips 'n Tricks

Page 53: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 53

BREAKDúvidas?

Page 54: Dicas & Truques de otimização de Pinos e Software com MCUs Microchip

© 2009 Microchip Technology Incorporated. All Rights Reserved. Slide 54

A Equipe Microchip Brasil agradece a sua presença!