Página 1 de 1

Qual o tempo mínimo para uma conversão AD no 18F452?

MensagemEnviado: 15 Nov 2007 20:52
por Fabio_Jerena
Bom galera, meu problema é o seguinte:

Preciso fazer o máximo de conversões AD´s no PIC em questão e estou meio perdido com as informações que tenho
Em mão tenho dois livros, o "Programação em C" do Fábio e "Conectando o PIC" do David, notei que as informações divergem um pouco...
Eu não sei a impedância dos sensores que vão ligados às portas, mas devem ser menor que 10Kohms já que o sensor é especificado para trabalhar com uC (sensor de pressão), eu queria saber quanto tempo leva aprox. para realizar uma conversão, no livro do Fábio ele fala que é o caso mais critico (10K) leva 19,72us e ele lê o sinal assim:

valor = read_adc(); e configurou o setup_ADC(ADC_CLOCK_INTERNAL );

Eu posso usar essa configuração usando o clock do PIC = 40Mhz?

Tenho uma apostila da MOSAICO e eles recomendavam usar assim:

set_adc_channel (1);
delay_ms(10); (é mesmo necessário?????)
valor = read_adc();

Eu preciso fazer as conversôes o mais rápido possível, como devo proceder?

Muito obrigado!!!

MensagemEnviado: 16 Nov 2007 07:44
por buiz
Sim,

set_adc_channel (1); // seta o canal 1 do microprocessador
delay_us(100); (é mesmo necessário?????) // tempo necessario para estabilizar o canal
valor = read_adc(); // efetua a leitura do canal


Mais necessario quando for ler dois canais.

tipo:


set_adc_channel (0); // seta o canal 0 do microprocessador
delay_us(100); (é mesmo necessário?????) // tempo necessario para estabilizar o canal
valor1 = read_adc(); // efetua a leitura do canal

set_adc_channel (1); // seta o canal 1 do microprocessador
delay_us(100); (é mesmo necessário?????) // tempo necessario para estabilizar o canal
valor2 = read_adc(); // efetua a leitura do canal

MensagemEnviado: 16 Nov 2007 08:18
por ze
de acordo com data sheet: 12,86uS.
um detalhe interessante: O Mplab dá um warning se durante a compilação identificar um tempo menor. Ou seja se houver algum erro de setup de ADCS2:ADCS0 x frequencia de clock.

MensagemEnviado: 16 Nov 2007 11:40
por LeandroPIC
De uma olhada no datasheet e configure os registradores diretamente eo melhor a faser, quanto a inpedancia use um amplificador operacional com guanho unitário se a inpedancia for muito alta, e um filtro passa baixas, e tire a media da conversão.

Ai vai funcionar beleza!!

MensagemEnviado: 16 Nov 2007 16:06
por Fabio_Jerena
Legal pessoal, agradeço os toques...
Na verdade eu estou usando 6 entradas analógicas do PIC e preciso ler todas o mais rápido possível para utilizar os dados para calculos e uma ação em tempo real...
Fiquei tão preocupado com essa história de tempo que dividi os sensores em dois grupos e faço a leitura por grupos para não ficar muito tempo parado nesta tarefa (criei um relógio interno usando um timer e com ele trabalho em quanto em quanto tempo vou fazer uma leitura de determinado grupo de sensores), alguem conhece umas técnicas mirabolantes para se fazer esse trabalho, ler vários sensores utilizando o menor tempo possível para isso?
Muito obrigado!!!

MensagemEnviado: 20 Nov 2007 12:11
por LeandroPIC
Use a int do AD

Funciona assim, vc manda o pic fazer a conversão do canal 0 quando ela terminar gera uma int, dentro da int vc salva o valor convertido. e muda para o canal 1 e assim vai, vc trata os valores das conversões no loop principal. Assim vc vai ter a maior velocidade possivel no PIC, a idéia de usar a int é porque enquantro o pic faz a conversão vc executa outras operações, tipo enquando le a canal 1 vc trata os dados do canal 0.

entendeu...!!!!!!