Você pode aumentar a resolução efetiva sobredimensionando intencionalmente o sinal de entrada. Aqui está um breve resumo da idéia em uma nota de aplicação sobre o tópico fornecido pela Atmel:
A teoria por trás de 'Oversampling e dizimação' é bastante complexa, mas o uso do método é bastante fácil. A técnica requer uma quantidade maior de amostras. Essas amostras extras podem ser obtidas superamostrando o sinal. Para cada bit adicional de resolução, n, o sinal deve ser super-amostrado quatro vezes. Com qual frequência a amostra do sinal de entrada é dada pela Equação 3-1. Para obter a melhor representação possível de um sinal de entrada analógico, é necessário fazer uma amostragem excessiva do sinal, pois uma quantidade maior de amostras fornecerá uma melhor representação do sinal de entrada, quando a média for calculada.
A nota de inscrição completa pode ser obtida aqui: http://www.atmel.com/images/doc8003.pdf .
No seu caso específico, você precisaria amostrar em cerca de 8KHz para obter o equivalente a 16 bits de resolução do seu ADC de 12 bits.
Aqui está como cheguei a esse número:
f_oversample_rate = f_current_sample_rate * (4 * (desired_bits - current_bits))
f_oversample_rate = 500Hz * (4 * (16 - 12))
f_oversample_rate = 500Hz * (4 * 4)
f_oversample_rate = 500Hz * 16
f_oversample_rate = 8KHz