Pessoal , agora demorei bastante para responder , pois estava esperando o meu scope chegar para realizar os testes ....bom , testes realizados com o scope para verificar ruidos ; tinha um ruido em um canal que eu resolvi , mas ai que tá , mesmo assim o problema continuava ... a falta de linearidade .... se vcs perceberem nas tabelas o negócio eh exponencial ... ... bom , então eu decobri a pegadinha , mas confesso que não entendi ... quebrem a cabeça agora ... se quiserem né ... hehe ... eh o seguinte :
reparem então de novo no programa :
t=16;
while(t)
{
set_adc_channel(0);
delay_us(40);
tensao=read_adc();
set_adc_channel(1);
delay_us(40);
corrente=read_adc();
tensao_total=tensao_total+tensao;
corrente_total=corrente_total+corrente;
t--; }
tensao_total=tensao_total/16;
corrente_total=corrente_total/16; }
então fiz o seguinte ... tirei o read_adc , e coloquei valores fixos para a variavel tensão ... então coloquei
tensão =200;
o resultado logicamente teria que ser 200 depois das 16 iterações , mas não , era 202 , e pra piorar , quando eu colocava um valor mais alto , tipo tensão = 900; o valor depois das iterações era tipo 915 ... pronto , tava ai o problema , e também a variação exponencial ... ... só resolvi quando coloquei mais uma variavel lá embaixo , quando efetuava a divisão para obter a média ... então isso não funcionava :
tensao_total=tensao_total/16; ... isso dá o problema
já assim fica perfeito e linear :
nova_variavel=tensão_total/16 ...
heheheheh agora pessoal ... qual o problema/erro de lógica tem ai , e mesmo assim , dá uma variação exponencial pq ??? agora só vcs mesmo que são mais experto que eu .. hehehe
abs.
geraldo