Migsantiag, utilizo los LMC6484 como buffers de corriente y como acondicionadores de señal (desplazador + amplificador).
Te explico los 3 casos que tengo:
- Como seguidor de tensión con alimentación bipolar (+-5V) me funcionan bastante bien. Les meto señales de +-50mV y +-100mV a través de un trimmer. La salida es más que aceptable.
- Como seguidor de tensión con alimentación unipolar(0V-5V) no me han ido nada bien. La salida se va casi 100mV.
- Como desplazador+amplificador. Parece que la salida es correcta pero es donde he tenido el problema con el ADC.
Si te fijas en el datasheet verás que no hay ni un sólo ejemplo real con alimentación bipolar (solamente un seguidor de tensión), así que es dificil saber como va a responder en este caso. Además si te fijas bien verás que el voltaje en las entradas no debe superar los 0.3V más allá de los "railes"; puede que ahí resida el problam de tu sumador, migsantiago.
En cuanto a la config del ADC del PIC32... estoy super perdido. Probé lo que me dijiste: subí al máximo el tiempo de sampleo y bajé al máximo el del de conversión. Funcionó durante un rato pero despues ya no. De hecho me he dado cuenta que tp era problema del LMC6484 porque con los MAX4020 tb ha dejado de funcionarme. Realmente no tengo ni idea de que pasa: siempre he utilizado amplificadores para acondicionar señales antes del ADC y con PIC16, PIC18 y PIC24 siempre me funcionó sin problemas. Ahora el ADC de PIC32 sólo me coge señales directamente de los sensores que utilizo.
Estoy seguro de que el ADC funciona bien. He probado con varios micros diferentes , además empezé en base a la config de la librería gráfica y el touchscreen funciona genial. Dejo el código por si veis algo raro:
float GetSample (int32 adcChannel, int8 muxChannel, float range){
int32 aux;
switch (adcChannel){
case MUX_CELLS_0to15:
break;
case MUX_CELLS_16to30:
break;
case MUX_CELLS_31to44:
break;
case MUX_SENSORS:
if(muxChannel&0b001)
MUX_SENSORS_ADDA = 1;
else
MUX_SENSORS_ADDA = 0;
if(muxChannel&0b010)
MUX_SENSORS_ADDB = 1;
else
MUX_SENSORS_ADDB = 0;
if(muxChannel&0b100)
MUX_SENSORS_ADDC = 1;
else
MUX_SENSORS_ADDC = 0;
break;
case MUX_ENERGY:
break;
}
// Initialize ADC
AD1CON1 = 0x080E0; // Turn on, auto-convert
AD1CON2 = 0; // AVdd, AVss, int every conversion, MUXA only
AD1CON3 = 0x1FFF; // 31 Tad auto-sample, Tad = 256*Tcy
AD1PCFG = 0; // All inputs are analog
AD1CSSL = 0; // No scanned inputs
AD1CHS = adcChannel;
AD1CON1bits.SAMP = 1;
while(!AD1CON1bits.DONE);
return ((((float) ADC1BUF0)/ADC_BITS) * range);
}
Para la config que sugiere migsantiago habría que cambiar AD1CON3 = 0x1FFF; por AD1CON3 = 0x1F00;. La frecuencia de reloj es 64Mhz y la de perifericos 8Mhz así que el mínimo TAD es 125ns que es mayor que el mínimo para el ADC de PIC32 (83ns).
También dejo un ejemplo de los acondicionadores de señal:

Las señales acondicionadas van a un MAX4051 y de ahí a una entrada analógica del PIC32.
Cualquier sugerencia es buena

. Muchas gracias.