AnsweredAssumed Answered

Aduc7061 - Reading high impedance source into ADC1

Question asked by visualfor on Jan 6, 2011
Latest reply on Jan 19, 2011 by visualfor

This is regarding auxilary ADC (ADC1).  I am measuring single ended values in unipolar against ADC5 (which is connected to GND).

 

I had no problem reading a voltage with low impedance on ADC4/ADC5, but having difficulty reading ADC6/ADC5.  The only difference is that ADC4 is low impedance, while ADC6 source impedance is around 6K

 

ADC4 works:

=====================================================================

  ADCMSKI = 0;            // interrupts (ADC0RDY, ADC1RDY, -, ADC0OVR, ADC0CM_THRESH,-, ADC0ACC_THRESH)

  ADCFLT = 0x4F;           // Chop off, 100hz samping rate. No averaging.  also resets both ADCs

  ADCMDE = BIT7 + BIT1;           // [7]=512Khz, [4:3]=normal pwr, [2:0]=2 (single conversion)

  ADC1CON =   BIT15 +             // enable ADC1

                   BIT11 +                       // [11]=> ADC1CODE. ADC output coding. 1=unipolar,

                   BIT9+BIT8;               // [10:7]=> [0110] = ADC4/ADC5 (single-ended mode).  Low source impedance


  while ((ADCSTA & BIT1) != BIT1);   // bit 1 is ready bit for ADC1

  Vtemp = ADC0DAT;               // fake read to clear ADC1RDY

  Vtemp = ADC1DAT;

  Vtemp = Vtemp/65535 * 1.2;    // convert to voltage (internal ref = 1.2V)

 

 

But ADC6 does not:

=====================================================================

   ADCMSKI = 0;            // interrupts (ADC0RDY, ADC1RDY, -, ADC0OVR, ADC0CM_THRESH,-, ADC0ACC_THRESH)

  ADCFLT = 0x4F;               // Chop off, 100hz samping rate. No averaging.  also resets both ADCs

  ADCMDE = BIT7 + BIT1;           // [7]=512Khz, [4:3]=normal pwr, [2:0]=2 (single conversion)

  ADC1CON =   BIT15 +             // enable ADC1

                   BIT11 +             // [11]=> ADC1CODE. ADC output coding. 1=unipolar,

                   BIT9+BIT8+BIT7;          // [10:7]=> [0111] = ADC6/ADC5 (single-ended mode).  6K source impedance


  while ((ADCSTA & BIT1) != BIT1);   // bit 1 is ready bit for ADC1

  Vtemp = ADC0DAT;               // fake read to clear ADC1RDY

  Vtemp = ADC1DAT;

  Vtemp = Vtemp/65535 * 1.2;    // convert to voltage (internal ref = 1.2V)

I experience the following problems:

-- ADC4 affects ADC6 readings, even with 100ms delay in-between them

-- first reading is entirely diffrent than subsequent readings

-- readings are all over with 50% variations.  My source is very clean on oscilliscope

 

What do I have to do to measure a high impedance source?  I tried sampling down to 50Hz, chop on, averaging, delay between two reads.. but nothing works

Outcomes