Ir ao conteúdo
  • Cadastre-se
Ítalo Rodrigues

Tempo que demora uma função/leitura em um Microcontrolador PIC

Recommended Posts

Boa noite, estou encucado com isso, mas gostaria de saber como calcular/saber o tempo que demora uma função em um microcontrolador PIC para ser executada. Tipo, estou querendo saber quanto tempo o PIC leva para fazer duas leituras de um protocolo de comunicação, usando umas funções que criei. Pensei em usar o timer0 para tentar calcular pela função "get_timer0()" mas não obtive sucesso. :P

 

Bom, utilizo o compilador CCS e o microntrolador PIC18F4520.

Se puderem mandar algum algoritmo, formula ou código mesmo, agradeço desde já!! Obg.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai depender do cristal usado e das instruções utilizadas, em assembly, depois de compilado o programa. Consultando o datasheet, soma-se os tempos de todas as instruções que serão executadas nela.

Outra opção é:

Assim que entrar na função, disparar um timer e ao sair, parar o mesmo, mas aí teria de apresentar o tempo contado em algum display ou mandar o valor do tempo pela serial para ser lido por um PC.

No caso tem que descontar o tempo da instrução de disparo do timer e a de parada do mesmo.

Tem também a seguinte questão:

Tem certas instruções que o numero de ciclos variam caso uma condição seja verdadeira ou falsa.

Não sei se fui claro.

Veja no exemplo abaixo (a partir da página 270 do datasheet)

post-387879-0-04386500-1417840742_thumb.

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma opção não muito ortodoxa é usar osliloscópio. Tipo faça:

funcao(){RB0=1;RB0=0; //ou só RB0=1;//faz o que tem que fazerRB0=1;RB0=0;//ou só RB0=0;}

e meça o tempo entre pulsos

 

Outra: caso não tenha osciloscópio mas tenha um debugger qualquer, pode analisar com o próprio mplab usando a opção view- simulator logic analyser e escolhendo o canal RB0. clique em cursor pra facilitar. O intervalo é medido em ciclos (apesar que o help dele diz que pode medir em segundos) mas como cada ciclo ocupa 4 pulsos do cristal é fácil fazer as contas

E mais outra: Também pode colocar um breakpoint no início e no fim da função

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não se esqueça que utilizando o CCS,no seu caso,vai ter que usar FASTIO,caso contrario o CCS vai gerar um TRIS a cada saida/leitura do PORT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é xykoTE, utilizo um cristal de 20MHz e tenho acesso a comunicação Serial via radio-PC, contudo programo em C pelo software CCS, e Isadora Ferraz, gostaria de uma coisa mais prática, mais por via linha de código, tipo usando o timer0 do própio PIC. Pois esse tempo que desejo calcular é porque faço a comunicação com um sensor pelo barramento I2C e gostaria de saber o tempo que levou para obter a cada duas leituras;

Tentei usando set_timer0 e coletando dps de um tempo pelo get_timer0, mas não obtive sucesso. Acredito está fazendo errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×