I decided To post the DAC/ADC test data. The DAC is a MCP4921 with 5 V ref. http://ww1.microchip.com/downloads/en/DeviceDoc/22248a.pdf.
I got the noise really clean now as you will see in the attached file. Only about one reading varied in the set of 64 that I took at each DAC value.
Here is the sketch that generated the data
#include <McpDac.h>
void setup() {
Serial.begin(9600);
mcpDacInit();
for (uint16_t i = 2000; i < 2024; i++) {
mcpDacSend(i);
for (uint16_t j = 0; j < 64; j++) {
Serial.print(i);
Serial.write(',');
Serial.print(j);
Serial.write(',');
Serial.println(analogRead(0));
}
delay(500);
}
}
void loop() {}
The sketch loads values from 2000 through 2023 into the DAC. It then does 64 reads with analogRead() for that DAC value.
There are three columns: DAC value, reading #, ADC value.
The Arduino I used has a large offset error so it reads about 3 counts low. This is not uncommon for an AVR ADC. Be sure to calibrate your Arduino http://www.atmel.com/images/doc2559.pdf.
2001 on the DAC should be 500 on the ADC (2001*1023/4095 = 499.9). The ADC reads 497.
You must be logged in to see the attached file.
Edit: I have now attached files taken with three Arduinos. Arduino two and three have the fluctuation property since the DAC/ADC values lineup just right.
This does not mean there is more noise with Arduino two and three. If you don't understand, read the app notes, you claim to be an engineer so this should be easy.
dac_adc1.csv (19.3 KB)
dac_adc2.csv (19.3 KB)
dac_adc3.csv (19.3 KB)