Dangerous DSO part 1: There’s so much between 0 and 1

Dangerous DSO is a new logic analyzer/oscilloscope prototype we’ve been using in the lab. It combines a 16 channel logic analyzer and one 50MHz oscilloscope channel with +/-10volt DC range. The combined tool shows what your signal does between 0 and 1, which helps pinpoint noise and other electrical glitches.
Our goal with the D-DSO is to make the simplest possible oscilloscope reference design. It doesn’t have range selection or AC coupling, it can’t trigger based on analog voltage levels. It’s a basic design with the bare minimum needed to capture an analog signal.

This screenshot shows the D-DSO view of a pulse-width modulator square wave. The analog view shows that the signal isn’t perfectly square, it bounces around slightly. We haven’t compared it to a real scope yet. There’s no telling what noise is real, and what comes from our crappy analog design.

A general overview of the design follows the break. Daily articles will cover the ADC, the analog front-end, and simulating the circuit all week.
This is not a finished project, it will not be produced. We’re posting an internal design to get some feedback. Look for a new Dangerous DSO article every day this week.
Schematic, PCB, partlist
See the Dangerous DSO wiki page.
FPGA

The Dangerous DSO uses a Xilinx Spartan XC3S250E-TQ144 FPGA. We got really comfortable working with this chip and supporting it on the Logic Sniffer. We could have used the 100pin package, but the pinout on the 144pin version is a lot easier to work with.
The FPGA has a basic support circuit with a 50MHz crystal and various pullup resistors. A 2Mbit flash ROM stores the firmware that the FPGA loads at start-up. We added a button for whatever.
PIC

Our favorite PIC 18F24J50 tends to the ROM programming and USB connection. This is one of Microchip’s featured 3.3volt chips with extended support. It should have good availability for a long time. The PIC runs Honken’s open source USB stack with only a couple issues.
ROM upgrade mode is based around the SUMP protocol. The metadata command 0×04 that returns the hardware description in normal mode also works in update mode. If you try to do a logic capture while the hardware is in update mode the descriptor is different and the client can warn the user. Similarly, the upgrade application understand the normal logic analyzer mode metadata and prompts the user to enter update mode and try again.
The upgrade application has raw access to the ROM chip using Bus Pirate SPI bulk read/write commands. This means new ROM chips can be supported by a software update alone, no firmware changes needed. Bulky chip ID and write algorithms are all in the computer app where they belong.
IO

D-DSO has 16 digital IO channels. 8 are buffered and 5volt tolerant. The buffer is bi-directional, and the FPGA is wired to control the direction and output enable signals.
assign bufferOEOut=1'b0;//OE low for normal outputs assign bufferDirectionOut=1'b0;//direction low for B->A (external to FPGA)
We modified the latest Demon Core Verilog logic analyzer engine to configure the buffer for input and enable it permanently.
//DSO LEDs assign groupLEDs[2:0]=disabledGroups[2:0]; assign extClockLEDnn=!extClock_mode;
Each IO group and the DSO input have a LED that lights when they are selected. Group LEDs are controlled by wiring the output pins to the disabled group configuration bits in core.v.

The external clock LED is controlled by the external clock mode bit, also in core.v. We haven’t figured out where to connect the external trigger LED, but that’s ok because we never use it.
Analog

An ADS830 flash ADC measures a voltage and outputs the value on 8 parallel pins. A simple analog front-end with a single opamp gives the ADC a +/-10volts input range.
//DSO clock, range output assign ADCClockOut=!clock; assign ADCRangeOut=1'b1;
The ADC needs a clock, up to 60MHz. We make it simple and wired the ADC clock to the inverse of the system clock. A better method is probably needed.
Amazingly that’s the only real change to support the ADC. 8bits from the ADC output pins connect to logic analyzer channel group 3. The FPGA doesn’t care what the data is, it just passes it to the client. Luck for us, the client already has support for displaying a channel group as an analog signal.
All week we’ll post details about the analog design:
- Feed and water your ADC
- Messing with your front-end
- Lets get over simulated
Power

USB and external power supplies are toggled with a switch. USB supplies are not guaranteed to be 5volts, and the fuse eats a little more too. An external supply is more reliable.
We haven’t finished populating the power section, we’ve only used it with the USB supply.
Using it

SUMP clients, even the old ones, already support an oscilloscope mode. Choose scope mode for channel 3 under Diagram->mode settings.
We connected GROUP0 channel 0 and the DSO input to a 50kHz square wave generated by the Bus Pirate. Capture is configured for group 0 and group 3, group 3 is where the ADC data output is attached to the FPGA. Click capture.

There it is, the shades of gray we’ve been missing, our analog hello world. It’s probably a horrible representation of the actual signal, but you gotta start somewhere.
Files
Design files will be available later in the week under a CC BY-SA license. We’ll release a patch against the Demon core eventually, but the snippets here give the general idea.
Get one
You can’t. This is just for fun.
PCBs will be available in the free PCB drawer soon, but beware many issues. VR4 is not connected to ground. The op-amp footprint needs a ton of jumpers and modifications depending on the opamp. The single-turn pots are a terrible choice and make adjustment nearly impossible. More bug discussions later this week too.
Followups
All week we’ll post details about the analog design:
- Feed and water your ADC
- Messing with your front-end
- Lets get over simulated


Comments
Impressive!
Interesting coincidence. I was just idly eyeing up the ADS830 and various other similar TI ADC chips a couple of days ago for possible digital oscilloscope use at some point in the distant future… will be curious to hear about your analog stage design.
What a coincidence! I bought a DSO kit in Akihabara this weekend to see some waveforms in my designs. In the end, I was planning to reverse engineer it (hint: the schematic is available) for a Logic Sniffer DSO wing design. The page for it is http://akizukidenshi.com/catalog/g/gK-04279/
I’ve watched Dave Jones oscilloscope teardowns on his EEVBlog.com. It’s interesting to note that the Agilent Infiniivision 2000/3000 series don’t use the CPU to write to display. Instead a large Spartan FPGA seems to handle all all the signal processing and display handling. I guess that’s how they manage to write 1M waveforms / second to the screen (3000 series). By comparison my BitScope seems positively sluggish.
Unfortunately I know squat about FPGAs. Is such approach feasible for a <$150 scope board?
Curious. It does seem like that’s the only obvious approach if you want to emulate a traditional scope’s phosphor persistence at ludicrous numbers of waveforms/sec (and by that I mean I’ve been wondering if it’s feasable too). Don’t think that’s really what the Dangerous DSO is aimed at though somehow…
My experience with these PC scopes hasn’t been great. I got a BitScope BS31000 a few years ago, and while it’s fine, it just doesn’t feel like a real scope. There are two problems:
1. The software. I think the BitScope software has usability issues. It’s not intuitive. I think one of the problems is they slavishly mimic the layout of a traditional scope and translate the buttons/knobs directly into UI widgets. They make no use of the actual scope display to display information other than the grid and trace. I think think good scope software should be designed as if the scope was invented today (and not over a century ago). Eg in the case of a touch display, pinch, swipe, drag etc could be used as replacement for knobs and buttons.
2. The update rate. It feels very, very slow.
Having looked at Dave Jone’s teardown videos… it would seem that really good scope is not rocket science, but a *lot* of design work (actually it’s probably harder than rocket science :-). The bill of material certainly does not justify the price tags… but when you factor in the development it probably does.
I wonder could the open source / open hardware community give the likes of Agilent a run for their money?
Some kind of modular approach: A good analog/ADC front end (like this project). A separate scope UI software project (independent of analog front end) — like that nice logic analyzer software. And then maybe a module that can couple the analog front end via a FPGA to a LCD display for super high waveforms/second.
Give me a proper AFE or give me death! Actually, like you say, it’s just for fun so whatever. I can just as easily make a DSO shield of my own for the OLS (and probably will). But for future revisions, throw a simple (preferably passive) low pass on that input to prevent aliasing. Maybe even two, one 50mhz one 20mhz, with a mux to select bw limit. Either way, it’s safe to say this scope will do awfully towards the high end of that 50mhz, since it’s only nyquist (or maybe 2x nyquist) sampling. But still, it’s definitely going to cause hell if you go OVER 50mhz.
Heh, I guess everybody thought of just starting simple with the SUMP scope feature but seem only I announced my idea (http://dangerousprototypes.com/forum/viewtopic.php?f=23&t=2191). One suggestion I would like to make is to use the AD9215BRUZ-105 which clocks to 105MS/s.
Great stuff! .. love the way you guys spin a neat pcb with surface mount parts for everything :-) ..And that title’s a keeper…who came up with it?
Shut Up And Take My Money!
But seriously tho… How much?
Wait till we finish the series before you say that :) This is just a novelty, I would feel uncomfortable selling them to anyone. I have PCBs though if you want to roll your own :)
LoL why was I thinking the exact same sentence. I would buy one, not only do we get a cool toy but we supporting good open hardware.
Forgive my noobish question, but what would an ideal analog front end be? noise suppression and a low pass filter?
Today’s article tries to cover that, it’s up now :)
are the eagle files of this project downloadable?
i want to use the ADS830 but if you already made a footprint for it, heck half the PCB i need, it would be a lot less work
and yes the project is a half decent 2 channel scope and yes it will be open source ;)