high speed adc dac project

Hi Arduino Forum

I wanted to ask for design guidance on a project that I have planned. The project is that I want to setup an Arduino to play out data via a 1 Meg sample/second DAC. to the outside world. Also, I need to be able to capture the data response of the DUT via an ADC at the same 1M/sec rate. The data for sending out to the DAC and the response of the ADC are both to be stored in some kind of fast RAM.

My plan is to make the data for both DAC and ADC available via Serial CDC interface to the host unless there is an easy way to cause the Arduino to appear as a mass storage device in Linux.

My questions about this is how do I achieve this with the least amount of complex hardware design. Can I get 1M/second sample rate converters from any of the arduino boards? If so, at what bit resolution? If not, what is the max sample rate I could get with a stock Arduino board? Is it feasable to interface a DRAM or SRAM to the Arduino via the GPIO lines and get the throughput I need to store the masses of data needed?

Any help or insight into this design would be greatly appreciated.



1M/sec rate.

Bits? bytes? chip butties?

Why throw in an Adruino? Was it just so that you could ask the question here?

Try being honest - start with a description of what you are trying to create. Then we can all share in the glory and profit.


You'll need a very powerful controller, and a parallel DAC for 1M samples/s. Also sufficient RAM (and DMA?) for the data. IMO a DSP will be a better choice.

You can start with a cheap serial DAC, to make your project work at a moderate sample rate, with a few samples. Then you know the upscale factor for all critical components, in order to reach your ambitious goal.

I suppose I could ask what resolution you require, but in this forum's context it's irrelevant.

Or how much data you need to buffer.... ditto.

I've done such stuff with 25MHz sampling of old-fashioned PAL television signals. Not trivial.

This a specialist hardware development job.

Probably a small fast FPGA would be the best way to do the logic.

The only processor in the system would be to load up the FPGA .

No arduino is in the ballpark. Maybe 'just' a due - but I wouldn't bother.


After thinking about it, I think the most simple way to do this is to connect the RAM and converters directly to an FPGA and then use the Arduino to tell the FPGA when I want to do a capture, playing out the data from the DAC and capturing the response via the ADC. The FPGA would do real time routing of the high sample rate data directly to the RAM. The Arduino brings USB connectivity and easy programming environment. I can use USB CDC out of the box for Leonardo when reading out the RAM at low rate later when I want to transfer the captured data to host from the Arduino. Unless anyone has any other ideas of how this could be achieved, I may go with this. There is probably no way to get around having to do a board layout with high speed converters to achieve what I am after.

As Bartles and Jaymes says, "thank you for YOUR support" (and smart alec responses, you know who you are).

As a suspected smart Alec...

If you can manage the fast ADC/DAC/RAM/FPGA part, you probably don't need help here.


actually, not quite. Did you know there is a shield already created for the arduino that has an FPGA and SDRAM?


The evolution of the idea is this: use eval boards for the high speed ADC and DAC converters and order an already created FPGA shield and I've got a system up and running much quicker and with much less debug (in theory, right?)

Looks like the Arduino system may be a great platform for exploring high speed data capture, after all. Put that in your back pocket the next time someone asks about it.

A few thoughts about your project if you consider using an Arduino DUE:

1/ ADC controller

From Sam3x datasheet:

43.2 Embedded Characteristics  12-bit Resolution  1 MHz Conversion Rate In ADC freerun mode plus a PDC DMA transfer, you get this conversion rate.

2/ DAC controller

One conversion takes 25 clock cycles, therefore the best conversion rate you can expect with the 2 built in DACs is: DACC clock/25 with DACC clock = Mck/2= 84 MHz/2  DACC max frequency = 1.68 MHz

A solution would be to use a faster external DAC connected via SPI and use TurboSpi library for Sam3x. This library leverages the AHB DMA feature and gives you a maximum of 42 MHz transfer rate.

3/ RAM size

The DUE has a mere 96Kbytes contiguous SRAM plus 4Kbytes noncontiguous SRAM.

For RAM expansion, you might want to see this thread: http://forum.arduino.cc/index.php?topic=152644.0

You can download a buffer on your PC via the native USB port and SerialUSB.write, much faster than with a Serial.write via the programming port.

Note that the USB OTG High Speed (480 mbps) embeds a dedicated DMA capable of handling the FIFO I/O request automatically without using the CPU. Although AFAICT a public library using isochronous or bulk transfers and the dedicated USB OTG DMA remains to be written…and the PC side should be capable to read a buffer to this speed.

excellent. Thanks for the tip on the Due version... I'll check it out.