I would like to detect signals in nanosecond scale. For that, an ADC with at least 500 MSPS is required.

My question is if its possible to use an external ADC with 500 MSPS with a 16MHz Arduino Mega? If not, is there any additional hardware like FIFO buffer to overcome this problem?

Please help, thanks!

  • Not sure what it is you want to achieve, but you might be able the use the comparator inside the ATMega328. E.g. to detect when a voltage goes above a certain threshold. PS 16mHz will mean one clock-cycle every 62.5ns, so you're already in the tens of nanoseconds scale.
    – Gerben
    Aug 16, 2015 at 14:19
  • Why do you want to do this? Even if you could do 500 million samples per second, where would they go? You only have 2048 bytes of RAM on a Uno.
    – Nick Gammon
    Aug 16, 2015 at 21:48

2 Answers 2


From the Arduino reference on AnalogRead: "It takes about 100 microseconds (0.0001 s) to read an analog input, so the maximum reading rate is about 10,000 times a second."

500msps is an awfully high rate - my first instinct is, perhaps you need to revisit what you are after, and why.

There are indeed chips that will do this for you. It is still not possible with an Arduino, since the Arduino can't even receive the data this fast, let alone process it. Assuming 8-bit sampling, this would generate a stream of data at 4gigabits/second - I doubt any disk drive could write that fast (SATA3 is 4.8gbit/sec, which is 20% more, I suspect that the 20% would be eaten up by overhead - you can't just send raw data to a drive, you also have to tell it where to put it. That just accounts for getting the data to the drive circuitry, not actually storing it).

Perhaps what you're looking for is an oscilloscope. An oscilloscope takes high speed readings and displays them. Oscilloscopes are often used for testing circuits (e.g. looking at what an Arduino puts out/reads in when it's being programmed). Looking on National Instruments' websites, their cheapest one I could find that does > 500msps is worth about US$8,000 (ballpark). You will still not be able to store this to disk, or process it in any meaningful way, in realtime - a board like this will typically capture data (based on a trigger, sample until the memory is full, then slowly move the data to the PC to process.

  • 1
    I need to measure the round trip time of certain EM wave that travels in speed of light. But I have replaced the Arduino, and is using a high speed oscilloscope (with 5GS/s) for my application. Anyway, thank you for the suggestion! Sep 12, 2015 at 3:01

No, it's certainly not possible to directly sample at 500Msps on an Arduino using an external ADC. Simple maths:

  • The Arduino can perform 16 million instructions (best case) per second
  • The ADC performs 500 million samples per second.
  • 500 / 16 = 31.25

Therefore the ADC would be generating 31.25 samples for every clock of the Arduino, so unless you can build in a time compressor (maybe with a flux capacitor too), it just ain't gonna do it.

So you will have to think creatively instead. A possible solution would involve:

  • A high speed flash or pipelined ADC, ideally with parallel output.
  • A large chunk of memory to act as a buffer.
  • A high speed clock source to set the timing (500MHz?).
  • Glue logic and counters to take one sample, store it in the buffer, and increment the buffer address.
  • More glue logic and interfacing to allow the Arduino access to the buffer memory and to control the operation of the sampling system.

This, to me, sounds like a job for an FPGA, and at 500MHz, quite a fast FPGA. You should investigate some of the FPGA development boards from Xilinx and Altera.

  • 1
    Sorry for the late reply, but I realized that Arduino is not suitable for my application. I need to measure the round trip time of certain EM wave that travels in speed of light. So I have already replaced the Arduino, and is using a high speed oscilloscope (with 5GS/s) for my application. Thank you for the suggestion! Sep 12, 2015 at 3:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.