int timer 1 e AD

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

int timer 1 e AD

Mensagempor rebelk » 29 Mar 2010 17:10

preciso ler o valor do AD a cada 50ms ( interrupção do timer 1 )
, posso ler o valor do AD dentro da int ?
isso pode me gerar algum problema ? existe ou metodo ?
estou programando em C com o ccs o pic ultilizado é o pic18f452.
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor rebelk » 29 Mar 2010 17:21

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 ?
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor ze » 30 Mar 2010 10:58

ad é uma variável tipo int portanto usa 2 bytes. *256 é pra compor o MSB. (o mesmo que (int)ADRESH<<8 (????))
o tempo de leitura do ad é bem inferior a 50mS. portanto não vejo impedimento [crono]lógico mesmo lendo todos os canais. tomara que teu compilador otimize o cod. mas eu preferiria ler um canal a cada passada para haver um "descanso" entre uma leitura e outra. mas depende da aplicação, óbvio.
abç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor rebelk » 03 Abr 2010 12:56

deu certo , valeu !!!!!!!!!!!!!!!!!!!!!!!!!
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor BolhaDigital » 03 Abr 2010 20:23

Acrescentando,


Uma dica muito útil é vc sempre deixar um delay entre uma leitura e outra, esse delay pode ser algo em torno de 30 a 50us, esse recurso é valido para quando vc fizer a leitura de varios potenciometros em sequencia, isso evita que uma leitura interfira na próxima...
BolhaDigital
Bit
 
Mensagens: 47
Registrado em: 07 Mar 2010 12:20


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x