Well, now I bought a board from this Netherlands guy. There is a picture of the setup in 01. It seems here are not many people interested in the ADC accuracy. But anyway here are my results.
I used a 10 nF capacitor on the input in combination with a 1.2 V battery as a guaranteed noise free source. I used a voltage devider of two 325 Ohm resistors for the tests with the 1 V internal reference. In order to quantify the noise of the ADC, I calculated the standard deviation of 1000 samples.
First measurements using the Arduino functions showed a standard deviation of approx. 1.8, independent if the internal 1 V reference or default reference is used.
Because of the fact, that the ADC capacitor is charged to VDDANA, special care has to be taken to keep VDDANA constant. So I added an additional ceramic capacitor and an electrolyte 47 µF capacitor between 3.3 V supply and GND according to the datasheet. Refer to 02. This dropped the standard deviation from 1.8 to 1.7.
Next step was to add an additional electrolyte capacitor between VDDANA and GNDANA on the backside of the board. (Picture 03) But this didn’t bring further improvements of the standard deviation.
Now I looked for the required charging time of the ADC capacitor. I speeded up the ADC clock to 1.5 MHz (ADC->CTRLB.bit.PRESCALER =3) and made a variation of ADC->SAMPCTRL.bit.SAMPLEN. In order to be sure that the ADC capacitor is not pre-charged from the last measurement, ground was measured in between. Refer to picture 04 and 05 for the results. So if a low impedance source is used, ADC->SAMPCTRL.bit.SAMPLEN = 2 seems to be sufficient to charge the ADC capacitor. Also the standard deviation keeps stable for bigger values than 1 and is only a little bit higher at ADC->SAMPCTRL.bit.SAMPLEN = 0.
According to the datasheet, the signal to noise ratio is 5.5 dB higher if differential mode is used. I also found this in the results and continued with an investigation of the standard deviation with different ADC clock speeds and gain settings.
ADC->SAMPCTRL.bit.SAMPLEN = 0x02;
ADC->CTRLB.bit.DIFFMODE = 0x1;
1 V internal voltage reference
Both, the positive and negative input were tied to analog ground. Out came the result in 06. So the noise level reaches lowest values with the highest ADC clock speed. Bigger gain settings are probably only useful if the 8 bit mode is used.
The next step was to implement an external voltage reference. I used a REF3130 with 3 V output. The 3 V output is divided with two 1K resistors to 1.5 V. The 1.5 V are fed to pin 3 and 4 of the SAMD21G. (Picture 07). A 1µF ceramic capacitor is added on the backside at the entrance of the board to analog ground. Pin 3 is used as negative reference. So a voltage range from 0 to 3 V can be measured on the analog pins. For the further test, the analog pin (I used pin 8) was tied to 1.5 V also. The result is plotted in picture 08. Significant improvements are visible compared to picture 6. The standard deviation without gain drops down to 0.6 and no significant noise dependency of the clock speed is visible. An example of 1000 samples plotted, using gain=0 is shown picture 09. Mainly the last bit is toggling only.
For data acquisition purposes, probably the Arduino Due is better. According to the datasheet, the signal to noise ratio as well as the acquisition speed are significantly higher. But I like small boards like the one from avandalen.