I present the results of an investigation into the accuracy of the ATmega328 ADC. I used several circuits in conjunction with the ATmega328; their schematics are shown in the report: - preamplifiers with standard 1MOhm||33pF input impedance - interface circuit for serial and USB port, with option for electrical insulation. - ATmega328 driving a DAC MAX503. Results for the following tests are included: - sinewave test with external source (soundcard), - sinewave test with DAC - ramp with DAC Measured results obtained on solderless breadboards: - ENOB 9.4 - Integral Nonlinearity 0.06% - Differential Nonlinearity (RMS) 5.6%. Source code in C and Arduino sketches are included. The files are located with the LXARDOSCOPE project, available from Sourceforge.
I often record data at very high speed. To do this I run the ADC clock above the recommended speed so accuracy is reduced.
It would be interesting to see how your result for ENOB compares with this test at various ADC clock speeds.
Increasing the clock speed is an obvious extension of my project, and I am definitely interested in higher sampling rates for LXARDOSCOPE. I had a look at your website and ordered am Audio Codec Shield. At first glance, it is not obvious to me which parts of the test are executed on the ATmega device and which parts with the shield. My approach is to transfer the samples to the PC in realtime; this may very well be the limitation for higher sampling rates. When the time comes for digging deeper, we should take the discussion elsewhere.
I didn’t do the Open Music Labs work, I just used it to estimate the accuracy of a fast data logger.
I wrote a program that logs 100 ksps to an SD http://arduino.cc/forum/index.php/topic,113879.0.html.
I plan to post the logger soon, after completing work on another Arduino library for fast digital I/O and general software SPI.