Estou com um problema e não estou sabendo como resolver.
Acredito que estou fazendo algo nas configurações do ADC.
Durante as leituras acontece de alguma delas vir zerada. (result=0).
Minha rotina de leitura do ADC esta assim:
- Código: Selecionar todos
unsigned int result;
// Lendo a Potencia Direta
ADCON0 = ADC_1;
Delay10TCYx(ADC_DELAY1);
ADCON0 = ADC_1 | 0x03;
Delay10TCYx(ADC_DELAY2); // Delay para estabilização da leitura
while( BusyADC() ); // Wait for completion
Delay10TCYx(ADC_DELAY3);
result = ReadADC(); // Read result
Sendo que
- Código: Selecionar todos
ADC_DELAY1 = ADC_DELAY2 = 100
ADC_DELAY3 = 50
Rotina de configuração:
- Código: Selecionar todos
// Configura ADC
WDTCON = 0x00; // Default SFR
ADCON0 = 0x00; // Ref- = 0, Ref+ = VCC
ADCON1 = 0b10111110; // Right, 20TAD, Fosc/64
WDTCON = 0x10; // Alternate SFR
ANCON0 = 0b10000000; // AN0~AN4 Analogico (1-Digital | 0-Analogico)
ANCON1 = 0b11100000; // AN10~AN12 Analogico (1-Digital | 0-Analogico)
WDTCON = 0x00; // Default SFR
Já tentei aumentar os delays, mas não tive melhora.
Acontece bem de vez em quando, mas no meu sistema não posso admitir essa falha.
O sinal é proveniente de um amplificador operacional e ele fornece um sinal DC limpo. Quando não ocorre o erro a leitura é bem estabilizada.
As configurações estão feitas exatemente como o datasheet exige.
O PIC em questão é o PIC18F87J50.
Agraceço se alguém tiver alguma sujestão.
Obrigado,
Mazzer