Vou tentar explicar uma dica muito valiosa para quem costuma utilizar conversores AD do pic.
O conceito esta em colher o dado AD constantemente, porém apenas fazemos a leitura das grandezas AD, e através de um "filtro" que faz a comparação, decidiremos se essa conversão deva ou não acionar sua rotina de "atitude". Esse detalhe faz toda a diferença, caso você precise de SUPER estabilidade 100% e também necessite que apenas seja disparada sua função referente a essa entrada AD, pois caso a entrada AD não seja alterada (ou seja o POT não seja mexido mecânicamente falando), isso garante que você apenas perca tempo, na CONVERSÃO em SI...Por exemplo, a sua rotina poderá LER por exemplo 40 potenciômetros, gastando para isso apenas o TIME necessário para a DESCARGA do CAP interno do AD, "vide tempos de conversão no datasheet, salvo engano rodando um pic18 a 10mpis, deva ser de uns 2us por conversão.
Eu utilizo muito conversão AD e utilizo essa técnica que tenho desenvolvido e custo muitas horas de oração e paciência. Vou tentar explicar o fundamento.
Inicialmente é feita a configuração da resolução do AD, eu normalmente utilizo a resolução de 8 bits, essa resolução vai me dar 64 STEPS de resolução final, após passar pelo meu "algoritmo de filtragem", caso você precise de 8 bits de resolução final, então vai configurar o ADC para 10 bits. feita a leitura do AD (devidamente configurado para a frequencia do clock do MCU, atente para isso), em seguida devemos criar uma TABELA de conversão/adequação de valores é aí que esta a jogada para estabilizar 100%.
Temos uma rotina que irá pegar a conversão do ADC em resolução (8bits) esse resultado servirá como um ponteiro indexador que irá apontar para um tabela com valores pré definidos (aqueles que você quer que sejam enviados a sua rotina agregada), sendo que para 4 leitura do AD você PEGA um número na tabela que será utilizado pela sua rotina agregada. Sendo que os outros 3 bytes será alocados com 0xFF, após essa indexação inicial, teremos uma rotina que irá efetuar a comparação de DIFERENTE D e IGUAL D, onde D é o resultado da leitura da tabela, caso seja 0xFF, a rotina desconsidera e segue para a próxima leitura ou sai do algoritmo, caso seja diferente de 0xFF, a rotina verifica se D é DIFERENTE da variável de BKP (BKP é uma variável que manter o BKP de D para comparação).
No meu caso costumo sempre utilizar 64 steps...portanto uso apenas 8bits no ADC.
Como eu mencionei, estou utilizando o fator de divisão na tabela por 4, assim o valor final do ADC será dividido por 4, mas podemos também aumentar essa resolução final utilizando a divisão por 2, assim com uma resolução ADC de 8 bits, originará uma resolução final de 128 STEPs...
Espero ter contribuído, pois quando alguém desejar utilizar muitas entradas ADC através de multiplex do tipo 4051, vai se deparar com o problema de estabilidade.
Utilizando essa técnica descrita acima, o uso de um CAP, indifere se estará perto do AD ou do cursor do POT, pois o software garante que a estabilidade será 100%.
