Thursday, June 27, 2013

Arduino Powered 10 Million samples per second Oscilloscope

I have created an Arduino Powered 10 Million samples per second Oscilloscope. It even works at 25 Million samples per second. The secret is using an external Analog to digital converter and a FIFO. Here is the video on YouTube.

Here is the schematic diagram.
Here is a picture of the wiring, it is a little complicated.

There is an optional 74LS10 that prevents writes to the FIFO once it is full.  Otherwise about every 10 scans you will get a lot of garbage.

You could also add two 74LS390 dual divide by 10's and an ten position switch to have a method of selecting the recording frequency.

An op amplifier on the input would also improve the performance.  Then you could select AC/DC coupling, Gain, and divide by 10 for input options.  The position control works better with an op amp too.


Bryan Thompson said...


Would you mind posting the code to go with this? I am trying to capture images from an analog SEM. I imagine I will need to link together enough FIFO chips to capture an entire scan line and transfer the data in the background, catching up with the scan line not later than the start of the next scan line.

The SEM outputs are X, Y, Video level, and blanking. I can pick off the start/end of the scan line using the blanking signal.


Bob Davis said...

How do I contact you to send you the code?

Unknown said...

Was wandering is possible to get the source code and schematics if added to features?

Arunachalam said...


Great Initiative.
I'm very new to electronics. It would be really helpful to me in debugging stuffs.
Please share me the source code & schematics with FIFO IC.

Thanks in advance.

Unknown said...

How can I contact with you? I have found another article here

Unknown said...

Hello Bob,
Many excellent innovations, well done!

I have developed some of the principals to create a 20 MHZ oscilloscope using the tlc5510a and a 2K fifo (IDT7203L12TPG).
I am using an Arduino Mega with many more ports than the Uno and memory to spare.
By using a 2K fifo I am able to trigger by downloading all the data to the mega and then processing the trigger point in memory.
Once found, I upload the subsequent 1000 values to the PC. Triggering is therefore rock solid. I have edge and level triggering on either voltage slope.
A simple potentiometer is used to set the trig point (see interface picture).

I have written a VB6 package to display the data graphically.

20MHZ setting with a nominal 31372.55Hz square wave:
PC interface one
10Mhz setting with frequecy determined from the voltage data:
PC interface two
The interface:
Arduino interface

By applying 1.2 MHz clock through a SN74LS393N Dual 4-stage Binary I can range down to 0.078 MHz.
I controlled the clock output using a SN74LS10N, Triple 3-Input NAND. A point to note the 3rd line is not required as the fifo stops grabbing data when it is full, automatically. The two inputs are the clock and Arduino control.
I am using the adc chip in the 4V reference mode.
I have three input options.
1) "Direct" with a 4V3 zenner as protection. Useful if external buffering is to be used.
2) AC, with a simple 2u2 tantalium and 1K pot to set the mid voltage and a 4V3 zenner.
3) Buffered, with the input dropped across 4 matched 22K resistors. This produces equal attenuations. The drop is passed through the excellent NE5534P 10MHz low noise op amp, configured as a follower... and then to a 4V3 zenner.
This produces input ranges of 0 to 4, 5.33, 8 and 16V

Thanks for the inspiration,

Bob Davis said...

David Patterson that is some fantastic work!!!

Unknown said...

Thanks Bob,

I have referenced your work at this instructable

You might want to checkout the video in my comment dated 2017-10-13