Arduino Due SAM3X8E DAC Sine Frequency

The only Arduino at this time with a hardware DAC is the Arduino Due, based on the Atmel SAM3X8E, which has two 12-bit DAC channels. The main clock is 84 MHz and

The DAC output range is 1/6 to 5/6 of the AREF pin, which on the Due board tied to the 3.3VDC line through a resister, that must be removed to use AREF with an external reference. The range of values producible on the standard Arduino Due are [0.55, 2.75] VDC.

The SAM3X datasheet has the following to say about the DAC conversion time, which seems to suggest 50 cc of the main clock per conversion, which would place a maximum conversion frequency of 1.68 MHz.

45.6.1 Digital-to-Analog Conversion
The DACC uses the master clock (MCK) divided by two to perform conversions. This clock is
named DACC Clock. Once a conversion starts the DACC takes 25 clock periods to provide the
analog result on the selected analog output.


45.6.3 Conversion Triggers
In free running mode, conversion starts as so
on as at least one channel is enabled and data is
written in the DACC Conversion Data Register, 
then 25 DACC Clock periods later, the converted
data is available at the corresponding analog output as stated above.

In external trigger mode, the conversion waits for a rising edge on the selected trigger to begin.

Disabling the external trigger mode automatically sets the DACC in free running

There is a “max speed mode” that would save off 10% of the time.

45.6.7 DACC Timings

A max speed mode is available by setting the MAXS bit to 1 in the DACC_MR register. Using
this mode, the DAC Controller no longer waits to sample the end of cycle signal coming from the
DACC block to start the next conversion and uses an internal counter instead. This mode gains
2 DACC Clock periods between each consecutive conversion.

Using this mode, the EOC interrupt of the DACC_IER register should not be used as it
is 2 DACC Clock periods late.