peguei isso do forum
lellis escreveu
http://asm51.eng.br/phpBB/viewtopic.php ... rup%E7%E3o
o que sai da função readadc()? experimente pegar DIRETO o resultado dos registradores:
result=ADRESH*256+ADRESL;
um ex pra pegar média de 10 leituras
Código:
unsigned int adc_read(unsigned char ref)
{
unsigned char i;
unsigned int ad;
ad=0;
for (i=0;i<10;i++)
{
ADCON0 = ref; // ref=VREF ou VDD, enable ADC, fosc/64
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");// alguns nops resolvem.
A única coisa útil do assembler é o "nop". rs
GODONE=1;
while(GODONE) continue; // wait for conversion complete
ad+=(ADRESH*256 + ADRESL);
}
return ad/10;
}
substitua ref por "0x81| (canal a ser medido)<<2" pro caso de ser 16f676.
verifique o dataxit de seu uC como escolher os canais. Aliás prefira lê-lo ao
invés de usar rotinas prontas e mastigadas. Verifique se alguma interrupt está a
atrapalhar o resultado.
abç
_________________
ninguém é tão tolo que não tem nada a ensinar e nem tão sábio que não tem a aprender.
É mais fácil mudar o mundo pra melhor se você tomar posse do Código Fonte.
lellis me esplica isso
GODONE=1;
while(GODONE) continue; // wait for conversion complete
ad+=(ADRESH*256 + ADRESL); de onde saiu o 256 ?