Página 1 de 1

amostras e conversao AD com float

MensagemEnviado: 14 Jan 2011 08:43
por cristian
Código: Selecionar todos
bufAd[indAD]=ADC_Read(0);// ler AD e guarda no buffer
if((++indAD)>100)indAD=0;// incrementa o indice do ad
aux2=0;//zera a variavel
for(x=0;x<100;x++)
{
aux2=bufAd[x]+aux2; // soma os valores lido do AD e soma com AUX
}
aux2=aux2/100; // divide pelo numero de amostras


   delay_ms(100);// delay entre cada leitura ... vai ser usado o timer

  aux2=aux2*100; // multiplica por 100 pra nao dar 2,5699e-1 e sim 2,56v no caso de 256mv

      valorfloat=aux2*0.00488;// converte em tensao o valor lido
      floatToStr(valorfloat, txtFloat);//transforma em string


galera fiz este codigo pra usar o AD nas seguintes funçoes

ler tensao da bateria 12v
ler temperatura com lm35
ler temperatura com NTC

estas funçao vai pegar 100 amostras do ad e é acumulativa tipo assim
depois de pegar a de numero 100 ele nao espera mais 100 amostras pra calcular ele pega o novo valor e vai substituir o primeiro e calcula depois o segundo e por ai vai

quero saber a opniao de vc sobre esta tecnica

e o sensor NTC , nunca trabalhei com ele sera q serve pra ele tb? mas tenho q montar uma tabela ne ?

MensagemEnviado: 14 Jan 2011 10:49
por ze
ntendidireito

MensagemEnviado: 14 Jan 2011 11:00
por cristian
esta rotina , ler 100 vezes o canal AD escolhido do pic ....

ei cada canal vai para

medir tensao da bat 1v

medir temperatura interna com lm35

e medir temp com NTC

mas a questao é : estas rotinas q fiz estao certas é este o caminho?

MensagemEnviado: 14 Jan 2011 12:17
por ze
faz de conta que entendi assim...:
pra pegar a média de 100 amostras é só fazer algo do gênero:

unsigned int admedia()
{
unsigned char i=100;
unsigned int ad=0;
while (i--) ad+=adcread(0);
return ad/100;
}

obs: desde que o resultado do ad não ultrapasse 655. sabe porque? pense. mas o principal é porque tenho dó de usar variáveis de + de 16 bits com pic. Neste caso, eu faria a média de 65 amostras.
abç

MensagemEnviado: 14 Jan 2011 14:19
por cristian
mas ...........

vc quer dizer q a divisao do AD por 100 , vai usar variaveis de + de 16 bits ??

ou pq estou usando float ?.... o float so estou usando
Código: Selecionar todos

valorfloat=aux2*0.00488;// converte em tensao o valor lido



e sobre o principio que estou usando das medias

no lugar de pegar novas 100 leituras eu leio + 1 e tiro a nova media

é melhor assim ?

MensagemEnviado: 14 Jan 2011 15:14
por ze
VOCE pode usar float EU (e talvez o MC) é que não gosto, comprendes. AD/100 vai usar variável que vc especificou. tô achando que a falta de avatar está me impedindo de conectar em voce. aguarde algum coruja que derepente pode te iluminar. ou tente reformular tuas dúvidas.

sucessos